A combination of nice docker cmd to remember

Docker Cheatsheet - cmd

docker commit = création d’une image à partir du container Exemple:

docker commit -m "comment about my image" <CONTAINER ID> art:v1.0
Note
art:v1.0 = repository:tag

docker history <ID_IMAGE> = permet de voir les actions réalisées (et leur impact en stockage mémoire) avant de commit le container en image

docker rmi = raccourcis de suppression d’une image, au lieu de docker rm image

docker diff <CONTAINER> = visualiser les modifications que le conteneur a apporté au delà des couches de lecture de l’image.

nmap -PM <ip> = balayage des ports d’une machine (container, serveur etc ..)

Docker Cheatsheet - arguments

--env MYARG=""

--env-file <my-arg-file>

--hostname <MyContainerHostname>

Docker Cheatsheet - dockerfile

Exemple de dockerfile

FROM ubuntu:latest
MAINTAINER arthur
RUN apt-get update \
&& apt-get install -y nano git \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

Build de l’image avec la commande

docker build -t monimage:version

Docker Cheatsheet - layers

Deux types de couches générées à partir du docker file: - Lecture seule (l’image) - Lecture/ecriture (le container)

Note
Les images peuvent se partager des couches (pour alléger la stack)

La cmd docker history permet de visualiser les couches.

Lier des volumes entre containers

Exemple avec 3 containers : - ubuntu:latest avec nginx - 2 workers bash+php

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y nginx
VOLUME /var/www/html/
ENTRYPOINT ["nginx", "-g", "daemon off;"]
FROM php:7.2-cli
COPY rollon.sh /
COPY affichage.php /
RUN chmod 755 /rollon.sh
ENTRYPOINT ["./rollon.sh"]
Note
Cf sources du tuto de xavki @gitlab.com

Dans le dossier avec dockerfile serveurweb

docker build -t serveurweb:latest .

Dans le dossier avec dockerfile worker1

docker build -t worker1:latest .

Lancement des containers

docker run -dit --name site serveurweb:latest
docker run -dit --name worker1 --volumes-from site worker1:latest

Cache docker

Construire le plus vite possible les images, démarrer plus vite les containers etc..

OPTION: --no-cache

Note
Dans un dockerfile, mettre les commandes utilisant le cache en premier. Une fois que le cache n’est plus utilisé dans le script, il ne sera plus utilisé ensuite. Mettre les parties les plus stables en début de script et les plus variables en fin de script.

Exemple d’un cas de --no-cache :

Si mon script calcule une date par exemple, il faudra mettre un --no-cache car sinon même en cas de nouveau build de l’image docker va utiliser le cache et ne recalculera pas la date.

Si je fais un RUN apt-get update aujourd’hui dans mon build sans mettre le --no-cache, mon apt-get update sera figé dans le temps.

Network docker

Réseau par défaut : docker0 : 172.17.0.0/16

Communication entre conteneur

Warning
par défaut, ip non fixes. Best practice: utiliser le nom de conteneur.

'You can use the container name or the container’s (short, 12 character) id to connect from container to container with docker’s embedded dns as long as you have both containers on the same network and that network is not the default bridge.'

docker create --name my-nginx \
  --network my-net \
  --publish 8080:80 \
  nginx:latest