Supprimer des images Docker : méthode simple pour libérer de l’espace disque

Supprimer des images Docker : méthode simple pour libérer de l’espace disque

Le disque de votre machine fond à vue d’œil, Docker occupe plusieurs gigaoctets et vous ne savez plus très bien ce qui traîne dans ses tiroirs ? Rassurez-vous : vos images ne sont pas forcément perdues dans une dimension parallèle. Elles s’accumulent simplement au fil des essais, des mises à jour et des projets abandonnés. Voici comment faire le ménage sans supprimer par mégarde ce qui fait tourner vos applications.

Images Docker : de quoi parle-t-on exactement ?

Une image Docker est un modèle utilisé pour créer un conteneur. Elle contient les éléments nécessaires à l’exécution d’un logiciel : système de base, dépendances, fichiers et configuration. Un conteneur, lui, est une instance lancée à partir de cette image.

La différence est importante. Supprimer une image n’est pas la même chose que supprimer un conteneur, et l’un ne règle pas toujours le problème de l’autre. Docker peut conserver des images après l’arrêt ou la suppression de conteneurs, notamment pour accélérer les prochains lancements. C’est pratique… jusqu’au jour où votre disque vous rappelle qu’il n’est pas extensible à l’infini.

Avant de nettoyer, gardez aussi en tête qu’une image peut être partagée par plusieurs conteneurs. Docker évite normalement de supprimer une image encore utilisée, mais mieux vaut comprendre ce que vous effacez plutôt que de lancer une commande au hasard, avec l’optimisme d’un clic sur « Tout sélectionner ».

Faire l’état des lieux avant de supprimer

Commencez par demander à Docker ce qui occupe de l’espace :

docker system df

Cette commande affiche l’espace utilisé par les images, les conteneurs, les volumes et le cache de construction. Elle indique également quelle part de ces éléments est récupérable. C’est le meilleur point de départ pour savoir si vos images sont réellement responsables du manque de place.

Pour obtenir davantage de détails, notamment sur les éléments qui peuvent être nettoyés, utilisez :

docker system df -v

Vous pouvez ensuite lister les images présentes sur votre machine :

docker image ls

La liste affiche leur nom, leur étiquette, leur identifiant, leur date de création et leur taille. Une image peut apparaître sous plusieurs étiquettes : cela ne signifie pas nécessairement que ses données sont stockées plusieurs fois. Les couches communes sont partagées lorsqu’elles sont identiques.

Pour voir les conteneurs, y compris ceux qui sont arrêtés, la commande utile est :

docker ps -a

Un vieux conteneur arrêté n’est pas une image inutilisée, mais il peut empêcher la suppression de l’image à laquelle il est associé. Gardez donc ce détail à l’esprit si Docker refuse de faire le ménage.

Supprimer une image précise

Si vous savez exactement quelle image vous n’utilisez plus, supprimez-la par son nom et son étiquette :

docker image rm nom-image:etiquette

Par exemple, pour retirer une ancienne version de votre application :

docker image rm boutique-web:ancienne-version

Vous pouvez également utiliser l’identifiant affiché par docker image ls :

docker image rm a1b2c3d4e5f6

Docker peut refuser la suppression si un conteneur, même arrêté, dépend encore de cette image. Dans ce cas, vérifiez les conteneurs concernés avec docker ps -a. Si vous avez confirmé que l’un d’eux ne sert plus, supprimez-le d’abord :

docker container rm nom-ou-identifiant

Attention : cette commande supprime le conteneur et les données qui n’ont pas été conservées ailleurs, par exemple dans un volume ou un montage de fichiers. Ne retirez pas un conteneur simplement parce que son nom vous semble ancien. Certains projets ont une relation étonnamment durable avec leurs conteneurs.

Supprimer les images inutilisées en une commande

Vous souhaitez récupérer les images qui ne sont associées à aucun conteneur ? Docker propose une commande dédiée :

docker image prune

Par défaut, elle cible surtout les images intermédiaires sans étiquette, souvent appelées « images pendantes ». Docker vous demande confirmation avant de les supprimer. Ces images peuvent notamment résulter de constructions successives ou de changements dans votre processus de développement.

Pour inclure toutes les images qui ne sont utilisées par aucun conteneur, ajoutez l’option -a :

docker image prune -a

Cette opération est plus large. Elle peut supprimer des images que vous aviez téléchargées à l’avance et que vous comptiez réutiliser plus tard. Elles pourront généralement être téléchargées ou construites de nouveau, mais cela prendra du temps et nécessitera une connexion réseau si elles proviennent d’un registre distant.

En pratique, utilisez docker image prune pour un nettoyage prudent. Réservez docker image prune -a aux situations où vous avez vérifié qu’aucune image locale n’est nécessaire aux prochaines tâches.

Le grand nettoyage : ce que fait docker system prune

Quand plusieurs types de ressources s’accumulent, vous pouvez demander un nettoyage général :

docker system prune

Cette commande supprime les conteneurs arrêtés, les réseaux inutilisés, les images pendantes et certaines données de cache. Elle présente un résumé des éléments concernés et demande normalement une confirmation. C’est un bon outil d’entretien, mais ce n’est pas une baguette magique : lisez le message affiché avant de valider.

Pour inclure toutes les images non utilisées par un conteneur, utilisez :

docker system prune -a

Et pour inclure également les volumes inutilisés, l’option --volumes peut être ajoutée :

docker system prune -a --volumes

Cette dernière commande mérite une attention particulière. Un volume peut contenir une base de données, des fichiers téléversés ou d’autres données persistantes. « Inutilisé » signifie ici qu’aucun conteneur ne l’utilise au moment du nettoyage ; cela ne signifie pas forcément que son contenu est sans valeur. Avant d’effacer des volumes, vérifiez leur contenu et assurez-vous d’avoir une sauvegarde si les données comptent.

Pour automatiser la suppression des ressources inutilisées depuis plus de vingt-quatre heures, vous pouvez employer le filtre temporel :

docker image prune -a --filter "until=24h"

Les filtres permettent d’affiner le nettoyage, mais prenez le temps de lire la commande avant de la lancer, surtout si vous la placez dans un script. Une automatisation efficace est merveilleuse jusqu’au moment où elle supprime avec une efficacité… remarquable.

Ne pas confondre images et cache de construction

Vous avez supprimé plusieurs images, mais Docker occupe toujours beaucoup d’espace ? Le cache de construction peut être en cause. Docker le conserve pour accélérer les constructions suivantes : une étape déjà réalisée n’a pas toujours besoin d’être exécutée à nouveau.

Pour vérifier l’espace utilisé par ce cache, consultez docker system df. Pour retirer les éléments de cache inutilisés, vous pouvez lancer :

docker builder prune

Une suppression plus large est possible avec :

docker builder prune -a

Le cache sera recréé au fil des prochaines constructions. En revanche, celles-ci pourront être plus lentes, car Docker devra refaire certaines étapes. Sur un ordinateur de développement, c’est souvent un compromis acceptable. Sur une machine de production ou une chaîne d’intégration, évaluez d’abord l’effet sur vos déploiements.

Retirer une image dans un projet Compose

Si vous utilisez Docker Compose, vous pouvez également supprimer les images associées à un projet avec :

docker compose down --rmi local

Cette commande arrête et retire les conteneurs du projet, puis supprime les images construites localement par Compose. L’option --rmi all peut aussi retirer les images utilisées par les services, y compris celles qui proviennent d’un registre. Vérifiez le résultat souhaité avant de choisir cette option.

Par défaut, docker compose down ne supprime pas les volumes nommés. C’est généralement préférable, car ils peuvent contenir des données persistantes. L’ajout de --volumes les supprime également : faites-le seulement si vous voulez vraiment effacer ces données.

Les bons réflexes pour éviter le retour du désordre

Supprimer des images règle le problème immédiat. Quelques habitudes simples évitent cependant de refaire le grand ménage tous les quinze jours :

  • Lancez docker system df de temps à autre pour surveiller l’évolution de l’espace occupé.

  • Supprimez les conteneurs temporaires et les images de test lorsque le projet est terminé.

  • Évitez les étiquettes vagues comme latest dans vos processus de déploiement : des versions clairement identifiées sont plus faciles à repérer et à gérer.

  • Conservez une copie des données importantes avant tout nettoyage qui touche aux volumes.

  • Évitez d’automatiser une suppression générale sans filtre ni vérification, surtout sur une machine partagée.

Une petite routine mensuelle suffit souvent : examiner l’usage avec docker system df, retirer les images inutilisées, puis vérifier de nouveau l’espace récupéré. Vous gardez ainsi la maîtrise du ménage au lieu de laisser Docker accumuler les souvenirs de chaque essai.

En pratique : quelle commande choisir ?

Pour une image connue et précise, choisissez docker image rm. Pour éliminer les images pendantes, utilisez docker image prune. Pour supprimer toutes les images non utilisées par un conteneur, ajoutez -a. Et si vous souhaitez nettoyer plusieurs ressources, docker system prune peut faire le travail, à condition de vérifier soigneusement ce qui sera supprimé.

La règle la plus simple reste aussi la plus utile : inspectez d’abord, supprimez ensuite. Docker est tout à fait capable de récupérer de l’espace disque, mais il ne devine pas quelles données vous regretterez demain.