Comment utiliser la commande docker container commit pour créer de nouvelles images

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce lab, vous apprendrez à utiliser la commande docker container commit pour créer de nouvelles images Docker à partir de conteneurs existants. Nous commencerons par lancer et modifier un conteneur, puis nous validerons ces modifications dans une nouvelle image.

Vous explorerez également comment valider les changements d'un conteneur avec de nouvelles configurations, y compris la définition de nouvelles instructions CMD et EXPOSE, démontrant ainsi la flexibilité de création d'images personnalisées basées sur des conteneurs en cours d'exécution.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/run -.-> lab-555104{{"Comment utiliser la commande docker container commit pour créer de nouvelles images"}} docker/ps -.-> lab-555104{{"Comment utiliser la commande docker container commit pour créer de nouvelles images"}} docker/rm -.-> lab-555104{{"Comment utiliser la commande docker container commit pour créer de nouvelles images"}} docker/inspect -.-> lab-555104{{"Comment utiliser la commande docker container commit pour créer de nouvelles images"}} docker/pull -.-> lab-555104{{"Comment utiliser la commande docker container commit pour créer de nouvelles images"}} docker/images -.-> lab-555104{{"Comment utiliser la commande docker container commit pour créer de nouvelles images"}} end

Démarrer et modifier un conteneur

Dans cette étape, vous apprendrez comment démarrer un conteneur Docker et effectuer des modifications à l'intérieur. Nous utiliserons une simple image Ubuntu pour démontrer le processus.

Tout d'abord, téléchargeons l'image Ubuntu. Cette commande récupère l'image Ubuntu depuis Docker Hub vers votre machine locale.

docker pull ubuntu:latest

Vous devriez voir une sortie indiquant que l'image est en cours de téléchargement. Une fois le téléchargement terminé, vous pouvez exécuter un conteneur basé sur cette image.

Maintenant, lançons un conteneur interactif en utilisant l'image Ubuntu. Les flags -it sont utilisés pour allouer un pseudo-TTY et garder stdin ouvert, vous permettant d'interagir avec le shell du conteneur. Le flag --name attribue un nom au conteneur, facilitant sa référence ultérieure.

docker run -it --name my-ubuntu ubuntu:latest /bin/bash

Après avoir exécuté cette commande, vous serez dans le shell bash du conteneur. Vous pouvez le vérifier en contrôlant le hostname, qui correspondra à l'ID du conteneur.

À l'intérieur du conteneur, créons un simple fichier. Nous utiliserons la commande echo pour écrire du texte dans un fichier nommé hello.txt à la racine.

echo "Hello from inside the container!" > /hello.txt

Vous pouvez vérifier que le fichier a été créé et contient le bon contenu en utilisant la commande cat.

cat /hello.txt

Vous devriez voir la sortie "Hello from inside the container!".

Maintenant que nous avons effectué une modification dans le conteneur, sortons du shell du conteneur.

exit

Vous êtes maintenant de retour dans le terminal de votre machine hôte. Le conteneur continue de tourner en arrière-plan. Vous pouvez le vérifier en listant les conteneurs en cours d'exécution.

docker ps

Vous devriez voir le conteneur my-ubuntu listé.

Valider les modifications d'un conteneur dans une nouvelle image

Dans l'étape précédente, nous avons effectué une modification dans un conteneur en exécution en créant un fichier. Nous allons maintenant apprendre à sauvegarder ces modifications sous forme d'une nouvelle image Docker. Ce processus s'appelle "commiter" un conteneur.

Commiter un conteneur crée une nouvelle image qui inclut les modifications apportées au système de fichiers et à la configuration du conteneur. Cela est utile pour créer des images personnalisées basées sur des images existantes.

Pour commiter le conteneur, nous utilisons la commande docker commit. La syntaxe de base est docker commit [nom_du_conteneur] [nom_de_la_nouvelle_image]. Nous allons commiter le conteneur my-ubuntu et nommer la nouvelle image my-ubuntu-modified.

docker commit my-ubuntu my-ubuntu-modified

Vous devriez voir une longue chaîne de caractères en sortie, qui correspond à l'ID de la nouvelle image créée.

Vérifions maintenant que la nouvelle image a bien été créée. Nous pouvons utiliser la commande docker images pour lister toutes les images sur votre système.

docker images

Vous devriez voir my-ubuntu-modified dans la liste, ainsi que l'image originale ubuntu.

Pour confirmer que les modifications ont bien été sauvegardées dans la nouvelle image, lançons un nouveau conteneur basé sur my-ubuntu-modified et vérifions la présence du fichier créé précédemment.

docker run -it --name my-ubuntu-test my-ubuntu-modified /bin/bash

Une fois dans le nouveau conteneur, vérifions l'existence du fichier /hello.txt.

cat /hello.txt

Vous devriez voir le message "Hello from inside the container!", ce qui confirme que les modifications ont bien été validées dans la nouvelle image.

Maintenant, sortons du conteneur.

exit

Enfin, nettoyons le conteneur de test que nous venons de créer.

docker rm -f my-ubuntu-test

Valider les modifications d'un conteneur avec de nouvelles configurations

Dans cette étape, nous allons explorer comment valider les modifications d'un conteneur tout en incluant de nouveaux paramètres de configuration pour l'image résultante. Cela vous permet de définir des aspects comme la commande par défaut à exécuter au démarrage d'un conteneur ou des variables d'environnement.

Nous continuerons à utiliser le conteneur my-ubuntu des étapes précédentes. Tout d'abord, arrêtons le conteneur car nous allons valider son état actuel.

docker stop my-ubuntu

Vous devriez voir le nom du conteneur my-ubuntu s'afficher en sortie, indiquant qu'il a été arrêté.

Maintenant, validons le conteneur et ajoutons un label à la nouvelle image. Les labels sont des paires clé-valeur qui peuvent être attachées aux images pour ajouter des métadonnées. Nous ajouterons un label indiquant la version de notre image modifiée. Nous utilisons le flag -c suivi de l'instruction de configuration.

docker commit -c 'LABEL version="1.0"' my-ubuntu my-ubuntu-labeled

Vous devriez voir l'ID de la nouvelle image créée en sortie.

Vérifions que la nouvelle image my-ubuntu-labeled a bien été créée et que le label a été appliqué. Nous pouvons utiliser la commande docker inspect pour afficher des informations détaillées sur l'image.

docker inspect my-ubuntu-labeled

La sortie sera un grand objet JSON. Cherchez la section "Labels" dans le bloc "Config". Vous devriez y trouver "version": "1.0".

Alternativement, vous pouvez utiliser docker inspect avec un filtre pour vérifier spécifiquement le label.

docker inspect --format '{{.Config.Labels}}' my-ubuntu-labeled

Cette commande affichera uniquement les labels associés à l'image. Vous devriez voir quelque chose comme map[version:1.0].

Nous pouvons également ajouter d'autres configurations lors du commit, comme définir une variable d'environnement. Validons à nouveau le conteneur my-ubuntu, cette fois en ajoutant une variable d'environnement.

docker commit -c 'ENV MY_VARIABLE="Hello Docker"' my-ubuntu my-ubuntu-env

Vérifiez la nouvelle image et la variable d'environnement avec docker inspect.

docker inspect --format '{{.Config.Env}}' my-ubuntu-env

Vous devriez voir une sortie similaire à [PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin MY_VARIABLE=Hello Docker], confirmant que la variable d'environnement est définie.

Valider les modifications d'un conteneur avec les instructions CMD et EXPOSE

Dans cette dernière étape, nous allons apprendre à valider les modifications d'un conteneur tout en définissant la commande par défaut (CMD) et les ports exposés (EXPOSE) pour la nouvelle image.

L'instruction CMD définit la commande par défaut qui sera exécutée lorsqu'un conteneur est démarré à partir de l'image sans spécifier de commande. L'instruction EXPOSE informe Docker que le conteneur écoute sur les ports réseau spécifiés lors de son exécution.

Nous allons à nouveau valider le conteneur my-ubuntu, cette fois-ci en définissant une commande par défaut pour afficher le contenu de /hello.txt et en exposant le port 80.

Tout d'abord, assurez-vous que le conteneur my-ubuntu est arrêté.

docker stop my-ubuntu

Maintenant, validez le conteneur avec les instructions CMD et EXPOSE. Notez que l'instruction CMD est fournie sous forme de tableau JSON de chaînes de caractères.

docker commit -c 'CMD ["cat", "/hello.txt"]' -c 'EXPOSE 80' my-ubuntu my-ubuntu-final

Vous devriez voir l'ID de la nouvelle image créée en sortie.

Vérifions les configurations CMD et EXPOSE de la nouvelle image my-ubuntu-final en utilisant docker inspect.

docker inspect --format '{{.Config.Cmd}}' my-ubuntu-final

Cela devrait afficher [cat /hello.txt], confirmant que la commande par défaut est bien définie.

Vérifions maintenant les ports exposés.

docker inspect --format '{{.Config.ExposedPorts}}' my-ubuntu-final

Vous devriez voir une sortie similaire à map[80/tcp:{}], indiquant que le port 80 est exposé.

Enfin, lançons un conteneur à partir de cette nouvelle image sans spécifier de commande pour vérifier si le CMD par défaut fonctionne.

docker run --rm my-ubuntu-final

Le flag --rm supprime automatiquement le conteneur lorsqu'il se termine. Comme la commande par défaut est cat /hello.txt, le conteneur devrait s'exécuter, afficher "Hello from inside the container!", puis se terminer.

Vous devriez voir "Hello from inside the container!" s'afficher dans votre terminal.

Cela démontre comment vous pouvez valider les modifications d'un conteneur et définir le comportement par défaut ainsi que la configuration réseau de l'image résultante.

Résumé

Dans ce lab, vous avez appris à démarrer et modifier un conteneur Docker. Vous avez :

  • Téléchargé une image Ubuntu
  • Exécuté un conteneur interactif basé sur cette image
  • Créé un fichier à l'intérieur du conteneur
  • Quitté le shell du conteneur tout en le laissant en cours d'exécution

Ensuite, vous avez appris à valider (commit) les modifications effectuées dans un conteneur en cours d'exécution pour créer une nouvelle image Docker. Ce processus vous permet d'enregistrer l'état actuel d'un conteneur sous forme d'image réutilisable.