Docker au quotidien : inspection et nettoyage
Inspect, stats, limites, SIGTERM et nettoyage.
Objectifs
À la fin de cette leçon, vous saurez :
- inspecter un conteneur en profondeur ;
- surveiller ressources et santé ;
- nettoyer sans rien casser.
Inspecter : la fiche complète
docker inspect web
Sortie JSON exhaustive. Les champs qui comptent :
.State.Status running / exited / restarting
.State.Health healthy / unhealthy (si healthcheck défini)
.NetworkSettings.IPAddress l'IP interne du conteneur
.Mounts volumes et bind mounts attachés
.Config.Env variables d'environnement ⚠️ (secrets visibles !)
Version ciblée avec --format :
docker inspect -f '{{.State.Health.Status}}' web
docker inspect -f '{{range .Mounts}}{{.Source}} → {{.Destination}}{{"\n"}}{{end}}' web
Le format Go template paraît aride mais rend ces commandes scriptables — exactement ce qu'utiliseront vos healthchecks de déploiement.
Ressources et stats
docker stats # tous, rafraîchi
docker stats --no-stream web # instantané unique
Colonnes CPU % / MEM USAGE : c'est l'outil de diagnostic n°1 quand « le serveur est lent ». Un conteneur à 100 % CPU permanent ou qui gonfle en mémoire indique le coupable immédiatement.
Rappel cgroups : sans limite définie, un conteneur peut consommer TOUTE la machine. On borne :
docker run -d --memory=512m --cpus=1.5 mon-api
Le cycle de vie complet
docker create --name essai nginx # créé mais PAS démarré
docker start essai # démarre
docker pause / unpause essai # fige le processus (SIGSTOP)
docker restart essai # stop + start
docker stop -t 30 essai # laisse 30 s avant SIGKILL
Détail important du stop : Docker envoie d'abord SIGTERM (arrêt gracieux — votre application doit fermer ses connexions proprement), puis SIGKILL après le délai. Une application qui ignore SIGTERM perd des requêtes en cours à chaque redéploiement.
Nettoyer : les trois niveaux
docker system df # combien d'espace consomme quoi
docker container prune # conteneurs arrêtés
docker image prune # images sans conteneur (dangling)
docker system prune # tout le jetable
docker system prune -a # + toutes les images non utilisées ⚠️
Après des semaines de builds, les images orphelines occupent des gigaoctets. prune simple est sans risque ; -a supprime aussi vos images nommées non actives — vérifiez docker ps avant.
Exercice
- Lancez nginx avec une limite mémoire 128m et un healthcheck curl ; observez Health dans inspect.
- Testez docker stats pendant que le conteneur sert du trafic (boucle curl).
- Faites le ménage : comparez
system dfavant/après. - Que fait votre API Node quand elle reçoit SIGTERM ? Comment le tester ?
Résumé
- inspect --format = interrogation scriptable ; stats = diagnostic ressources.
- Bornes memory/cpus par défaut recommandées.
- stop = SIGTERM puis SIGKILL ; prévoir l'arrêt gracieux.
- prune régulier = machine saine.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Question 4. Node reçoit SIGTERM mais ne s'arrête pas tant que des requêtes tournent — sauf si vous écoutez le signal :
process.on("SIGTERM", () => {
serveur.close(() => process.exit(0)); // termine les requêtes en cours puis sort
});
Testez : lancez une requête longue, faites docker stop, observez. Sans handler, arrêt brutal ; avec, arrêt propre après complétion. C'est ce qui rend les redéploiements invisibles pour les utilisateurs.