Docker est une technologie de conteneurisation de logiciels qui aide les développeurs à créer et à déployer des applications sur des plateformes disparates allant de l’ordinateur de bureau au cloud.

Un instantané – ou plan – du code source, des dépendances et des outils nécessaires à la création d’une application dans un conteneur Docker est appelé image. Les applications Docker qui nécessitent des données persistantes peuvent s’appuyer sur un stockage appelé volume qui est indépendant du système d’exploitation sous-jacent.

Une organisation efficace des images, des volumes et des conteneurs est importante lors de l’utilisation de Docker. Les incarnations inutilisées de ces ressources peuvent s’accumuler, occupant un espace disque précieux et affectant éventuellement les performances du système.

Cet article explore différentes façons de maintenir l’organisation du système en vidant les images (individuellement et en une seule fois), les volumes et les conteneurs. Et nous utiliserons l’interface de ligne de commande (CLI) docker pour accomplir ces tâches rapidement.

Comment retirer des images Docker

La suppression des images obsolètes ou inutiles de Docker est essentielle pour maintenir un système propre et organisé. Voyons comment CLI peut cibler certaines images pour les retirer.

Tout d’abord, examinons les images dans un environnement Docker avec la commande docker image ls:

$ docker image ls
REPOSITORY       TAG       IMAGE ID       CREATED              SIZE
my_image         latest    2cbc27836df4   60 seconds ago       7.05MB
<none>           <none>    85b412789704   2 days ago           7.05MB
demo             latest    26d80cd96d69   15 months ago        28.5MB

La liste d’images ci-dessus a révélé des images nommées my_image et demo, toutes deux étiquetées latest. Une troisième image n’a ni nom ni étiquette. Dans ce cas, il s’agit d’une image « pendante » : une image qui n’est pas actuellement utilisée par un conteneur. Cette image pendante résulte d’une reconstruction de my_image (un scénario courant). La version précédente de l’image se trouve toujours sur le système de fichiers, mais n’est pas utilisée actuellement.

La liste affiche également les 12 premiers caractères de l’ID à 64 caractères de chaque image, les dates de création et l’espace de stockage que les images consomment.

Retirer toutes les images inutilisées

Dans l’exemple de liste ci-dessus, nous avons une image qui traîne. Cependant, il est possible qu’une image sans nom ni étiquette soit active. Par exemple, elle aurait pu être utilisée pour démarrer un conteneur en faisant référence à son ID.

Pour supprimer en toute sécurité toutes les images qui sont réellement en suspens, vous pouvez utiliser la commande docker image prune:

$ docker image prune

WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y

Deleted Images:
deleted: sha256:85b412789704c17e9c5e7edc97b2f64c748bbdae7eaa44d3fe2cc21a87acad3d

Total reclaimed space: 7.05MB

Nous allons à nouveau lister nos images pour voir le résultat de notre travail :

$ docker image ls
REPOSITORY       TAG       IMAGE ID       CREATED              SIZE
my_image         latest    2cbc27836df4   70 seconds ago       7.05MB
demo             latest    26d80cd96d69   15 months ago        28.5MB

Après le processus d’élagage, l’image sans nom ni étiquette a disparu.

Retirer une image spécifique par son nom

Vous pouvez cibler une image à supprimer en faisant référence à son nom :

$ docker image rm <image_name>

Remarque : Vous ne pouvez pas facilement retirer les images encore en cours d’utilisation. Vous devez arrêter ou supprimer les conteneurs en cours d’exécution qui utilisent les images. Bien que cela ne soit généralement pas recommandé, vous pouvez forcer la suppression d’une image active à l’aide de l’indicateur -f:

$ docker image rm <image_name> -f

Utilisation de l’abréviation rmi pour la suppression des images

L’interface CLI de Docker dispose d’une approche abrégée pour retirer les images dans l’alias rmi. Son utilisation pour supprimer une image par son nom ressemble à ceci :

$ docker rmi demo
Untagged: demo:latest
Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4

Nous utiliserons rmi pour les exemples suivants de suppression d’images.

Retirer toutes les images non étiquetées

Les images non marquées occupent toujours un espace disque précieux, ce qui ralentit de plus en plus votre système au fil du temps.

Pour éliminer toutes les images non marquées dans Docker, utilisez la commande docker rmi avec un filtre. Vous pouvez fournir des filtres basés sur des critères spécifiques en utilisant l’option -f (à ne pas confondre avec l’indicateur -f disponible pour image rm pour forcer une action).

Le filtre dangling=true est utilisé pour identifier les images non étiquetées :

$ docker rmi $(docker images -f "dangling=true" -q)

L’option -q de la commande ci-dessus affiche les ID de toutes les images non marquées. Tous ces ID sont ensuite passés comme arguments à docker rmi pour les supprimer.

Ce filtre utilise le mot-clé « dangling », mais comme indiqué ci-dessus, certaines images sans balises peuvent en fait être actives. Vous serez averti si une image sélectionnée par ce filtre n’est pas vraiment « dangling ».

Retirer une image spécifique par ID

Vous pouvez utiliser la commande docker rmi pour supprimer une image spécifique en faisant référence à son ID :

$ docker rmi <image_id>

Retirer une image spécifique par nom et étiquette

Vous pouvez supprimer une image spécifique avec son nom et son étiquette en utilisant la commande docker rmi.

Par exemple, si vous avez plusieurs images avec le même nom mais des étiquettes différentes, vous pouvez supprimer une image particulière en utilisant ce format :

$ docker rmi <image_name>:<tag>

Cette méthode est pratique lorsque vous souhaitez supprimer une version spécifique d’une image au lieu de supprimer toutes les images liées à un dépôt.

Retirer toutes les images avec la dernière étiquette

Dans Docker, la balise « latest » fait référence à la version la plus récente d’une image Docker particulière. La balise latest est souvent utilisée comme balise par défaut pour les images Docker. Elle est automatiquement attribuée à la version la plus récente d’une image, sauf si une autre balise est spécifiée explicitement.

Docker fournit une commande pour supprimer toutes les images avec l’étiquette « latest » :

$ docker rmi $(docker images | grep "latest" | awk '{print $3}')

La commande ci-dessus est divisée en 2 parties. D’abord, elle obtient la liste des ID d’images, puis elle transmet cette liste comme argument à la commande docker rmi.

Retirer des images d’un dépôt distant

Pour supprimer une image d’un dépôt distant, tel que Docker Hub, vous devez d’abord vous connecter au compte à l’aide du Docker CLI.

Une fois que vous êtes connecté, il vous suffit d’utiliser la commande docker rmi pour supprimer l’image. La commande docker rmi peut supprimer les images locales et distantes :

docker rmi my_repo/my_image_tag

Notamment, vous ne pouvez supprimer que les images qui ont été poussées vers le dépôt. De même, vous ne pouvez pas supprimer les images utilisées par les conteneurs en cours d’exécution.

Retirer plusieurs images d’un dépôt distant

Pour supprimer plusieurs images d’un référentiel distant, vous pouvez utiliser la commande docker rmi suivie des ID ou des étiquettes de l’image. Par exemple :

docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3

Cette commande supprimera les trois images portant les étiquettes image_tag_1, image_tag_2 et image_tag_3 du référentiel my_repo.

Comment retirer les volumes Docker

Les volumes Docker peuvent occuper beaucoup d’espace disque, surtout s’ils contiennent de grandes quantités de données ou plusieurs sauvegardes. En supprimant les volumes qui ne sont plus nécessaires, vous réduisez le risque de violation de données et vous vous assurez que les données sensibles ne sont pas accessibles aux utilisateurs non autorisés. La suppression régulière des volumes permet également de maintenir l’environnement Docker à jour et d’éviter les problèmes causés par des données périmées.

Ces commandes détruisent définitivement toutes les données stockées dans un volume, utilisez-les donc avec prudence.

Retirer tous les volumes inutilisés

Dans Docker, la suppression des volumes inutilisés est aussi essentielle que la suppression des images ou des conteneurs.

Pour libérer de l’espace disque, vous pouvez utiliser la commande docker volume prune.

Retirer un volume spécifique par nom

La suppression d’un volume spécifique dans Docker est utile pour supprimer les volumes inutilisés. Voici la commande pour supprimer un volume :

docker volume rm my_volume_name

Avec la commande ci-dessus, le volume my_volume_name sera supprimé. Docker produit une erreur si vous essayez de supprimer un volume utilisé. Vous pouvez vérifier les volumes disponibles à l’aide de la commande docker volume ls.

Comment retirer des conteneurs Docker

À mesure que vous travaillez davantage avec Docker, vous pouvez accumuler de nombreux conteneurs inutilisés qui occupent les ressources du disque. Si vous ne les supprimez pas, ils peuvent s’accumuler au fil du temps et occuper les précieuses ressources du disque, ralentissant votre système et vous mettant potentiellement en danger.

Retirer tous les conteneurs arrêtés

La commande docker container prune permet de supprimer tous les conteneurs arrêtés dans Docker. Ici, la commande crée une liste de tous les conteneurs arrêtés qui seront supprimés et demande une confirmation avant de procéder. Cela permet de récupérer de l’espace disque et de maintenir un environnement Docker propre et organisé tout en vous permettant de vérifier que vous ne perdez rien d’important :

$ docker container prune

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

Deleted Containers:
4df4c47c4df4
d35bcec20bce

Notez que seuls les conteneurs arrêtés peuvent être supprimés avec cette commande. Si vous devez supprimer des conteneurs en cours d’exécution, vous devrez d’abord les arrêter ou utiliser une autre commande.

Retirer un conteneur spécifique par ID

Dans Docker, vous pouvez supprimer un conteneur spécifique par ID en utilisant l’adresse docker rm command avec l’ID du conteneur. Tout d’abord, obtenez tous les ID de conteneur à l’aide de la commande docker ps command:

$ docker ps -a -q
1ce3cdeb4035
06b79541e25c
fa98f1804e3e

$ docker rm 1ce3cdeb4035

La commande ci-dessus ne fonctionne que si le conteneur est dans un état arrêté. Si le conteneur est en cours d’exécution, vous devez le supprimer de force en utilisant l’indicateur -f :

$ docker rm -f 1ce3cdeb4035

Retirer un conteneur spécifique par son nom

Docker fournit une commande polyvalente docker rm pour supprimer les conteneurs par nom et par ID.

Par exemple, si vous avez un conteneur nommé web_server, vous pouvez le supprimer à l’aide de la commande suivante :

$ docker rm web_server

Tout d’abord, il est important d’arrêter le conteneur. Docker fournit la commande docker stop pour arrêter un conteneur spécifique.

Retirer tous les conteneurs en cours d’exécution

Pour supprimer tous les conteneurs en cours d’exécution, vous pouvez utiliser la commande docker rm:

$ docker rm $(docker ps -q)

L’utilisation de docker ps -q liste les ID des conteneurs en cours d’exécution. Ensuite, les ID sont transmis à la commande docker rm, qui supprime tous les conteneurs.

Notez que cette commande ne supprime que les conteneurs en cours d’exécution. Si vous souhaitez supprimer tous les conteneurs, y compris ceux qui sont arrêtés, vous pouvez utiliser la commande suivante à la place :

$ docker rm $(docker ps -a -q)

Résumé

Cet article vous a expliqué comment retirer des images, des volumes et des conteneurs Docker. Vous avez appris diverses méthodes pour maintenir un système propre et organisé. Il couvrait les commandes permettant de supprimer toutes les images inutilisées, non marquées ou spécifiques par ID ou par nom. Vous avez également appris les commandes permettant de supprimer tous les conteneurs arrêtés ou un conteneur spécifique par ID ou par nom.

La suppression des images, volumes et conteneurs Docker est un processus simple qui peut vous aider à gérer les composants inutilisés, à récupérer un espace disque précieux et souvent à améliorer les performances du système.

C’est cette simplicité qui attire les développeurs vers Docker, et il n’y a pas de moyen plus simple de déployer une application développée dans Docker qu’avec la plateforme d’hébergement d’applications de Kinsta. Vous pouvez l’essayer gratuitement dès maintenant.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.