Les choses peuvent devenir compliquées assez facilement lorsque vous vous concentrez sur le déploiement de vos projets et les tests dans des conteneurs Docker. Vous aurez besoin de nettoyer votre espace de travail de temps en temps. Alors pourquoi ne pas garder votre environnement Docker sans encombrement avec docker image prune et d'autres commandes pratiques ?
Ce tutoriel vous apprendra les nombreuses façons de garder votre environnement Docker propre et gérable, ainsi que quelques bonnes pratiques pour apprivoiser les complexités potentielles.
Commençons !
Prérequis
Pour suivre ce tutoriel, vous devez disposer des éléments suivants :
- Un PC Windows 10 :ce didacticiel utilise Windows 10 et lancera des commandes Docker dans PowerShell, mais tout système d'exploitation exécutant Docker convient.
- Docker :ce didacticiel utilise Docker Desktop v3.6.0 pour l'hôte de conteneur.
- Un conteneur Docker existant à nettoyer
Suppression d'images Docker
Un environnement Docker se compose de nombreux composants différents allant des images, des conteneurs, de la mise en réseau, etc. Vous trouverez de nombreux composants différents à nettoyer. Commençons ce processus de nettoyage en supprimant d'abord toutes les anciennes images dont vous n'avez plus besoin. Mais ne vous inquiétez pas, si vous supprimez des images et créez un Dockerfile qui nécessite ces images supprimées, Docker les téléchargera automatiquement à nouveau.
Si vous avez besoin de supprimer des images inutiles que vous avez téléchargées dans le passé, le rm
la commande est votre ami. Cette commande supprime les images et conteneurs, mais le didacticiel se concentrera d'abord sur les images.
Si vous avez un ou plusieurs conteneurs utilisant actuellement l'image que vous souhaitez supprimer, vous devez d'abord arrêter les conteneurs utilisant cette image avec le
docker stop
commande. Pour plus d'informations, consultez l'article ATA Utiliser les conteneurs Docker Stop sans tout gâcher !
Notez que vous ne pouvez pas supprimer les images Docker à moins d'arrêter les conteneurs qui utilisent l'image.
Pour supprimer une image avec docker rm
, vous devez d'abord trouver l'ID de l'image. Pour ce faire, exécutez le docker image ls
commande. L'docker image ls
La commande lit Docker et renvoie toutes les images que vous avez actuellement, y compris l'ID de chaque image.
Vous pouvez également exécuter les
docker images
commande pour lister les images les plus récemment créées.
docker image ls
Ci-dessous, vous pouvez voir le résultat du docker image ls
commande dans une liste de table avec des colonnes REPOSITORY , TAG , ID D'IMAGE , CRÉÉ et TAILLE .
Une fois que vous connaissez l'ID d'image, fournissez cet ID d'image au docker image rm
commande, comme indiqué ci-dessous. Une fois que vous avez fait cela, Docker supprimera l'image avec l'ID spécifié.
# Remove only the images with the specified image ID
docker image rm image_id
Suppression des images Docker "pendantes"
Au fur et à mesure que vous commencez à créer plus de conteneurs et à télécharger plus d'images, il y a de fortes chances que vous ayez diverses images qui n'ont pas de conteneur associé. Ces images sont appelées images « pendantes » ou « parasites » et ne sont actuellement pas utilisées par Docker.
Pour économiser de l'espace disque et garder les choses en ordre, nettoyons toutes ces images pendantes. Pour ce faire, exécutez docker image prune
. Cette commande pruneaux ou supprimez les images qui n'ont pas de conteneur construit à partir d'elles.
docker image prune
Si vous souhaitez supprimer TOUTES les images avec un conteneur associé ou non, vous n'avez pas besoin de trouver un ID d'image particulier ; exécutez
docker image prune -a
passer au nucléaire et les supprimer tous.
Suppression des conteneurs Docker
Une fois que vous avez nettoyé vos images Docker, il est temps de passer aux conteneurs. Heureusement, vous verrez que la tâche de supprimer des conteneurs est similaire à la suppression d'images à l'aide de rm
commande.
Tout d'abord, recherchez l'ID du conteneur avec le docker container ls
commande pour supprimer les conteneurs, comme indiqué ci-dessous. Cette commande renvoie tous les conteneurs, y compris l'CONTAINER ID . Le -al
est facultatif pour vous montrer tous les conteneurs (en cours d'exécution ou non) et uniquement la dernière version de chaque conteneur.
docker container ls -al # List all Docker containers
Une fois que vous connaissez l'ID du conteneur, exécutez docker rm
et transmettez-lui l'ID de conteneur que vous souhaitez supprimer.
# Remove only the containers with the specified container ID
docker rm container_id
Vous pouvez également spécifier plusieurs ID de conteneur en séparant chaque ID par un espace, comme indiqué ci-dessous. Cette commande supprime (rm
) les conteneurs du didacticiel Alpine et Docker 101 avec les ID de conteneur f8ec07177218
et 6fac840d9382
.
docker rm f8ec07177218 6fac840d9382
Suppression de tous les conteneurs Docker arrêtés
Peut-être avez-vous beaucoup de conteneurs arrêtés qui ne font que prendre de la place. Comme les images pendantes, les conteneurs arrêtés ne servent à rien pour le moment.
Pour supprimer tous les conteneurs arrêtés :
1. Exécutez le docker
commande ci-dessous pour tout lister (ls --all
) Conteneurs Docker. Remarquez tous les conteneurs avec un STATUS sur Sortie il y a (X) Y heures . Tous ces conteneurs sont actuellement arrêtés.
docker container ls --all
2. Maintenant, exécutez le docker container prune
commande pour supprimer tous les conteneurs arrêtés. Lorsque cette commande s'exécute, vous verrez quels ID de conteneur la commande a supprimés.
docker container prune
3. Enfin, exécutez docker container ls -a
à nouveau pour voir que chaque conteneur arrêté a été retiré.
Si vous préférez ne pas spécifier manuellement un ou plusieurs ID de conteneur, vous pouvez également imbriquer des commandes Docker à l'aide de
$()
pour lister les conteneurs et les supprimer sur une seule ligne avecdocker container rm $(docker container ls -aq)
. Ledocker container
la commande utilise leq
commutateur pour ne pas renvoyer les conteneurs à la console. Une fois que Docker a collecté tous les conteneurs, il exécute ensuitedocker container rm
contre chacun.
Suppression des conteneurs Docker par des règles de filtrage
Peut-être avez-vous de nombreux conteneurs différents, et les retirer chacun par ID serait pénible. S'ils ont tous des caractéristiques communes, vous pouvez créer un filtre pour supprimer uniquement les conteneurs correspondant à une requête spécifique.
Pour supprimer plusieurs conteneurs correspondant à une requête spécifique, utilisez le filter
paramètre ou indicateur de filtrage sur le docker container prune
commande. Ce paramètre permet de spécifier soit un until
attribut pour filtrer les conteneurs créés avant une date ou un label
argument pour faire correspondre les conteneurs avec/sans une étiquette spécifique.
Par exemple, vous pouvez supprimer tous les conteneurs arrêtés qui ont été créés plus de 10h
en exécutant la commande ci-dessous.
docker container prune --filter "until=10h"
Entrez O pour confirmer la suppression du conteneur Docker, comme indiqué ci-dessous. Une fois la suppression terminée, vous verrez quels conteneurs sont supprimés et l'espace total récupéré.
Nettoyage des conteneurs en imbriquant les commandes Docker
Toutes les commandes précédentes couvertes vous obligeaient à arrêter chaque conteneur au préalable. Mais que se passe-t-il si les conteneurs fonctionnent ? Au lieu d'arrêter chaque conteneur individuellement, vous pouvez à la place imbriquer des commandes Docker dans une commande de suppression pour arrêter tous les conteneurs et les supprimer simultanément.
Prenez des précautions supplémentaires lorsque vous retirez des conteneurs en cours d'exécution. La suppression peut avoir un impact sur certaines applications ou processus qui dépendent de ce conteneur Docker.
Le docker imbriqué ($(docker container
) la commande ci-dessous répertorie discrètement tous les conteneurs (-aq
) en mémoire, y compris ceux en cours d'exécution. La liste des conteneurs est ensuite transmise au docker
externe commande pour supprimer (rm
) les conteneurs de la liste.
Vous pouvez voir ci-dessous que l'exécution de la commande imbriquée supprime tous les conteneurs en une seule fois, comme indiqué ci-dessous. Ainsi, lorsque vous vérifiez la liste des conteneurs, vous n'obtiendrez pas de sortie car la liste est vide.
Supprimer automatiquement les conteneurs avec le --rm
Drapeau
Les commandes précédentes sont utilisées pour supprimer les conteneurs Docker uniquement après que la liste Docker a été encombrée. Mais pourquoi attendre que la liste Docker soit encombrée ? Si vous êtes un travailleur de type "propre au fur et à mesure", la mesure de nettoyage préventif est à portée de main avec le --rm
drapeau.
Le --rm
indicateur dans une docker run
La commande est pratique si vous ne faites que tester des choses sur votre machine pendant une courte période et que vous ne gérez pas de fichiers ou de déploiements critiques à l'intérieur de ce conteneur.
L'docker run
la syntaxe de commande ci-dessous ajoute un conteneur Docker avec le nom de votre choix (container_name
) et une image Docker (organization/base_image
) de la bibliothèque Docker Hub. Mais alors le --rm
flag supprime automatiquement le conteneur.
docker run --rm --name container_name organization/base_image
Nettoyage des volumes Docker
Docker ne se compose pas seulement d'images et de conteneurs. L'écosystème Docker se compose également de volumes de stockage. En utilisant la même méthode générale de recherche d'ID et d'élagage des éléments, vous pouvez également nettoyer les volumes de stockage.
Comme pour les conteneurs et les images, exécutez docker volume ls
pour voir tous les ID de volume que vous avez dans le système.
docker volume ls
Ci-dessous, vous pouvez voir que dans ce didacticiel, trois volumes sont répertoriés.
Exécutez maintenant le docker
commande ci-dessous pour supprimer tous les volumes inutilisés (volume prune
).
Pour supprimer les réseaux docker inutilisés, exécutez plutôt cette commande :
docker network prune
docker volume prune
Ci-dessous, vous pouvez voir que la commande supprime tous les volumes locaux car ils n'étaient pas utilisés au moment de la suppression. Ainsi, lorsque vous répertoriez tous les volumes Docker, vous n'obtenez qu'une liste de tables vide.
Suppression simultanée de tous les composants Docker inutilisés
Tout au long de ce didacticiel, vous avez choisi les composants Docker à supprimer. Peut-être travaillez-vous dans un environnement de test et souhaitez-vous simplement tout nettoyer en même temps. Au lieu de nettoyer chaque composant individuellement, nettoyez-le entièrement avec docker system prune
!
Le docker system prune
La commande supprime les conteneurs non exécutés, les réseaux inutilisés, les images inutilisées et le cache de construction pour le moteur Docker.
docker system prune
Aajoutez le
-f
flag pour forcer ou supprimer les messages d'avertissement et confirmer la suppression des éléments du système Docker, comme ceci :docker system prune -f
Ci-dessous, vous pouvez voir une invite vous demandant si vous souhaitez continuer à supprimer les éléments du système Docker ou non. Confirmez en saisissant Y pour continuer.
Conclusion
Dans ce didacticiel, vous avez exploré les nombreuses façons de nettoyer les images Docker avec le docker image prune
commande, suppression des conteneurs avec docker container rm
, et plus encore.
Avec ces nouvelles connaissances, pourquoi ne pas développer vos propres méthodes préférées de nettoyage de vos images Docker ? Peut-être faire un inventaire des actifs Docker ou un bon système de marquage qui vous permet de nommer correctement vos projets et d'éviter de supprimer des images ou des conteneurs critiques ?