Outils pour utilisateurs

Outils du site


informatique:docker:commitdocker

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
<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
informatique/docker/commitdocker.txt · Dernière modification: 2023/11/23 10:45 par benoit