Exercice 05 : Inspecter et déboguer les conteneurs
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Afficher les logs d'un conteneur avec
docker logs,--followet--tail - ✅ Inspecter la configuration complète d'un conteneur avec
docker inspect - ✅ Surveiller la consommation CPU/mémoire avec
docker stats --no-stream - ✅ Exécuter une commande dans un conteneur actif avec
docker exec - ✅ Lister les processus d'un conteneur avec
docker top
Durée estimée : 25 minutes
Difficulté : ⭐⭐⭐☆☆ (Débutant+)
Prérequis :
- Exercices 01 à 04 complétés
curldisponible dans le terminal
📖 Contexte
En production, un conteneur qui ne répond plus est le problème le plus courant. Savoir le diagnostiquer rapidement est une compétence clé. Docker fournit plusieurs outils de débogage intégrés : les logs du processus principal, l'inspection de la configuration réseau, la surveillance des ressources en temps réel, et la possibilité d'entrer dans un conteneur pour l'inspecter de l'intérieur.
📋 Énoncé
Déployez un conteneur Nginx, générez du trafic, puis utilisez tous les outils de débogage Docker pour analyser son état, ses logs, et ses ressources.
🧭 Déroulement de l'exercice
Tâche 1 : Lancer un conteneur et générer des logs
Lancez un conteneur Nginx nommé debug-web en mode détaché sur le port 9090. Générez quelques requêtes HTTP avec curl pour alimenter les logs.
Indice : Faites 3 à 5 requêtes avec
curl http://localhost:9090. Chaque requête génère une ligne de log dans le conteneur Nginx.
Vérification : docker logs debug-web doit afficher les lignes de log correspondant à vos requêtes curl.
Tâche 2 : Consulter les logs avec filtres
Consultez les logs du conteneur debug-web avec deux variantes :
- Afficher uniquement les 3 dernières lignes
- Suivre les logs en temps réel pendant 10 secondes (puis arrêter avec
Ctrl+C)
Indice :
--tail Nlimite l'affichage aux N dernières lignes.--follow(ou-f) suit le flux de logs en temps réel, commetail -fsur un fichier.
Vérification : docker logs --tail 3 debug-web retourne exactement 3 lignes (les plus récentes).
Tâche 3 : Inspecter la configuration du conteneur
Inspectez le conteneur debug-web et extrayez les informations suivantes :
- Son adresse IP sur le réseau bridge Docker
- Le chemin du fichier de log (champ
LogPath) - Son statut de santé (champ
State.Status)
Indice :
docker inspect debug-webretourne un JSON complet. Utilisez--format '{{.NetworkSettings.IPAddress}}'pour extraire un champ précis, ougreppour rechercher dans la sortie complète.
Vérification : docker inspect debug-web --format '{{.State.Status}}' doit retourner running.
Tâche 4 : Surveiller les ressources
Affichez un instantané de la consommation CPU et mémoire de tous les conteneurs actifs. Comparez ensuite avec le mode temps réel.
Indice :
docker statsaffiche les métriques en temps réel (rafraîchissement continu).--no-streamaffiche un instantané unique et revient au prompt.--formatpermet de personnaliser les colonnes affichées.
Vérification : docker stats --no-stream doit afficher une ligne pour debug-web avec des valeurs de CPU% et MEM USAGE.
Tâche 5 : Exécuter des commandes dans le conteneur
Depuis l'hôte, exécutez les commandes suivantes à l'intérieur du conteneur debug-web :
- Affichez la version de Nginx installée dans le conteneur
- Listez les fichiers du répertoire
/etc/nginx/conf.d/ - Listez les processus en cours dans le conteneur avec
docker top
Indice :
docker exec <conteneur> <commande>exécute une commande dans un conteneur actif sans ouvrir de shell interactif.docker top <conteneur>liste les processus sans entrer dans le conteneur.
Vérification : docker exec debug-web nginx -v affiche la version de Nginx. docker top debug-web liste au moins un processus nginx.
🗂️ Mini-Projet : Diagnostic complet d'un conteneur
# 1. Lancer le conteneur
docker run -d --name debug-web -p 9090:80 nginx:1.25-alpine
# 2. Générer des logs
curl http://localhost:9090
curl http://localhost:9090/inexistant
# 3. Consulter les logs
docker logs debug-web
docker logs --tail 3 debug-web
docker logs --follow debug-web # Ctrl+C pour quitter
# 4. Inspecter
docker inspect debug-web --format '{{.NetworkSettings.IPAddress}}'
docker inspect debug-web --format '{{.State.Status}}'
docker inspect debug-web --format '{{.LogPath}}'
# 5. Surveiller les ressources
docker stats --no-stream
# 6. Exécuter dans le conteneur
docker exec debug-web nginx -v
docker exec debug-web ls /etc/nginx/conf.d/
docker top debug-webCheckpoints de validation :
docker logs debug-webaffiche les accès HTTP générés parcurldocker logs --tail 3 debug-webretourne exactement 3 lignesdocker inspect debug-web --format '{{.State.Status}}'retournerunningdocker stats --no-streamaffiche les métriques CPU et mémoire dedebug-webdocker exec debug-web nginx -vaffiche la version de Nginxdocker top debug-webliste les processus nginx actifs