Cursus
Vous utilisez Docker et vous vous retrouvez souvent à court d'espace disque ? Vous n'êtes pas seul.
Les images Docker sont les éléments constitutifs des conteneurs Docker, mais elles peuvent rapidement s'accumuler et consommer de l'espace disque. La taille de ces images varie de quelques mégaoctets à plusieurs gigaoctets, de sorte qu'une procédure de nettoyage régulière est essentielle pour assurer des performances optimales du système.
Docker propose quelques commandes pour vous aider à supprimer les images inutiles et à récupérer de l'espace disque. En comprenant ces commandes et en sachant quand les utiliser, vous devriez pouvoir éliminer tous les avertissements relatifs à l'absence de stockage.
Dans ce tutoriel, je vous présenterai différentes méthodes pour supprimer les images Docker, je vous montrerai comment gérer les erreurs courantes au cours du processus de suppression et je partagerai les meilleures pratiques pour maintenir un environnement Docker propre.
>Complètement novice en matière de Docker ? Ce guide pratique des conteneurs vous permettra d'être opérationnel en un rien de temps.
Qu'est-ce qu'une image Docker ?
Une image Docker est un logiciel léger, autonome et exécutable qui contient tout ce qui est nécessaire à l'exécution d'une application : code, moteur d'exécution, bibliothèques, variables d'environnement et fichiers de configuration.
Considérez-le comme un instantané ou un modèle utilisé pour créer des conteneurs.
>Docker n'est pas seulement utilisé par les ingénieurs en logiciel - Il est également apprécié par les Data Scientists!
Les images Docker sont construites en couches, chaque couche représentant un ensemble de modifications apportées au système de fichiers. Lorsque vous tirez une image de Docker Hub ou que vous en construisez une à l'aide d'un Dockerfile
, vous téléchargez ou créez en fait une pile de ces couches qui fonctionnent ensemble. Ces couches sont mises en cache, ce qui rend la création et le partage d'images plus efficaces, mais signifie également qu'elles consomment de l'espace de stockage sur votre machine.
Les images deviennent particulièrement problématiques lorsque vous développez activement des applications. Vous serez souvent amené à reconstruire des images à plusieurs reprises avec des modifications mineures, à créer différentes versions pour les tests et à tirer des dépendances qui pourraient ne jamais être nettoyées automatiquement.
En un rien de temps, vous vous retrouvez avec des dizaines, voire des centaines d'images qui consomment des gigaoctets de l'espace précieux - et limité - du disque SSD.
>Si vous vous intéressez à la science des données et à l'apprentissage automatique, vous devez connaître ces 12 images Docker.vous devez connaître ces 12 images Docker.
Pourquoi supprimer les images Docker ?
En termes simples, Les images Docker peuvent être des consommateurs d'espace notoires, et l'espace disque dont vous disposez est limité....
La suppression des images Docker inutiles a plusieurs objectifs importants :
- Tout d'abord, il récupère de l'espace de stockage,, ce qui est particulièrement important si vous travaillez sur un ordinateur portable dont la capacité est limitée ou dans un environnement CI/CD avec des contraintes de stockage. D'une manière ou d'une autre, ces erreurs "Il n'y a plus d'espace sur l'appareil" semblent toujours surgir au pire moment.
- Le nettoyage des images permet également de supprimer les versions obsolètes qui pourraient perturber les développeurs ou les processus de déploiement. Il n'y a rien de pire que d'utiliser accidentellement une vieille image parce que votre balise
latest
pointe vers quelque chose d'inattendu. - En outre, une liste d'images encombrée rend plus difficile l'identification de ce dont vous avez réellement besoin. Lorsque vous lancez
docker images
et que vous voyez un écran rempli de dépôts, d'étiquettes et d'identifiants, trouver l'image spécifique que vous recherchez devient un processus fastidieux. Un nettoyage régulier permet à votre environnement de travail de rester gérable et à vos commandes d'être lisibles. Il s'agit d'une petite amélioration de la qualité de vie qui s'accumule au fil du temps.
Ensuite, je vous montrerai deux façons d'aborder la suppression des images Docker.
Maîtriser Docker et Kubernetes
Suppression des images Docker
Maintenant que vous savez ce que sont les images Docker et pourquoi il est important de les contrôler, nous allons nous plonger dans le processus de suppression proprement dit.
Docker fournit quelques commandes pour vous aider à gérer vos images, de la liste de ce que vous avez à la suppression de ce dont vous n'avez pas besoin.
Vérification des images Docker existantes
Avant de commencer à supprimer des images, vous devez savoir ce qui occupe réellement de l'espace sur votre système. La commande docker images
est la première étape de ce processus de nettoyage.
docker images
Cette commande répertorie toutes vos images Docker ainsi que des informations précieuses telles que :
- Nom du référentiel
- Étiquette
- Image ID
- Date de création
- Taille
Image 1 - Images Docker disponibles
L'examen de la colonne des tailles peut vous ouvrir les yeux. Comme vous pouvez le voir sur Image 1, l'image de la base de données Oracle occupe plus de 15 Go!
Si vous souhaitez trier vos images par taille afin d'identifier celles qui occupent le plus d'espace :
docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | sort -h
Image 2 - Images Docker disponibles classées par taille
Il s'agit d'un aperçu plus compact, car il n'inclut pas toutes les propriétés de l'image.
Suppression d'une image Docker spécifique
Une fois que vous avez identifié les images dont vous n'avez pas besoin, vous pouvez les supprimer une à une à l'aide de la commande docker rmi
(où rmi
signifie "supprimer l'image").
Vous pouvez supprimer une image soit par son identifiant, soit par sa combinaison repository:tag :
# Remove by image ID
docker rmi 4e7024df2f20
# Remove by repository:tag
docker rmi nginx:latest
Image 3 - Deux façons de supprimer des images Docker individuelles
Il convient également de mentionner que Docker ne vous permet pas de supprimer les images qui sont actuellement utilisées par des conteneurs. Vous obtiendrez un message d'erreur du type :
Image 4 - Tentative de suppression des images Docker en cours d'utilisation
Si vous voyez cela, vous devez arrêter et supprimer tous les conteneurs dépendants avant de supprimer l'image, ou utiliser la commande force (dont je parlerai plus tard).
Suppression de plusieurs images Docker
Il peut être fastidieux de supprimer les images une à une, surtout lors d'un grand nettoyage. Heureusement, Docker vous permet de supprimer plusieurs images à l'aide d'une seule commande.
Vous pouvez fournir une liste d'identifiants d'images séparés par des espaces :
docker rmi postgres:latest mariadb:latest
Image 5 - Suppression de plusieurs images Docker
Ou, pour des scénarios plus avancés, vous pouvez combiner docker images
avec le filtrage et la tuyauterie. Par exemple, celle-ci supprimera toutes les images comportant la balise latest
:
docker rmi $(docker images --filter=reference="*:latest" -q)
Image 6 - Suppression de toutes les images Docker avec un tag spécifique
Enfin, toutes, sauf les images actuellement utilisées par les conteneurs en cours d'exécution.
Soyez prudent avec ces commandes de suppression en bloc,, car elles ne demandent pas de confirmation. Vous devez toujours revérifier vos critères de filtrage avant d'appuyer sur la touche Entrée.
Suppression des images pendantes et inutilisées
Lorsque vous reconstruisez une image, Docker crée de nouvelles couches pour tout ce qui a changé et réutilise les couches mises en cache pour les parties inchangées. Les couches uniques de la version précédente deviennent "pendantes" - elles existent sur le disque mais ne font partie d'aucune image nommée.
Vous pouvez identifier les images pendantes avec :
docker images -f "dangling=true"
Image 7 - Liste des images Docker en suspens
Exécutez maintenant la commande prune
pour les supprimer tous en même temps :
docker image prune
Image 8 - Élagage d'une image Docker
Cette commande vous demandera de confirmer votre choix avant de poursuivre. Si vous êtes sûr de vouloir les supprimer tous :
docker image prune -f
Pour un nettoyage plus agressif, vous pouvez supprimer les images pendantes et les images inutilisées (celles qui ne sont utilisées par aucun conteneur) :
docker image prune -a
Image 9 - Suppression de toutes les images inutilisées
Cette dernière commande peut libérer beaucoup d'espace, mais utilisez-la avec précaution, car elle supprimera toutes les images qui ne sont pas référencées par des conteneurs en cours d'exécution ou arrêtés..
>Qu'est-ce que la commande Docker Prune exactement ? Nous y avons consacré un article entier, truffé d'exemples.
Maintenant que vous savez comment supprimer des images Docker, examinons quelques erreurs courantes que vous pourriez rencontrer et comment les traiter.
Gestion des erreurs lors de la suppression d'images Docker
Comme pour tout ce qui concerne le développement de logiciels, vous rencontrerez parfois des erreurs lorsque vous tenterez de supprimer des images Docker.
La plupart de ces erreurs se produisent pour de bonnes raisons - les protections de Docker sont conçues pour vous empêcher de casser accidentellement quelque chose d'important. Examinons ces erreurs courantes et la manière d'y remédier.
Erreur : L'image est utilisée par un conteneur
L'erreur la plus courante que vous rencontrerez lors de la suppression d'images Docker ressemble à ceci :
Error response from daemon: conflict: unable to delete 64ba095c0f0e (cannot be forced) - image is being used by running container 0284660ca006
Cela est dû au fait que l'architecture de Docker a une relation de dépendance stricte entre les conteneurs et les images. Un conteneur est essentiellement une instance en cours d'exécution d'une image avec sa propre couche inscriptible.
Pourquoi Docker empêche-t-il la suppression ? C'est simple : si vous supprimez une image alors qu'un conteneur basé sur cette image est toujours en cours d'exécution, ce conteneur se bloque immédiatement. Même les conteneurs arrêtés conservent des références à leurs images parentes, car ils peuvent être redémarrés ultérieurement.
Pour supprimer une telle image, commencez par dresser la liste de tous les conteneurs (y compris les conteneurs arrêtés) qui utilisent l'image :
docker ps -a --filter ancestor=64ba095c0f0e
Image 10 - Tous les conteneurs utilisant l'image
Vous pouvez alors arrêter tous les conteneurs :
docker stop 0284660ca006
Image 11 - Arrêt des conteneurs
Ensuite, vous pouvez retirer les conteneurs arrêtés :
docker rm 0284660ca006
Image 12 - Retrait des conteneurs
Enfin, utilisez la commande bien connue rmi
pour supprimer l'image :
docker rmi 64ba095c0f0e
Image 13 - Suppression de l'image Docker
Ou, si vous préférez une seule commande shell, utilisez celle-ci :
docker ps -a --filter ancestor=090040f97aa1 -q | xargs docker rm -f && docker rmi 090040f97aa1
Image 14 - Tout faire en une seule commande shell
C'est beaucoup plus facile, n'est-ce pas ?
Suppression forcée des images Docker
Si vous êtes absolument certain de vouloir supprimer une image sans tenir compte des dépendances, Docker propose l'option -f
ou --force
:
docker rmi -f 64ba095c0f0e
Image 15 - Suppression forcée des images Docker
L'option force indique à Docker de supprimer l'image même si elle est référencée par des conteneurs ou d'autres images.
Cependant, il ne supprimera pas les images référencées par les conteneurs en cours d'exécution, il ne supprimera pas les images référencées par les conteneurs en cours d'exécution.
La suppression forcée doit être votre dernier recours, comme lors du débogage de Docker lui-même ou lorsque vous êtes absolument certain que les dépendances peuvent être supprimées en toute sécurité. Dans les environnements de production, ce n'est presque jamais le bon choix.
N'oubliez pas que les contrôles de dépendance de Docker existent pour une raison. En travaillant avec eux plutôt que contre eux, vous obtiendrez une expérience Docker plus stable et plus prévisible.
Meilleures pratiques pour la gestion des images Docker
La gestion des images Docker n'est pas une tâche ponctuelle, c'est une responsabilité permanente.
En prenant de bonnes habitudes et en suivant les meilleures pratiques, vous éviterez les nettoyages d'urgence lorsque votre espace disque sera soudainement réduit à zéro. Dans cette section, je vais vous présenter quelques stratégies pour vous aider à maintenir un environnement Docker propre.
>Vous cherchez un guide complet pour apprendre Docker? Notre guide pour les professionnels des données est un bon point de départ.
Nettoyage régulier
Tout comme vous ne laisseriez pas la vaisselle s'accumuler dans votre évier pendant des semaines, vous ne devriez pas laisser des images Docker inutilisées s'accumuler indéfiniment sur votre système.
Un programme d'entretien régulier est le moyen le plus simple d'éviter le gonflement des images. En fonction de votre utilisation active de Docker, cela peut être hebdomadaire, mensuel ou trimestriel.
Au cours de ces séances de nettoyage, vous devez
- Examinez les images avec
docker images
et identifiez les candidats au retrait. - Vérifiez les images que vous ne reconnaissez pas ou que vous n'avez pas utilisées récemment.
- Recherchez les versions dupliquées d'une même application.
- Supprimez les images inutiles à l'aide des commandes décrites précédemment.
De nombreuses équipes de développement intègrent également le nettoyage des images dans leurs pipelines CI/CD. Par exemple, vous pouvez configurer les actions Jenkins ou GitHub pour qu'ellesnettoient automatiquement les images de compilation dépassant un certain âge.
Cette commande n'affichera que les images datant de plus de 30 jours :
docker images --format "{{.ID}}\t{{.CreatedAt}}" | awk '$2 < "'$(date -d '30 days ago' +'%Y-%m-%d')'"' | cut -f1
Utiliser l'élagage des images Docker
Docker fournit des commandes d'élagage intégrées qui peuvent automatiser une grande partie du travail de nettoyage manuel.
La commande docker system prune
supprime en une seule fois tous les conteneurs arrêtés, les images pendantes et les réseaux inutilisés :
docker system prune
Pour un nettoyage plus agressif qui supprime également les images inutilisées :
docker system prune -a
Vous pouvez même récupérer de l'espace dans les caches de construction :
docker builder prune
Ces commandes sont parfaites pour l'écriture de scripts sur. Voici un exemple simple de script de nettoyage que vous pourriez exécuter périodiquement :
#!/bin/bash
# Stop all containers
docker stop $(docker ps -q)
# Remove all stopped containers
docker container prune -f
# Remove all unused images
docker image prune -a -f
# Show remaining disk usage
docker system df
Image 16 - Script automatisé pour le nettoyage de Docker
N'oubliez pas d'utiliser l'option -f
avec précaution dans les scripts automatisés, car elle permet de contourner les messages de confirmation.
Organiser les versions des images
Une bonne stratégie de marquage vous aidera à minimiser l'accumulation d'images Docker inutiles.
Au lieu de toujours utiliser la balise latest
(qui peut devenir ambiguë au fil du temps), envisagez les approches suivantes :
- Utilisez le versionnement sémantique pour vos images :
myapp:1.0.0
myapp:1.0.1
myapp:1.1.0
- Inclure les informations de construction dans les tags :
myapp:build-2025-04-06
myapp:commit-a7f3d9e
- Ajouter des qualificatifs d'environnement ou d'objectif:
myapp:1.0.0-dev
myapp:1.0.0-test
myapp:1.0.0-prod
Pour les équipes plus importantes, envisagez de mettre en œuvre une politique de registre d'images Docker qui met automatiquement au rebut les anciennes images après une certaine période. Docker Hub et les registres privés tels que Harbor offrent des fonctionnalités permettant de gérer les cycles de vie des images.
En combinant ces bonnes pratiques (nettoyage régulier, élagage automatisé et marquage organisé), vous conserverez un environnement Docker beaucoup plus sain et éviterez les redoutables erreurs "no space left on device" (il ne reste plus d'espace sur le périphérique).
Résumé de la suppression des images Docker
Si vous êtes un développeur travaillant avec des conteneurs, la gestion correcte des images Docker est une compétence indispensable.
N'oubliez pas que la puissance de Docker provient de sa capacité à isoler et à empaqueter efficacement les applications, mais cet avantage peut rapidement devenir un inconvénient en l'absence d'une maintenance appropriée.
Vous avez appris pourquoi les images Docker peuvent devenir problématiques au fil du temps, en consommant un espace disque précieux et en créant de l'encombrement dans votre environnement de développement. Vous avez vu différentes commandes pour vérifier et supprimer des images, depuis le ciblage d'images spécifiques avec docker rmi
jusqu'au nettoyage en masse avec des commandes d'élagage. Vous avez également vu les erreurs les plus courantes au cours du processus d'enlèvement et appris à les surmonter.
Si vous souhaitez en savoir plus sur Docker et la conteneurisation, ces cours devraient être votre prochaine étape :
Maîtriser Docker et Kubernetes
FAQ
Puis-je récupérer une image Docker après l'avoir supprimée ?
Non, une fois que vous avez supprimé une image Docker avec docker rmi
, elle ne peut pas être récupérée à moins que vous n'ayez une sauvegarde ou que vous puissiez la récupérer à partir d'un registre. Assurez-vous toujours que vous supprimez les images correctes, en particulier dans les environnements de production. Pour les images que vous avez construites localement, vous devrez peut-être les reconstruire à partir du fichier Docker.
Qu'est-ce qu'une image Docker pendante et comment la supprimer ?
Les images parasites sont des calques qui n'appartiennent à aucune image balisée. Elles sont souvent créées lorsque vous reconstruisez des images plusieurs fois. Identifiez-les avec docker images -f "dangling=true"
et supprimez-les d'un seul coup avec docker image prune
.
Comment libérer rapidement de l'espace dans Docker ?
Le moyen le plus rapide de récupérer de l'espace est d'utiliser docker system prune -a
, qui supprime tous les conteneurs arrêtés, les réseaux inutilisés, les images pendantes et les images inutilisées. Attention, cette opération supprime toutes les images qui ne sont pas utilisées par un conteneur.
À quelle fréquence dois-je nettoyer mes images Docker ?
La fréquence dépend de votre utilisation active de Docker. Pour les environnements de développement avec des constructions d'images fréquentes, des nettoyages hebdomadaires sont recommandés. Pour les systèmes moins actifs, une maintenance mensuelle ou trimestrielle devrait suffire. Envisagez de mettre en place des scripts de nettoyage automatisés pour assurer la cohérence.
Quelle est la différence entre la suppression et l'élagage des images Docker ?
La suppression vise des images spécifiques que vous choisissez, tandis que l'élagage nettoie automatiquement toutes les images inutilisées ou pendantes sur la base de certains critères.