5 minutes
Docker Cheatsheet
👴 Careful You’re reading an old article ! Some links might be broken and content may be outdated
Petit article mémo sur Docker
Getting Started
make sure that client can talk to engine + current version docker version
An image is the application we want to run. A container is an instance of the image running as a process.
Containers
docker container run –publish 80:80 nginx Left number == Host port. Make sure it’s not already used (otherwise bind error) 1. Pull down “nginx” image from Docker Hub 2. Started a new container accessible from that image. 3. Opened port 80 on the host IP 4. Routes that traffic to the container IP port 80.
Option –detach => Run in the background. docker container run –detach –publish 80:80 nginx
List all running containers
docker container ls == docker ps
Nommer un container
docker container run –detach –name LENOM –publish 13370:80 nginx
Voir les derniers logs d’un container
docker container logs nom_container
Voir les processus s’exécutant dans un container
docker container top nom_container
Ce qui se passe quand on run un container
Changing the defaults : - The listening port on the host - Change version of the image - Change CMD executed when the container runs on start
A container is a process running on your host environment system.
Run multiple containers
docker container run –detach –name nginx –publish 80:80 nginx docker container run –detach –name mysql –env MYSQL_RANDOM_ROOT_PASSWORD=yes –publish 3306:3306 mysql docker container run –detach –name httpd –publish 8080:80 httpd
See what’s going on in containers
Process list in one container docker container top container_name
Details of one container config
docker container inspect container_name
Performance stats for all containers
docker container stats container_name
Getting a shell inside container
docker container run -it Start new container interactively T for terminal I to keep the session open
docker container exec -it Run additionnal command in a running container
Alpine is smaller than Ubuntu.
Publishing ports is always in HOST:CONTAINER format.
docker container run
Assignment - CLI App Testing
docker container run –rm -it –name centos centos:7 bash curl 7.29
docker container run –rm -it –name ubuntu ubuntu:14.04 bash curl 7.35
docker container run –detach -it –name centos centos:7 bash
Assignment - Round Robin
docker network create round_robin_network
docker container run –detach –network round_robin_network –net-alias search elasticsearch:2
docker container run –rm –net round_robin_network alpine nslookup search
docker container run –rm –net round_robin_network centos curl -s search:9200
Container Images
An image is made of app binaries and dependencies. Metadata about the image data and how to run the image. Not a complete OS. No kernel, kernel modules. Small as one file (app binary) like golang. Big as Ubuntu with apt, apache, PHP and more installed.
Docker Hub
docker pull nginx docker pull nginx:1.10.11 Always use a specific version to prevent software from updating automatically using latest tag. Docker Hub = The apt package system for containers Alpine => Smaller than counterparts OS.
Docker Image Layers
docker history mysql View changes on the image. When we download an image, we start with one layer. In a dockerfile, we can add more stuff using apt-get or env variables : it adds a new layer everytime. Each layer is uniquely identified and only stored once on a host. Save storage space.
#Image Tagging and Pushing to Docker Hub. Images don’t have name. We refer to them using repository, tag. Tag => Pointer to a specific image commit.
Add tag to existing image: docker image tag SOURCE_IMAGE:TAG TARGET_IMAGE:TAG
docker image push bretfisher/nginx.
Dockerfile basics
&& => Make sure these commands are run for one layer. CMD => final command that will be run after container is launched or restarted.
Running Docker Builds
At the top => things that change the least At the bottom => things that change the most
Extending official images
WORKDIR => cd pour se placer dans un répertoire.
Assignment: Build Your Own Image with a Dockerfile
Dockerfile are part process workflow and part art. docker image build -t node-app . docker container run -p 3000:80 –rm node-app
Container Lifetime and Persistent Data
Containers are usually immutable and ephemeral. Temporary and disposable. Volumes need manual deletion.
Use friendly name for volumes to see which volumes is attached to which container. docker container run -d –name mysql -e MYSQL_ALLOW_EMPTY_ROOT_PASSWORD=true -v mysql-database:/var/lib/mysql mysql
If we need to specify the driver, we need to create the volume ahead of container creation.
Partager dossier courant pour live modifs docker container run -d –name nginx -p 80:80 -v $(pwd):/usr/share/nginx/html nginx
Assignment - Named Volumes
docker container run -d –name postgres -v pgsql-data:/var/lib/postgresql/data postgres:9.6.1
docker container logs postgres
docker container stop postgres
docker container run -d –name postgres2 -v pgsql-data:/var/lib/postgresql/data postgres:9.6.2
Assignment - Bind Mounts
Super cool for local development.
docker run -p 80:4000 -v $(pwd):/site bretfisher/jekyll-serve
Docker Compose
Configure relationships between containers Save our docker container run settings in easy-to-read file. Create one-liner developer environment startups.
We specify in that file the containers we need to run …
docker-compose.yml
depends_on : explique les dépendances entre containers au yaml
docker-compose up # setup volumes networks and start all containers
docker-compose down # stop all containers and remove containers / volumes / networks
docker-compose logs to see logs, -d detach to run in background.
docker-compose ps , top, down.
# Assignment - Writing a compose file use the service name as the DNS name. localhost won’t work. use name. Volumes are never removed automatically.