103 lines
5.0 KiB
Markdown
103 lines
5.0 KiB
Markdown
|
---
|
||
|
title: Our Notes On Docker
|
||
|
sidebar: Handbook
|
||
|
showTitle: true
|
||
|
hideAnchor: true
|
||
|
---
|
||
|
|
||
|
## Docker Nomenclature and Notes
|
||
|
|
||
|
- `Docker Image` - the actual package, **artifact** which can be shared with others, docker images are built in layers via Dockerfile
|
||
|
- `Docker Container` - a *running* instance of a docker image, file system is virtual, contains a port for communication
|
||
|
- Docker run - command which executes *pull* and *start* (only pulls images we do not have locally)
|
||
|
- Docker vs Virtual Machine
|
||
|
- Operating System = Hardware > OS Kernel (layer 1) > Applications (layer 2)
|
||
|
- Docker = Virtualization of applications (layer 2)
|
||
|
- Virtual Image = Virtualization of OS (layer 1)
|
||
|
- Benefits of Docker = images are much smaller, runs faster
|
||
|
- Benefits of VM = you can run different OS (Windows on Linux) since it has it's own OS Kernel
|
||
|
- Docker Port vs Host Port
|
||
|
- Multiple containers may use the same port
|
||
|
- Bind host port to docker port, i.e. host 3000 -> docker 3000, host 3001 -> docker 3000
|
||
|
- `Docker Compose`
|
||
|
- Configuration file specifying *docker commands* to make it easier to work with
|
||
|
- Automatically handles creating a common *docker network*
|
||
|
- Docker compose is usually installed with docker so you already have it
|
||
|
- `Docker Volumes`
|
||
|
- Provides data persistence between host machine and docker containers
|
||
|
- The data between volumes is replicated between the host and docker container volumes
|
||
|
- 3 docker volume types: specified, anonymous, and named volumes, named volumes on the host are managed by docker
|
||
|
- Production should use *named volumes*
|
||
|
- Container Mongodb = /data/db
|
||
|
- Container MySQL = /var/lib/myself
|
||
|
- Container Postgres = /var/lib/postgres/data
|
||
|
- Host Windows = C:\ProgramData\docker\volumes
|
||
|
- Host Linux = /var/lib/docker/volumes/[hash]/_data
|
||
|
- Host Mac = /var/lib/docker/volumes/[hash]/_data
|
||
|
- `screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty` add access linux VM on mac where data is stored, `ctrl + a + k` to exit screen session
|
||
|
|
||
|
## Basic commands
|
||
|
|
||
|
- `docker pull` downloads a docker image locally
|
||
|
- `docker images` shows a list of local docker images and their sizes
|
||
|
- `docker run` run a docker container, it's two commands in one *docker pull* and *docker start*
|
||
|
- `docker run -d` runs the docker container in *detach mode*
|
||
|
- `docker run -p` binds the container to host port i.e. *-p6000:6370*, *-p [host]:[container]*
|
||
|
- `docker run --name` give the container a name so that you do not need to use the SHA
|
||
|
- `docker run -d -it python` runs python images in *interactive terminal* mode
|
||
|
- `docker run -e` runs an image with an environment variable
|
||
|
- `docker run -net` specify a docker network to run within
|
||
|
- `docker start` start a container, retains the settings from the run command
|
||
|
- `docker stop` - stops a container
|
||
|
- `docker ps` shows *running* containers
|
||
|
- `docker ps -a` shows *running and not-running* containers
|
||
|
- `docker logs` shows the *standard output* of the *running* container
|
||
|
- `docker logs -f` follow the *standard output*, similar to *tail -f*
|
||
|
- `docker exec -it` runs the container with interactive terminal
|
||
|
- `docker network ls` shows a list of the internal docker network
|
||
|
- `docker network create` create a docker network
|
||
|
- `docker build -t my-app:1.0 .` builds an image from a *Dockerfile* in the current directory
|
||
|
- `docker rm` removes a docker container which you need to do before docker rmi
|
||
|
- `docker rmi` removes a docker image, i.e. docker rmi my-app:1.0
|
||
|
- `docker run -v` mounts host filesystem to docker container filesystem
|
||
|
|
||
|
## Docker Compose
|
||
|
|
||
|
- `docker-compose -f mongo.yaml up` pulls, starts, and creates container network
|
||
|
- `docker-compose -f mongo.yaml up -d` runs containers in *detached mode*
|
||
|
- `docker-compose -f mongo.yaml down` stops container, removes container, and stops container network
|
||
|
|
||
|
## First Dockerfile
|
||
|
|
||
|
```docker
|
||
|
FROM python:3.9-alpine3.13
|
||
|
|
||
|
RUN apk add bash nodejs
|
||
|
|
||
|
COPY hello.* /
|
||
|
|
||
|
CMD ["bash"]
|
||
|
```
|
||
|
|
||
|
## First commands
|
||
|
|
||
|
- `docker build .` builds the container
|
||
|
- `docker run --name [name] [sha]` installs the container
|
||
|
- `docker run -it --name [name] [sha]` installs the container and starts in interactive mode
|
||
|
- `docker ps` shows all the running containers
|
||
|
- `docker ps -a` shows all the running and exited containers
|
||
|
- `docker stop [name]` stop container
|
||
|
- `docker start -ai [name]` start container interactively
|
||
|
- `docker rm [name]` removes container
|
||
|
|
||
|
## Resources
|
||
|
|
||
|
- [Creating your first Dockerfile, image and container](https://www.youtube.com/watch?v=hnxI-K10auY) great place to start
|
||
|
- [Docker Tutorial for Beginners [FULL COURSE in 3 Hours]](https://www.youtube.com/watch?v=3c-iBn73dDE) most helpful
|
||
|
- [Docker For Beginners: From Docker Desktop to Deployment](https://www.youtube.com/watch?v=i7ABlHngi1Q)
|
||
|
|
||
|
## Related Resources
|
||
|
|
||
|
- [Kubernetes Tutorial for Beginners FULL COURSE in 4 Hours](https://www.youtube.com/watch?v=X48VuDVv0do) To manage distribution of contains across many servers
|
||
|
|
||
|
**[Back: Technologies to learn](../technologies-to-learn)**
|