20/04/2021

0. Commits & Layers

Lu 108 fois Licence Creative Commons

Créer une image à partir d'un conteneur

Il est possible de créer une image à partir d'un conteneur, prenant en compte les changements effectués à l'intérieur.
Démarrez un conteneur PHP/Apache:

docker run -d --name php-app php:apache

Installez les extensions PDO:

docker exec php-app docker-php-ext-install pdo pdo_mysql

Créez une nouvelle image php-pdo:v1 à partir du conteneur:

docker commit php-app php-pdo:v1

Vérifiez que l'image est enregistrée:

docker image ls
[output]REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
[output]php-pdo                                     v1                  2f7fd0a3be4b        8 minutes ago       414MB
[output]...

Couches d'images

La nouvelle image a repris l'image php:apache en ajoutant une couche supplémentaire:

docker history php-pdo:v1
[output]IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
[output]2f7fd0a3be4b        14 minutes ago      apache2-foreground                              202kB               
[output]0c37fe4343a5        10 days ago         /bin/sh -c #(nop)  CMD ["apache2-foreground"]   0B                  
[output]<​missing​>           10 days ago         /bin/sh -c #(nop)  EXPOSE 80                    0B
[output]...

Les couches d'une image ne sont accessibles qu'en lecture. Dans un conteneur, seule la dernière couche est accessible en écriture:

Seule la couche conteneur est accessible en écriture, chaque conteneur ayant la sienne.
Les couches image sont immuables pour que plusieurs conteneurs puissent diverger de l'exacte même image.


La création d'image par la commande commit est à privilégier pour debuguer un conteneur car la maintenabilité de l'image est limitée: aucune modification des couches n'est possible.