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.
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 :
Aindique qu'un fichier ou répertoire a été ajouté.Cindique qu'un fichier ou répertoire a été modifié.Dindique 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 fichierindex.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 fichierindex.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 :
- Créé un nouveau fichier
/tmp/my_new_file.txt - Modifié le fichier
/usr/share/nginx/html/index.htmldans le conteneurmy-nginx-container. Exécutons maintenantdocker container diffsur 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.txtindique qu'un nouveau fichier a été Ajouté (Added) dans/tmpC /usr/share/nginx/html/index.htmlindique 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 à :
- Inspecter les modifications initiales au démarrage
- Voir les changements effectués dans un conteneur en cours d'exécution
Résumé
Dans ce lab, nous avons appris à :
- Exécuter un conteneur Nginx simple avec
docker run - Configurer l'accessibilité via le mappage de ports
- 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 diffpour 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



