Nettoyage de Docker : Un guide complet avec des exemples pratiques

Si vous travaillez quotidiennement avec Docker, vous savez à quelle vitesse il peut consommer de l’espace disque.

Au fil du temps, votre système accumule des images, des conteneurs, des volumes et des réseaux inutilisés. Ces éléments restent principalement inactifs, occupant un espace de stockage précieux et potentiellement vous empêchant de travailler sur votre projet actuel. Heureusement, Docker propose des commandes de nettoyage intégrées qui permettent de supprimer facilement les ressources inutiles.

Ces commandes de nettoyage font partie de la famille docker prune, et aujourd’hui, vous allez tout savoir à leur sujet. Elles deviendront rapidement votre solution préférée pour libérer de l’espace disque.

Commençons par un bref aperçu avant de plonger dans des exemples pratiques.

Vous êtes nouveau sur Docker? Consultez notre guide sur l’apprentissage de Docker à partir de zéro pour les professionnels des données pour vous mettre rapidement à niveau.

Qu’est-ce que Docker Prune?

Le terme « Docker Prune » fait généralement référence à un ensemble de commandes conçues pour vous aider à supprimer les ressources Docker inutilisées et superflues.

Au fil du temps, surtout si vous travaillez sur plusieurs projets, vous créerez d’innombrables images, exécuterez des conteneurs et configurerez des volumes et des réseaux. Tout cela s’accumule sur votre système, occupant une quantité significative d’espace disque. Le but de docker prune est de nettoyer ce désordre et de récupérer de l’espace de stockage.

Cela étant dit, il y a plus à docker prune que ce que l’on voit.

Il ne s’agit pas simplement d’une seule commande que vous pouvez exécuter. Eh bien, vous pourriez le faire, mais parfois vous avez besoin de contrôle précis sur ce qui est supprimé. C’est là que cet article intervient. Il vous montrera comment gérer le nettoyage de manière efficace, en vous assurant de ne supprimer que ce que vous avez l’intention de supprimer, et comment pratiquer dans un environnement sécurisé pour éviter de supprimer accidentellement des données importantes.

Il convient également de noter que les commandes de taille de prune ne suppriment que les ressources qui ne sont pas activement utilisées. Les images, les volumes et les réseaux référencés par les conteneurs en cours d’exécution ne seront pas supprimés. En d’autres termes, la taille de prune n’interférera pas avec les charges de travail actives.  

Dans la section suivante, nous vous guiderons à travers les différents types de commandes de taille de prune et expliquerons comment elles s’intègrent dans votre flux de travail.  

Envie d’ajouter Docker à votre CV ou portfolio? Ces 10 idées de projets Docker vous rendront prêt pour l’emploi.

Toutes les commandes de taille de prune Docker avec des exemples pratiques

Docker propose plusieurs commandes prune qui vous permettent de nettoyer les ressources inutilisées individuellement ou toutes en une seule fois. Dans cette section, vous apprendrez à les utiliser, à la fois en passant par la théorie et des exemples pratiques.  

docker system prune  

Cette commande est la plus complète pour récupérer de l’espace disque. Elle supprime tous les conteneurs, réseaux, images et cache de construction inutilisés en une seule opération.  

Si vous cherchez un moyen rapide de libérer de l’espace disque avec une seule commande, c’est celle à utiliser.

Vous pouvez passer des options à la commande docker system prune:

  • -a ou --all supprime toutes les images non utilisées au lieu de simplement celles en suspens (images qui ne sont pas étiquetées ou référencées par aucun conteneur).
  • --filter vous permet de spécifier des valeurs de filtre.
  • -f ou --force ignore l’invite de confirmation.
  • --volumes supprime également les volumes anonymes ainsi que les conteneurs, réseaux, images et le cache de construction.  

Par défaut, docker system prune vous demande une confirmation car c’est une opération potentiellement destructrice:  

Image 1 – Demande de confirmation de suppression du système Docker

Pour contourner la demande de confirmation et supprimer toutes les images, conteneurs, réseaux et volumes inutilisés avec une seule commande, exécutez:  

docker system prune -a -f --volumes

Image 2 – Supprimez tout avec une seule commande docker system prune

Mais que faire si vous avez besoin de plus de contrôle granulaire? Parlons-en ensuite.

docker container prune

En un mot, cette commande supprime tous les conteneurs arrêtés.

Les conteneurs arrêtés restent sur votre système jusqu’à ce qu’ils soient supprimés manuellement. Ils peuvent occuper de l’espace disque et être difficiles à repérer à moins d’utiliser un outil comme Docker Desktop Dashboard.

Tout comme docker system prune, cette commande prend en charge des options :

  • --filter vous permet de spécifier des paires clé-valeur pour contrôler quels conteneurs doivent être supprimés.
  • -f ou --force ignore la demande de confirmation.

Voici une liste de conteneurs non en cours d’exécution :

Image 3 – Liste des conteneurs non en cours d’exécution

Pour supprimer code-server (et tout autre conteneur arrêté), exécutez :

docker container prune -f

Cela ne vous demandera pas de confirmation, et en quelques secondes, vous verrez une sortie comme ceci :

Image 4 – Message de sortie du nettoyage du conteneur

Et voilà, il n’y a plus de conteneurs arrêtés :

Image 5 – Liste des conteneurs non en cours d’exécution (2)

Maintenant, occupons-nous des images inutilisées.

docker image prune

Tout comme la commande précédente, docker image prune supprime les images inutilisées.

Par défaut, elle supprime uniquement les images pendantes – des images sans balise et non associées à un conteneur. Vous pouvez utiliser un indicateur facultatif pour supprimer toutes les images inutilisées, pas seulement celles qui sont pendantes.

Voici une liste des options disponibles

  • -a ou --all supprime toutes les images inutilisées au lieu de seulement celles qui sont pendantes.
  • --filter vous permet de spécifier des paires clé-valeur pour contrôler quelles images seront supprimées.
  • -f ou --force saute la demande de confirmation.

Maintenant, voyons-le en action !

Voici une liste des images actuellement sur le système :

Image 6 – Liste des images Docker

Pour les supprimer toutes d’un seul coup, exécutez :

docker image prune -a -f

Vous verrez une sortie comme ceci dans le terminal:

Image 7 – Message de sortie de l’élagage de l’image

Ensuite, aucune image ne reste dans Docker Desktop:

Image 8 – Liste des images Docker (2)

Ensuite, gérons les volumes inutilisés.

docker volume prune

Comme son nom l’indique, la commande docker volume prune supprime tous les volumes locaux inutilisés. En d’autres termes, elle supprime les volumes qui ne sont référencés par aucun conteneur.

Par défaut, la commande ne supprime que volumes anonymes – des volumes sans nom créés par Docker lors du démarrage d’un conteneur. Pour supprimer explicitement les volumes nommés, vous devez passer une option supplémentaire.

Voici les options disponibles :

  • -a ou --all supprime tous les volumes inutilisés au lieu des seuls anonymes.
  • --filter vous permet de spécifier des paires clé-valeur pour contrôler quels volumes sont supprimés.
  • -f ou --force ignore l’invite de confirmation.

Sur notre système, nous avons un volume créé par l’utilisateur à partir d’un fichier docker-compose.yml:

Image 9 – Liste des volumes Docker

La commande suivante supprime tous les volumes locaux:

docker volume prune -a -f

Après l’avoir exécutée, vous verrez une sortie similaire à ceci:

Image 10 – Message de sortie de l’élagage du volume

Maintenant, aucun volume n’est restant:

Image 11 – Liste des volumes Docker (2)

Enfin, voyons comment supprimer les réseaux inutilisés.

docker network prune

Lorsque les conteneurs Docker communiquent entre eux, ils utilisent souvent des réseaux définis par l’utilisateur. Cependant, leurs réseaux restent généralement sur votre système une fois que ces conteneurs sont supprimés.

La commande docker network prune supprime les réseaux qui ne sont plus utilisés par aucun conteneur.

Comme les autres commandes prune, elle inclut quelques options :

  • --filter vous permet de spécifier des paires clé-valeur pour contrôler les réseaux à supprimer.
  • -f ou --force permet de passer la confirmation.

Contrairement aux images, conteneurs ou volumes, vous ne pouvez pas inspecter visuellement les réseaux via Docker Desktop, vous devrez donc travailler en ligne de commande. Voici une liste des réseaux disponibles :

Image 12 – Liste des réseaux Docker

Pour supprimer tous les réseaux non associés à l’installation par défaut de Docker, exécutez la commande suivante :

docker network prune -a -f

Après avoir exécuté la commande, vous verrez une sortie comme ceci :

Image 13 – Message de sortie de l’élagage du réseau

Tous les réseaux associés aux conteneurs précédemment en cours d’exécution ont maintenant disparu :

Image 14 – Liste des réseaux Docker

Cependant, notez que les trois réseaux restants sont essentiels au bon fonctionnement de Docker et ne peuvent pas être supprimés.

Et c’est tout pour l’utilisation de base des commandes docker prune ! Ensuite, nous aborderons des sujets avancés tels que l’utilisation sûre de ces commandes et les meilleures pratiques pour les environnements de production et sensibles.

Utiliser Docker Prune en toute sécurité  

Les commandes docker prune aident à récupérer rapidement de l’espace disque, mais elles doivent être utilisées avec prudence, notamment dans les environnements de production.  

Supprimer accidentellement des contenants, des images ou des volumes importants peut entraîner une perte de données et perturber les flux de travail critiques. Pour éviter cela, il est préférable de comprendre ce qui sera supprimé avant d’exécuter une commande de nettoyage.

Cette section explique les précautions clés à prendre lors de l’exécution de docker prune en toute sécurité.

Comprendre ce qui sera supprimé

Les commandes de prune sont conçues pour supprimer uniquement les ressources qui ne sont pas actuellement utilisées.

Par exemple, docker image prune supprime uniquement les images obsolètes, et docker volume prune supprime uniquement les volumes non attachés à des conteneurs. Cependant, l’ajout d’options comme -a -f supprimera toutes les images ou volumes sans demander de confirmation.

En outre, dans des environnements complexes, il est facile de négliger des dépendances, donc vérifier à deux reprises avant de procéder à la suppression est toujours une bonne pratique.

Avant d’exécuter une commande prune, vous devriez inspecter votre système pour voir quels ressources sont actuellement utilisées. Il existe plusieurs façons de le faire, et nous allons explorer les plus courantes dans cette section.  

Utilisez cette commande pour afficher tous les conteneurs, y compris ceux qui sont arrêtés :  

docker ps -a

Vous devriez voir une sortie similaire à ceci :

Image 15 – Liste de tous les conteneurs Docker

De même, utilisez cette commande pour afficher la liste de toutes les images, y compris celles inutilisées:  

docker images

La sortie sera structurée de manière similaire à celle ci-dessus:  

Image 16 – Liste de toutes les images Docker

Pour vérifier les volumes, exécutez cette commande pour lister tous les volumes :

docker volume ls

Image 17 – Liste de tous les volumes Docker

Examinez attentivement ces résultats pour vous assurer qu’aucune ressource critique ne sera supprimée par erreur.

Exécution à vide pour la sécurité

Malheureusement, Docker n’a toujours pas d’option intégrée pour une exécution à vide de la commande de nettoyage, même si cela a été demandé il y a des années.

En raison de cela, vous devez inspecter manuellement les ressources en utilisant les commandes répertoriées dans la section précédente avant d’exécuter une commande de taille.  

Si vous travaillez dans un environnement sensible où la persistance des données est critique, vous devriez toujours créer une sauvegarde avant d’exécuter des commandes de taille qui affectent les volumes.  

Bien sûr, ce ne sont que des mesures de précaution, mais nous espérons voir bientôt une option de simulation implémentée.

Meilleures pratiques pour Docker Prune

Pour maintenir votre environnement Docker dépourvu de superflu, il est important d’exécuter régulièrement des commandes prune – voire même de les automatiser.

Cette section vous guide à travers les meilleures pratiques pour exécuter les commandes docker prune dans les environnements de production.

Utilisez docker prune régulièrement

Au fil du temps, Docker accumule des images inutilisées, des conteneurs arrêtés et des volumes superflus – le tout consommant un espace disque significatif.

Exécuter régulièrement des commandes de taille permet de garder votre environnement propre et d’éviter une utilisation excessive du disque. Vous devriez les inclure dans votre planning de maintenance.  

Toutes les quelques semaines constituent un bon point de départ, mais si votre configuration implique une création et une suppression fréquentes de conteneurs, envisagez un planning plus fréquent.  

Soyez prudent en production  

Tout travail dans un environnement de production nécessite une attention particulière, et le nettoyage de Docker ne fait pas exception.  

Un moment d’inattention peut entraîner une interruption ou une perte de données, et vous ne voulez pas en être responsable. Avant d’exécuter des commandes docker prune dans un environnement de production, inspectez toujours les ressources système en utilisant docker ps -a, docker images et docker volume ls, comme expliqué dans la section précédente.  

De plus, il est conseillé d’utiliser des commandes de nettoyage spécifiques au lieu du docker system prune tout inclus, car il peut être plus facile de récupérer des suppressions non intentionnelles.  

Automatisez le nettoyage de docker  

Une autre bonne pratique consiste à rationaliser les efforts de nettoyage en automatisant les commandes docker prune à l’aide de tâches planifiées.  

Sous Linux, vous pouvez configurer une tâche cron pour exécuter les commandes à intervalles réguliers, tandis que sous Windows, vous pouvez utiliser le Planificateur de tâches pour une automatisation similaire. Cela aide à maintenir un système propre sans nécessiter d’intervention manuelle. Cependant, dans un environnement de production, assurez-vous que la suppression automatisée ne perturbe pas les charges de travail critiques.  

Par exemple, cette tâche cron sur Linux exécute une commande de suppression globale chaque dimanche à minuit :

0 0 * * 0 docker system prune -a -f

Résolution des problèmes liés à Docker Prune

Les commandes docker prune sont une solution courante pour récupérer de l’espace disque, mais elles ne sont pas toujours suffisantes pour garantir un espace adéquat pour télécharger de nouvelles images ou exécuter de nouveaux conteneurs.  

De plus, vous pourriez accidentellement supprimer des ressources importantes, il est donc crucial de discuter des stratégies de récupération.  

Les deux sujets seront abordés dans cette section.  

Rencontrer des problèmes d’espace disque  

Les images Docker peuvent être volumineuses – nous en avons récemment eu une de plus de 13 Go – et nous sommes sûrs qu’il en existe des encore plus grandes. Ainsi, même après avoir exécuté docker prune, vous pourriez constater que votre système manque toujours d’espace disque.  

Pour voir exactement combien d’espace est utilisé par les images, les conteneurs et les volumes, exécutez cette commande :

docker system df

Image 18 – Espace utilisé par Docker

Lorsque vous libérez de l’espace disque avec la commande docker prune, ajoutez le drapeau -a pour supprimer toutes les images, volumes ou conteneurs, et non seulement ceux qui sont en suspens ou anonymes. Bien sûr, gardez à l’esprit les inconvénients potentiels de cette approche.

Si le problème d’espace disque persiste, votre seule option est d’augmenter l’espace disque disponible.

Récupération des suppressions accidentelles

La récupération est plus facile à dire qu’à faire, c’est pourquoi nous recommandons de comprendre ce qui sera supprimé par l’élagage avant d’exécuter la commande réelle.

Cependant, si vous vous trouvez dans une situation où vous avez accidentellement élagué des conteneurs, des images ou des volumes importants, commencez par vérifier les journaux pour identifier ce qui a été supprimé.

Sous macOS, cela peut être fait en exécutant les deux commandes suivantes (options pour Windows et Linux):

pred='process matches ".*(ocker|vpnkit).*" || (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")' /usr/bin/log stream --style syslog --level=debug --color=always --predicate "$pred" /usr/bin/log show --debug --info --style syslog --last 30m --predicate "$pred" >/tmp/logs.txt

L’exécution de ces commandes enregistrera les 30 dernières minutes de journaux liés à Docker dans /tmp/logs.txt. Vous devriez inspecter ces journaux pour déterminer quels conteneurs ou images ont été supprimés.

Pour les images supprimées, vous pouvez probablement les récupérer à nouveau depuis un registre comme Docker Hub. Une commande comme celle-ci devrait faire l’affaire:

docker pull <image_name>

Et pour les conteneurs supprimés, vous pouvez toujours les recréer s’ils étaient basés sur des images persistantes:  

docker run --name <container_name> <image_name>

Sinon, vous pouvez restaurer à partir des sauvegardes si elles sont disponibles, ce qui peut être utilisé pour récupérer à la fois les données du volume et du conteneur. À l’avenir, envisagez d’utiliser des outils pour les instantanés de volume afin de prévenir la perte de données.  

Cependant, la meilleure stratégie consiste à inspecter les ressources qui seront supprimées avant d’exécuter une commande de taille et à ne procéder que si vous êtes absolument certain que cela n’aura pas d’impact sur votre flux de travail.  

Résumé de Docker Prune  

En conclusion, la famille de commandes docker prune est un moyen puissant de récupérer de l’espace disque, mais elle comporte le risque de supprimer accidentellement des ressources dont vous avez besoin, entraînant une perte de données. Ce risque est encore plus grand lors de l’utilisation des indicateurs facultatifs -a -f, qui supprimeront tout de force.  

Néanmoins, la taille reste une méthode incontournable pour maintenir votre système propre et organisé.  

Il suffit d’être prudent, surtout dans les environnements de production. Utilisez des commandes telles que docker ps -a, docker images et docker volume ls avant de nettoyer pour lister tous les conteneurs, images et volumes. Exécutez la commande de nettoyage seulement après être sûr que vous êtes d’accord pour supprimer les ressources répertoriées (en supposant qu’elles ne sont pas utilisées par un conteneur en cours d’exécution).

Si vous souhaitez en savoir plus sur Docker, la conteneurisation et l’orchestration de conteneurs, consultez ces cours sur DataCamp :

Source:
https://www.datacamp.com/tutorial/docker-prune