Comment utiliser la commande docker container diff pour inspecter les modifications du système de fichiers d'un conteneur

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 labo (LabEx), vous apprendrez à utiliser la commande docker container diff pour inspecter les modifications du système de fichiers dans un conteneur Docker. Nous commencerons par exécuter un simple conteneur Nginx, puis nous utiliserons docker container diff pour examiner les modifications initiales du système de fichiers effectuées lors de la création du conteneur.

Après cette inspection initiale, vous effectuerez des modifications à l'intérieur du conteneur en cours d'exécution. Enfin, vous utiliserez à nouveau docker container diff pour observer et comprendre les différences de système de fichiers résultant de ces modifications. Cet exercice pratique vous fournira une expérience concrète dans l'utilisation de cette commande Docker utile pour le débogage et la compréhension du comportement des conteneurs.


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/exec("Execute Command in 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-555107{{"Comment utiliser la commande docker container diff pour inspecter les modifications du système de fichiers d'un conteneur"}} docker/ps -.-> lab-555107{{"Comment utiliser la commande docker container diff pour inspecter les modifications du système de fichiers d'un conteneur"}} docker/rm -.-> lab-555107{{"Comment utiliser la commande docker container diff pour inspecter les modifications du système de fichiers d'un conteneur"}} docker/exec -.-> lab-555107{{"Comment utiliser la commande docker container diff pour inspecter les modifications du système de fichiers d'un conteneur"}} docker/inspect -.-> lab-555107{{"Comment utiliser la commande docker container diff pour inspecter les modifications du système de fichiers d'un conteneur"}} docker/pull -.-> lab-555107{{"Comment utiliser la commande docker container diff pour inspecter les modifications du système de fichiers d'un conteneur"}} docker/images -.-> lab-555107{{"Comment utiliser la commande docker container diff pour inspecter les modifications du système de fichiers d'un conteneur"}} end

Exécuter un conteneur Nginx

Dans cette étape, nous allons apprendre à exécuter un serveur web Nginx simple dans un conteneur Docker. Docker nous permet d'empaqueter des applications et leurs dépendances dans des conteneurs, garantissant ainsi leur exécution cohérente dans différents environnements.

Tout d'abord, nous devons nous assurer que l'image Nginx est disponible sur notre système. Nous pouvons récupérer l'image officielle Nginx depuis Docker Hub en utilisant la commande docker pull. Cette commande télécharge l'image sur votre machine locale.

docker pull nginx: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 vérifier que l'image est disponible en listant les images sur votre système :

docker images

Vous devriez voir nginx dans la liste.

Maintenant, lançons le conteneur Nginx. Nous utiliserons la commande docker run. Le drapeau -d exécute le conteneur en mode détaché (en arrière-plan), et le drapeau -p 80:80 mappe le port 80 de notre machine hôte vers le port 80 à l'intérieur du conteneur. Cela nous permet d'accéder au serveur web Nginx depuis notre navigateur hôte. Nous donnons également un nom au conteneur avec --name my-nginx-container pour une identification plus facile.

docker run -d -p 80:80 --name my-nginx-container nginx

Après l'exécution de la commande, Docker affichera une longue chaîne de caractères, qui est l'ID du conteneur. Cela indique que le conteneur a démarré avec succès en arrière-plan.

Pour vérifier que le conteneur est en cours d'exécution, vous pouvez utiliser la commande docker ps, qui liste tous les conteneurs en cours d'exécution :

docker ps

Vous devriez voir my-nginx-container listé avec un statut Up.

Enfin, accédons au serveur web Nginx depuis notre machine hôte. Comme nous avons mappé le port 80, nous pouvons utiliser curl pour effectuer une requête HTTP vers localhost sur le port 80.

curl localhost

Vous devriez voir le HTML de la page d'accueil par défaut de Nginx dans la sortie. Cela confirme que le conteneur Nginx est en cours d'exécution et accessible.

Inspecter les modifications initiales du système de fichiers avec docker container diff

Dans cette étape, nous allons explorer comment inspecter les modifications du système de fichiers qui se produisent lorsqu'un conteneur Docker est démarré. Docker utilise un système de fichiers en couches, et lorsqu'un conteneur est exécuté, une nouvelle couche accessible en écriture est ajoutée au-dessus des couches de l'image. La commande docker container diff nous permet de voir les différences introduites dans cette couche accessible en écriture depuis la création du conteneur.

La commande docker container diff prend comme argument le nom ou l'ID du conteneur. Nous utiliserons le nom du conteneur Nginx que nous avons démarré à l'étape précédente, à savoir my-nginx-container.

docker container diff my-nginx-container

Lorsque vous exécutez cette commande immédiatement après le démarrage du conteneur, vous verrez probablement une liste de fichiers et de répertoires. Le résultat montre les modifications dans le système de fichiers du conteneur par rapport à l'image de base. Le format de sortie est généralement :

  • A indique qu'un fichier ou répertoire a été ajouté.
  • C indique qu'un fichier ou répertoire a été modifié.
  • D indique qu'un fichier ou répertoire a été supprimé.

Les modifications initiales que vous observez sont souvent liées au processus de démarrage du conteneur, comme la création de fichiers temporaires, de fichiers journaux ou des modifications dans les répertoires système. Ce sont les fichiers et répertoires qui sont créés ou modifiés dans la couche accessible en écriture du conteneur lors de son démarrage.

Comprendre ces modifications initiales nous aide à voir ce qui se passe en coulisses lorsqu'un conteneur est lancé et comment la couche accessible en écriture est peuplée.

Effectuer des modifications dans le conteneur

Dans cette étape, nous allons apporter quelques modifications au système de fichiers à l'intérieur du conteneur Nginx en cours d'exécution. Cela démontrera comment les modifications dans un conteneur sont enregistrées dans sa couche accessible en écriture.

Nous utiliserons la commande docker exec pour exécuter des commandes à l'intérieur du conteneur. La commande docker exec nous permet d'exécuter une commande dans un conteneur en cours d'exécution. Nous devons spécifier le nom du conteneur (my-nginx-container) et la commande que nous souhaitons exécuter.

Commençons par créer un nouveau fichier dans le répertoire /tmp du conteneur. Nous utiliserons la commande touch.

docker exec my-nginx-container touch /tmp/my_new_file.txt

Cette commande exécute touch /tmp/my_new_file.txt à l'intérieur de my-nginx-container. Vous ne verrez aucune sortie si la commande réussit.

Ensuite, modifions le fichier index par défaut de Nginx. La page d'accueil par défaut de Nginx se trouve généralement dans /usr/share/nginx/html/index.html à l'intérieur du conteneur. Nous utiliserons la commande echo pour ajouter du texte à ce fichier.

docker exec my-nginx-container echo "<h1>Hello from LabEx!</h1>" >> /usr/share/nginx/html/index.html

Cette commande ajoute la chaîne HTML "

Hello from LabEx!

" au fichier index.html dans le conteneur.

Pour vérifier que les modifications ont été effectuées, vous pouvez à nouveau utiliser curl depuis votre machine hôte pour accéder au serveur Nginx.

curl localhost

Vous devriez maintenant voir le contenu original de la page d'accueil de Nginx suivi de "

Hello from LabEx!

". Cela confirme que le fichier index.html dans le conteneur a été modifié.

Ces modifications que nous avons apportées (création d'un nouveau fichier et modification d'un fichier existant) sont enregistrées dans la couche accessible en écriture de my-nginx-container. Dans l'étape suivante, nous utiliserons à nouveau docker container diff pour voir ces modifications spécifiques.

Inspecter les modifications du système de fichiers avec docker container diff

Dans cette dernière étape, nous allons à nouveau utiliser la commande docker container diff pour observer les modifications du système de fichiers effectuées précédemment. Cela montrera clairement comment nos actions dans le conteneur se reflètent dans sa couche accessible en écriture.

Rappelons que lors de l'étape précédente, nous avons :

  1. Créé un nouveau fichier /tmp/my_new_file.txt
  2. Modifié le fichier /usr/share/nginx/html/index.html
    dans le conteneur my-nginx-container. Exécutons maintenant docker container diff sur ce conteneur.
docker container diff my-nginx-container

Cette fois, le résultat devrait inclure nos modifications. Vous devriez voir des lignes similaires à :

A /tmp/my_new_file.txt
C /usr/share/nginx/html/index.html

Explications :

  • A /tmp/my_new_file.txt indique qu'un nouveau fichier a été Ajouté (Added) dans /tmp
  • C /usr/share/nginx/html/index.html indique que le fichier a été Changé (Changed)

Cette sortie confirme que docker container diff montre efficacement :

  • Les modifications du système de fichiers
  • Depuis le démarrage du conteneur
  • Stockées dans la couche accessible en écriture du conteneur
  • Séparée des couches de l'image de base

Ceci illustre un concept fondamental de Docker :

  • Le système de fichiers en couches
  • Comment les conteneurs maintiennent leur état

Remarque importante :
Si le conteneur est supprimé, cette couche accessible en écriture disparaît, et toutes les modifications sont perdues, sauf si elles sont persistées via :

  • Volumes
  • Bind mounts
    (Thèmes pour un autre lab)

Pour nettoyer, vous pouvez arrêter et supprimer le conteneur :

docker stop my-nginx-container
docker rm my-nginx-container

Ceci conclut notre exploration de docker container diff. Vous avez appris à :

  1. Inspecter les modifications initiales au démarrage
  2. Voir les changements effectués dans un conteneur en cours d'exécution

Résumé

Dans ce lab, nous avons appris à :

  1. Exécuter un conteneur Nginx simple avec docker run
  2. Configurer l'accessibilité via le mappage de ports
  3. Vérifier son statut avec docker ps

Nous avons ensuite exploré la commande docker container diff pour :

  • Inspecter les modifications initiales du système de fichiers
  • Introduites par les couches de l'image au démarrage du conteneur

Puis nous avons pratiqué :

  • La modification du système de fichiers d'un conteneur en cours d'exécution
  • L'utilisation de docker container diff pour observer ces changements

Cela nous a permis de comprendre :

  • Comment Docker suit les modifications
  • L'utilité de cette commande pour identifier les différences entre :
    • L'état actuel du conteneur
    • Son image de base