14/03/2024

0. Commits & Layers

Lu 1694 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.