web-dev-qa-db-fra.com

Docker Commit sur une image existante

Docker commit crée une nouvelle image chaque fois que la commande commit est émise. Est-il possible d'émettre un commit sur le conteneur en cours d'exécution et les modifications sont enregistrées dans l'image existante ((l'image existante ici est l'image à partir de laquelle le conteneur a été généré)). De cette façon, aucune nouvelle image ne sera créée chaque fois que j'exécuterai le commit.

Veuillez me faire savoir si cela est possible?

10
vijaygopal

L'utilisation de noms et de balises met déjà à jour l'image que vous souhaitez. Assurez-vous de mettre le nom de la même image après l'ID du conteneur lors de la validation. De la doc :

$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS              NAMES
c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            desperate_dubinsky
197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            focused_hamilton

$ docker commit c3f279d17e0a  svendowideit/testimage:version3

Edit: Je vous recommande fortement d'arrêter le conteneur avant de continuer, afin de réduire vos chances de devenir obsolète pour la prochaine exécution. En outre, il peut être judicieux d'utiliser une autre balise, de la tester, puis de réétiqueter votre cible réelle.

Edit2: Comme indiqué par @MilindDeore, cela n'écrase pas physiquement l'image précédente, mais réadresse le nom. Ainsi, vous devrez peut-être effectuer une suppression manuelle ou attendre qu'elle soit récupérée (si elle est en place).

12
yasc

Les images Docker sont immuables, sous le texte de la documentation:

L'image Docker est en lecture seule. Lorsque Docker exécute un conteneur à partir d'une image, il ajoute une couche de lecture-écriture au-dessus de l'image (à l'aide d'un UnionFS) dans laquelle votre application s'exécute.

Par conséquent, la suggestion donnée par @hurturk va créer une nouvelle image et non ce qui est demandé dans la question.

6
Milind Deore

Pour créer une nouvelle image à partir des modifications apportées à un conteneur, c'est aussi simple que d'exécuter une seule commande. Avant de le faire, changeons le conteneur!

Dans ce conteneur, nous sommes libres de faire tout ce que nous ferions généralement sur Fedora. Dans ce cas, nous allons installer Git, puis valider le conteneur. Les instructions liées concernent l'installation de Git sur CentOS 6, mais elles fonctionneront également pour ce conteneur Fedora.

Une fois ces instructions terminées, vous pouvez vous déconnecter ou vous détacher du shell sans quitter, utilisez la séquence d'échappement Ctrl-p + Ctrl-q.

Enfin, il est temps de valider nos modifications dans une image nommée. Cette commande convertit le conteneur 9c09acd48a25 en une image avec le nom Fedora-base-with-git:

docker commit 9c09acd48a25 Fedora-base-with-git

Docker utilise le concept "commits are cheap" dans sa conception. Vous êtes encouragé à vous engager fréquemment et à tout moment dans l'historique d'une image, tout comme le contrôle de version.

0
Code7885