Ceci est une ancienne révision du document !
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 :
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 <missing> 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