GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment élaguer les ressources Docker inutilisées

Docker vous permet de regrouper rapidement vos applications sous forme de conteneurs, ce qui vous permet de les exécuter n'importe où, de votre ordinateur portable à un cloud public. Après avoir utilisé Docker pendant un certain temps, vous pouvez accumuler un grand nombre de conteneurs, d'images et d'autres ressources redondantes. Voici comment les ranger.

Docker ne supprime généralement rien à moins que vous ne le lui disiez. Cela signifie que les images que vous avez extraites et les conteneurs que vous avez créés traînent probablement encore sur votre système, même s'ils ne sont plus utilisés.

Avoir trop de ressources redondantes peut rapidement entraîner une utilisation excessive du disque. Cela entraîne également une sortie beaucoup plus longue lors de la liste des ressources sur la ligne de commande, ce qui rend plus difficile la recherche des informations que vous recherchez.

Élagage des ressources pendantes

Une ressource « pendante » est tout objet Docker qui n'est pas actuellement associé à un conteneur. Cela inclut les images Docker, les réseaux et les volumes, ainsi que les conteneurs arrêtés. Dans le cas des images, une image est « pendante » si elle n'est pas taguée et n'a aucune référence.

Docker fournit une seule commande de maintenance pour vous permettre de purger toutes les ressources en suspens et les conteneurs arrêtés. Sauf si une ressource est utilisée par un running conteneur, il sera supprimé.

docker system prune

L'exécution de la commande affiche une invite de confirmation qui répertorie les types de ressources à supprimer. Tapez y et appuyez sur Entrée pour poursuivre la suppression. Vous pouvez désactiver la confirmation en passant le -f ou --force drapeau.

Les volumes ne sont pas supprimés par défaut. La suppression de volumes risque de perdre des données persistantes que vous souhaiterez peut-être conserver. Si vous souhaitez supprimer des volumes qui ne sont pas associés à un conteneur, passez le --volumes drapeau pour les inclure dans l'opération.

Vous pouvez supprimer encore plus de données d'image en passant le -a (ou --all ) drapeau. Cela entraînera Docker à supprimer tous les éléments inutilisés images, pas seulement celles qui ne sont pas référencées. Chaque image de votre système sera supprimée, sauf si au moins un conteneur en cours d'exécution l'exige.

Utiliser des filtres lors de l'élagage

Les filtres peuvent être utilisés avec le prune commande. Le filtrage vous donne plus de contrôle sur ce qui est supprimé. Deux filtres sont actuellement pris en charge, until et timestamp .

  • until – Le until filtre empêche la suppression des conteneurs, des images et des réseaux créés avant un temps donné. Vous pouvez spécifier l'heure dans plusieurs formats différents, comme un horodatage Unix en secondes (par exemple 1614890000 ) ou une chaîne d'horodatage au format date (par exemple 2021-03-04T20:30:00 ).
  • label – Le label filter limite la suppression afin que seules les ressources avec une étiquette donnée soient supprimées. Les étiquettes peuvent être utilisées avec des conteneurs, des images, des réseaux et des volumes. Vous spécifiez les libellés sous la forme label=key=value (clé égale à valeur), label!=key=value (clé différente de la valeur), label=key (a l'étiquette donnée) ou label!=key (n'a pas l'étiquette donnée).

Pour utiliser un filtre, passez-le au --filter drapeau :

docker system prune --filter until=2021-03-04T20:30:00 --filter label=foo=bar

Cette commande supprimerait les ressources avec le foo=bar label créé avant 20h30 le 4 mars. Toutes les ressources ne correspondant pas à ces critères seraient laissées intactes.

Elagage des types de ressources individuelles

Vous n'aurez pas toujours besoin d'utiliser docker system prune . Docker fournit également des commandes d'élagage plus granulaires. Ceux-ci peuvent être utilisés lorsque vous ne souhaitez supprimer qu'un seul type de ressource.

Le --force et --filter indicateurs pris en charge par docker system prune s'appliquent également aux commandes d'élagage individuelles répertoriées ci-dessous.

Conteneurs d'élagage

Les commandes Docker quotidiennes peuvent rapidement entraîner l'arrêt d'un grand nombre de conteneurs. Le problème est exaspéré si vous docker build images sans le --rm flag, car cela entraîne la conservation des couches de construction intermédiaires.

Exécutez docker container prune pour nettoyer les conteneurs arrêtés. Les conteneurs arrêtés n'apparaissent pas lorsque vous exécutez docker ps; pour les voir, vous devrez utiliser docker ps -a pour afficher tous les conteneurs de votre système.

Si vous souhaitez supprimer un conteneur individuel, utilisez le docker rm commande transmettant l'ID du conteneur. Vous pouvez l'obtenir en exécutant docker ps . Si le conteneur est en cours d'exécution, vous devrez utiliser le --force drapeau pour le supprimer.

Élagage des images

Utiliser docker image prune pour supprimer toutes les images pendantes. Comme docker system prune , cela affectera les images qui ne sont pas balisées ou qui ne sont référencées par aucun conteneur.

Ajoutez le -a drapeau pour supprimer à la place toutes les images inutilisées. Cela purgera toutes les images de votre système qui ne sont pas requises par au moins un conteneur. Les images étiquetées seront également incluses, vous permettant d'effacer rapidement les anciennes extractions de Docker Hub.

Vous pouvez supprimer une image spécifique avec le docker rmi commande :

docker rmi wordpress:latest

Lorsqu'une image a plusieurs balises, docker rmi supprimera la balise donnée sans réellement supprimer l'image. Il sera supprimé une fois la dernière balise supprimée.

Réseaux d'élagage

Les réseaux Docker ne sont pas nettoyés automatiquement. Au fil du temps, vous pouvez vous retrouver avec un grand nombre d'entre eux. Cela encombre votre système avec des périphériques de pont virtuel redondants et des entrées de table de routage. Exécutez docker network prune pour détruire tous les réseaux inutilisés et annuler les modifications apportées à la configuration de votre hôte.

Vous pouvez supprimer des réseaux individuels en exécutant docker rm my-network .

Élagage des volumes

Docker ne supprimera jamais un volume. Ils stockent les données persistantes créées par vos conteneurs, de sorte qu'une suppression involontaire pourrait avoir des conséquences dévastatrices. Les volumes peuvent également être partagés par plusieurs conteneurs ou laissés inactifs prêts à être attachés à un autre conteneur à l'avenir.

Si vous souhaitez élaguer les volumes inutilisés, vous devez exécuter docker volume prune . Cela supprimera tous les volumes qui ne sont pas utilisés par au moins un conteneur. Des volumes individuels peuvent être supprimés à l'aide de docker volume rm my-volume .

Prévenir l'accumulation future

Vous pouvez minimiser le risque d'accumulation de ressources redondantes à l'avenir en prenant soin de transmettre le --rm indicateur pour docker build et docker run commandes.

Lorsqu'il est utilisé avec build , cela entraînera la suppression des couches de construction intermédiaires (marquées comme <none>:<none> dans docker images ) production. Cela peut représenter une réduction significative de l'utilisation du disque. Une nouvelle couche intermédiaire est normalement créée pour chaque instruction dans votre Dockerfile . Vous pouvez généralement les supprimer, sauf si vous avez l'intention de les utiliser plus tard comme point de départ pour une nouvelle image.

Utilisation de --rm avec docker run supprimera le conteneur dès que sa commande se terminera. C'est idéal lors de l'exécution d'un binaire dans un conteneur à usage unique. Ne transmettez pas --rm aux conteneurs que vous avez l'intention d'exécuter en permanence ou que vous souhaitez démarrer et arrêter à la demande. Les exemples incluent les serveurs Web et de base de données qui exécutent un service au lieu d'une commande fournie par l'utilisateur.

Conclusion

L'élagage de vos ressources Docker peut libérer de l'espace disque et vous aider à travailler avec la CLI Docker. L'élimination des conteneurs et des images redondants facilite l'identification des ressources que vous recherchez.

Docker ne supprimera rien à moins que vous ne le disiez. Cela vaut la peine d'exécuter docker system prune périodiquement pour garder votre système propre. Vous pouvez créer une tâche cron qui l'exécute mensuellement, en utilisant le until filtre pour créer une période de rétention pour les ressources récemment ajoutées.


Docker
  1. Comment supprimer toutes les images Docker, les conteneurs, les volumes, les réseaux et les ressources inutilisées

  2. Comment mettre à jour automatiquement les conteneurs Docker en cours d'exécution

  3. Comment exporter et importer des conteneurs Docker

  4. Comment transmettre des variables d'environnement aux conteneurs Docker

  5. Comment supprimer tous les conteneurs Docker

Comment exécuter des conteneurs Docker

Comment supprimer les conteneurs Docker

Comment arrêter les conteneurs Docker

Comment nommer ou renommer les conteneurs Docker

Comment gérer les conteneurs Docker

Comment configurer les espaces de noms réseau dans les conteneurs Docker