====== Créer une image Docker à la volée (commit) ====== Permet de créer des images à partir d'un conteneur. Il est recommandé de l'utiliser que dans des cas spécifiques. Par exemple dans les cas suivants : * Snapshot ponctuel du conteneur * Faire un fix rapide dans le conteneur mais non durable * Tester et debugguer Pour des modifications plus durable, il vaut mieux s'appuyer sur un Dockerfile. Pour commencer démarrer un conteneur **debian** qui lance la commande ''sleep infinity'' : docker run -d --name c1 debian sleep infinity On peut se connecter au conteneur, y apporter les modifications que l'on souhaite et le quitter, par exemple : docker exec -ti c1 bash echo "toto" > /var/lib/toto.txt ... exit On peut donc créer une image de l'état du conteneur ainsi : docker commit c1 myimage-c1:v1.0 Avec la commande... docker image ls ...On peut voir REPOSITORY TAG IMAGE ID CREATED SIZE myimage-c1 v1.0 0b486f336e68 6 minutes ago 117MB debian latest 0ce03c8a15ec 42 minutes ago 117MB On peut de nouveau créer un nouveau conteneur à partir de cette image ainsi : docker run -d --name c2 myimage-c1:v1.0 En listant les processus Docker en fonctionnement... docker ps ...On constate que les 2 conteneurs sont en fonctionnement avec la commande ''sleep infinity'' : CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a9b8064f9bcb myimage-c1:v1.0 "sleep infinity" About a minute ago Up About a minute c2 1600fa08b0a1 debian "sleep infinity" 12 minutes ago Up 12 minutes c1 :!: Pourtant le conteneur c2 n'a pas été lancé avec la commande ''sleep infinity''. Ceci montre que la création de l'image prend en compte les processus actifs. Ces mêmes processus seront actif lorsqu'un conteneur est créé à partir de l'image "commitée". On peut ajouter d'autres options pour créer l'image, comme un commentaire et ajouter l'auteur de l'image : docker commit --message "mes commentaires" --author "Benoit" c1 myimage-c1:v1.1 On peut retrouver ces informations ainsi dans l'image : docker inspect -f "{{.Author}} {{.Comment}}" myimage-c1:v1.1 On peut lister l'historique des commit d'une image ainsi : docker history myimage-c1:v1.1 Exemple de résultat : IMAGE CREATED CREATED BY SIZE COMMENT a1b6eff85cc8 8 minutes ago sleep infinity 76B mes commentaires 0ce03c8a15ec About an hour ago /bin/sh -c #(nop) CMD ["bash"] 0B About an hour ago /bin/sh -c #(nop) ADD file:39d17d28c5de0bd62… 117MB On peut ajouter des modifications/instructions à lancer pour notre image. Par exemple on ajoute un variable d'environnement ''MYVAR=Benoit'' : docker commit --change "ENV MYVAR=Benoit" c1 myimage-c1:v1.2 Lorsque l'on créé un conteneur à partir de cette nouvelle image on constate que la variable est bien active : docker run -d --name c3 myimage-c1:v1.2 docker exec c3 env Résultat : PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=1f8770a8bb5b MYVAR=Benoit HOME=/root