DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesCréer ses images Docker : Dockerfile, volumes et réseaux05 - Déboguer avec docker exec et les outils internes

Détails

  • 15 minutes
  • Intermédiaire

Objectifs

  • Accéder à un shell interactif dans un conteneur avec docker exec -it
  • Exécuter des commandes ponctuelles dans un conteneur en cours d'exécution
  • Copier des fichiers entre l'hôte et un conteneur avec docker cp
  • Inspecter les modifications du système de fichiers avec docker diff
  • Créer une image depuis un conteneur modifié avec docker commit
Module Créer ses images Docker : Dockerfile, volumes et réseaux

Exercice 05 : Déboguer avec docker exec et les outils internes

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Ouvrir un shell interactif dans un conteneur avec docker exec -it ... sh
  • ✅ Exécuter une commande unique sans shell interactif avec docker exec
  • ✅ Copier un fichier de l'hôte vers un conteneur et inversement avec docker cp
  • ✅ Lister les fichiers modifiés dans un conteneur avec docker diff
  • ✅ Sauvegarder l'état d'un conteneur modifié avec docker commit

Durée estimée : 15 min | Difficulté : ⭐⭐⭐☆☆


📖 Contexte

Quand un conteneur ne se comporte pas comme prévu, docker exec permet d'y entrer et d'inspecter son état sans le redémarrer. docker cp évite de reconstruire une image pour tester une correction rapide. docker diff et docker commit permettent de capturer un état modifié - utile pour le débogage, déconseillé en production.


📋 Énoncé

Lancez un conteneur Nginx, entrez dedans pour inspecter son contenu, copiez des fichiers, observez les modifications du système de fichiers, puis sauvegardez l'état dans une nouvelle image.


🧭 Déroulement

Tâche 1 : Lancer un conteneur et ouvrir un shell interactif

Lancez un conteneur Nginx en arrière-plan nommé mon-nginx. Entrez ensuite dans ce conteneur avec un shell sh en mode interactif.

Indice : docker exec -it <nom> sh ouvre un shell dans un conteneur en cours d'exécution. -i maintient stdin ouvert, -t alloue un pseudo-terminal.

Vérification : Votre prompt change (ex: #) et pwd retourne /. ls /etc/nginx/ liste les fichiers de configuration Nginx.


Tâche 2 : Exécuter une commande unique

Sans ouvrir de shell interactif, affichez le contenu du fichier /etc/nginx/nginx.conf directement depuis votre terminal hôte.

Indice : docker exec <nom> cat <fichier> exécute une commande unique et retourne son résultat dans votre terminal.

Vérification : Le contenu de nginx.conf s'affiche dans votre terminal sans entrer dans le conteneur.


Tâche 3 : Copier des fichiers avec docker cp

Créez un fichier index.html sur votre hôte avec le contenu <h1>Bienvenue</h1>, puis copiez-le dans le conteneur à l'emplacement /usr/share/nginx/html/index.html.

Indice : docker cp <source> <conteneur>:<destination> copie de l'hôte vers le conteneur. La syntaxe inverse copie du conteneur vers l'hôte.

Vérification : curl http://localhost:80 (ou le port mappé) retourne <h1>Bienvenue</h1> - si le port est mappé. Sinon : docker exec mon-nginx cat /usr/share/nginx/html/index.html.


Tâche 4 : Observer les modifications avec docker diff

Affichez la liste des fichiers modifiés, ajoutés, ou supprimés dans mon-nginx depuis sa création.

Indice : docker diff <conteneur> liste les changements du système de fichiers. A = ajouté, C = modifié, D = supprimé.

Vérification : Le fichier index.html apparait avec la lettre C (modifié) ou A (ajouté) dans la liste.


Tâche 5 : Sauvegarder l'état avec docker commit

Créez une nouvelle image nommée nginx-custom:1.0 à partir de l'état actuel du conteneur mon-nginx.

Indice : docker commit <conteneur> <image:tag> capture l'état du système de fichiers du conteneur dans une nouvelle image. C'est utile pour le débogage mais les Dockerfiles restent la méthode recommandée en production.

Vérification : docker images nginx-custom liste l'image. Lancez un nouveau conteneur depuis cette image et vérifiez que index.html personnalisé est présent.


🗂️ Mini-Projet

Parcourez le cycle complet de débogage et validez chaque checkpoint :

bash
docker run -d -p 8080:80 --name mon-nginx nginx

docker exec -it mon-nginx sh
# Dans le conteneur :
ls /etc/nginx/
exit

docker exec mon-nginx cat /etc/nginx/nginx.conf

echo '<h1>Bienvenue</h1>' > index.html
docker cp index.html mon-nginx:/usr/share/nginx/html/index.html
docker exec mon-nginx cat /usr/share/nginx/html/index.html

docker diff mon-nginx

docker commit mon-nginx nginx-custom:1.0
docker images nginx-custom
docker run --rm -p 8081:80 nginx-custom:1.0 &
sleep 1 && curl http://localhost:8081

# Nettoyage
docker stop mon-nginx && docker rm mon-nginx
docker rmi nginx-custom:1.0

Checkpoints de validation :

  • docker exec -it mon-nginx sh ouvre un shell dans le conteneur
  • docker exec mon-nginx cat /etc/nginx/nginx.conf affiche la config sans entrer dans le conteneur
  • docker cp copie index.html vers le bon emplacement
  • docker diff liste index.html comme modifié (C) ou ajouté (A)
  • docker commit crée nginx-custom:1.0 dans docker images
  • Un conteneur lancé depuis nginx-custom:1.0 sert la page personnalisée

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement
  • Tâche 1 : Lancer un conteneur et ouvrir un shell interactif
  • Tâche 2 : Exécuter une commande unique
  • Tâche 3 : Copier des fichiers avec docker cp
  • Tâche 4 : Observer les modifications avec docker diff
  • Tâche 5 : Sauvegarder l'état avec docker commit
  • 🗂️ Mini-Projet