Libérer l'espace
Docker

Aide-mémoire des commandes de nettoyage
Du diagnostic au nettoyage radical

Trois niveaux de nettoyage

On va du plus doux au plus radical. Toujours commencer par regarder ce qui occupe l'espace avant d'agir.

1
Ciblé
prune par catégorie - conteneurs, images, volumes, réseaux
2
Global
docker system prune - une commande pour tout
3
Radical
tout arrêter, tout supprimer - à utiliser avec précaution

Diagnostic - voir l'espace utilisé

Toujours faire un diagnostic avant d'agir. Permet de cibler les gros consommateurs et d'éviter les surprises.

Commande Effet
docker system df Résumé global par catégorie - images, conteneurs, volumes, build cache
docker system df -v Détail ligne par ligne avec taille de chaque image, conteneur et volume
docker images Liste toutes les images avec leur taille
docker ps -a Liste tous les conteneurs, même ceux arrêtés
docker volume ls Liste tous les volumes (nommés et anonymes)

Niveau 1 - Conteneurs arrêtés

Supprimer les conteneurs arrêtés
docker container prune
Supprime tous les conteneurs avec le statut Exited. Les conteneurs en marche (Up) ne sont pas touchés.
Sans risque - aucune donnée n'est perdue tant que les volumes restent en place. Les volumes anonymes attachés au conteneur, par contre, restent orphelins.

Niveau 1 - Images inutiles

Supprimer les images dangling (intermédiaires de builds)
docker image prune
Supprime les images marquées <none>. Souvent le plus gros gain après plusieurs builds.
Supprimer aussi les images non utilisées par un conteneur
docker image prune -a
Plus agressif - supprime toute image qui n'est référencée par aucun conteneur, même celles qui ont un tag. À ne lancer que si on accepte de retélécharger.

Niveau 1 - Volumes orphelins

Supprimer les volumes non utilisés
docker volume prune
Supprime les volumes qui ne sont attachés à aucun conteneur. Inclut les volumes anonymes laissés derrière par d'anciens conteneurs.
ATTENTION Les volumes contiennent les données persistantes - bases de données, configurations, fichiers utilisateurs. Toujours faire docker volume ls avant pour confirmer qu'aucun volume nommé important n'est listé comme orphelin.

Niveau 1 - Réseaux inutilisés

Supprimer les réseaux orphelins
docker network prune
Supprime les réseaux qui ne sont reliés à aucun conteneur. Les réseaux par défaut (bridge, host, none) sont protégés.
Gain en espace minime, mais utile pour garder une liste propre quand on jongle avec plusieurs piles docker compose.

Niveau 2 - Nettoyage global

Une commande pour tout (sauf volumes)
docker system prune
Combine conteneurs arrêtés, images dangling, réseaux et build cache. Les volumes sont préservés.
Avec les images non taggées en plus
docker system prune -a
Ajoute toutes les images non utilisées par un conteneur en marche. Demande à retélécharger ce dont on a besoin la prochaine fois.
Tout - volumes inclus
docker system prune -a --volumes
Le grand nettoyage. Inclut tous les volumes orphelins. Données persistantes potentiellement perdues - voir avertissement.

Niveau 3 - Cas extrêmes

Quand on veut repartir à zéro complètement, par exemple après un cours, avant une démo ou pour résoudre un état corrompu.

Arrêter et supprimer tous les conteneurs
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
Aucun conteneur ne survit, qu'il soit en marche ou arrêté.
Supprimer toutes les images
docker rmi $(docker images -q)
Toutes les images locales disparaissent. Tout sera retéléchargé au prochain build ou pull.
RAPPEL Ces commandes ne demandent pas de confirmation. Vérifier deux fois avant d'appuyer sur Entrée, surtout sur un poste de travail partagé ou un serveur de production.

Bonnes pratiques

1
Diagnostic d'abord Toujours docker system df -v avant un prune pour voir où va l'espace.
2
Ciblé avant global Préférer un prune par catégorie - on garde le contrôle sur ce qui est supprimé.
3
Volumes nommés protégés Sans --volumes, les volumes nommés (postgres, mariadb, configs) restent intacts.
4
Sauvegarde avant le grand ménage Avant --volumes, exporter les bases de données importantes.
5
Routine régulière Un docker image prune hebdomadaire suffit souvent à éviter le débordement.
6
Script réutilisable Sauvegarder un script nettoyer-docker.sh avec diagnostic puis prune ciblé.