Comment utiliser la commande docker image prune pour supprimer les images inutilisées

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à gérer efficacement l'espace disque en supprimant les images Docker inutilisées à l'aide de la commande docker image prune. Nous commencerons par comprendre le but de cette commande et les différents types d'images inutilisées qu'elle cible, en particulier les images orphelines (dangling images) et toutes les images inutilisées.

Grâce à des exercices pratiques, vous allez pratiquer la suppression des images orphelines, puis étendre cette opération pour supprimer toutes les images inutilisées. En outre, vous explorerez comment utiliser les options de filtrage avec la commande docker image prune pour supprimer sélectivement les images en fonction de critères tels que la date de création et les étiquettes (labels), vous offrant ainsi un contrôle précis sur le processus de nettoyage de vos images.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/rmi("Remove Image") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/pull -.-> lab-555158{{"Comment utiliser la commande docker image prune pour supprimer les images inutilisées"}} docker/rmi -.-> lab-555158{{"Comment utiliser la commande docker image prune pour supprimer les images inutilisées"}} docker/images -.-> lab-555158{{"Comment utiliser la commande docker image prune pour supprimer les images inutilisées"}} docker/prune -.-> lab-555158{{"Comment utiliser la commande docker image prune pour supprimer les images inutilisées"}} docker/build -.-> lab-555158{{"Comment utiliser la commande docker image prune pour supprimer les images inutilisées"}} end

Comprendre le but de docker image prune

Dans cette étape, nous allons comprendre le but de la commande docker image prune. Lorsque vous travaillez avec Docker, vous accumulerez inévitablement des images inutilisées sur votre système. Ces images peuvent occuper un espace disque important. La commande docker image prune est utilisée pour supprimer ces images inutilisées, vous aidant ainsi à libérer de l'espace disque.

Il existe deux principaux types d'images inutilisées que docker image prune cible :

  1. Images orphelines (Dangling images) : Ce sont des images qui ne sont pas étiquetées (tagged) et qui ne sont référencées par aucun conteneur. Elles sont essentiellement des couches intermédiaires qui ne sont plus nécessaires.
  2. Toutes les images inutilisées : Cela inclut les images orphelines ainsi que les images qui ne sont pas référencées par aucun conteneur, même si elles ont une étiquette (tag).

Commençons par créer quelques images orphelines pour voir comment docker image prune fonctionne. Nous allons télécharger (pull) quelques versions différentes de l'image ubuntu, puis construire une nouvelle image basée sur l'une d'elles. Ce processus laisse souvent des images orphelines.

Tout d'abord, téléchargez les images ubuntu:latest et ubuntu:18.04.

docker pull ubuntu:latest
docker pull ubuntu:18.04

Vous devriez voir un affichage indiquant que les images sont en cours de téléchargement.

Maintenant, construisons une image simple basée sur ubuntu:latest. Créez un fichier nommé Dockerfile dans votre répertoire ~/project avec le contenu suivant :

FROM ubuntu:latest
RUN echo "Hello, Docker!" >/app/hello.txt

Ce Dockerfile commence simplement par l'image ubuntu:latest et ajoute un fichier nommé hello.txt au répertoire /app.

Maintenant, construisez l'image en utilisant la commande docker build. Nous n'allons pas étiqueter cette image, ce qui contribuera à créer une image orpheline.

docker build -t my-ubuntu-app ~/project

Vous devriez voir un affichage indiquant le processus de construction. Une fois la construction terminée, listons toutes les images, y compris les images intermédiaires, pour voir si nous avons des images orphelines.

docker images -a

Recherchez les images avec <none> dans les colonnes REPOSITORY et TAG. Ce sont des images orphelines.

La commande docker image prune est conçue pour supprimer ces images orphelines par défaut. Dans l'étape suivante, nous utiliserons cette commande pour nettoyer les images orphelines que nous venons de créer.

Supprimer les images orphelines (dangling images) avec docker image prune

Dans l'étape précédente, nous avons créé quelques images orphelines en construisant une image sans étiquette (tag) spécifique. Dans cette étape, nous allons utiliser la commande docker image prune pour supprimer ces images orphelines.

Par défaut, docker image prune ne supprime que les images orphelines. C'est la manière la plus sûre de nettoyer les couches d'images inutilisées sans supprimer accidentellement des images que vous pourriez encore avoir besoin, même si elles ne sont pas actuellement associées à un conteneur en cours d'exécution.

Pour supprimer les images orphelines, il suffit d'exécuter la commande docker image prune :

docker image prune

Lorsque vous exécutez cette commande, Docker vous montrera une liste des images orphelines qu'il va supprimer et vous demandera confirmation.

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

Tapez y puis appuyez sur Entrée pour procéder à la suppression.

Une fois la commande terminée, elle indiquera la quantité totale d'espace récupéré.

Maintenant, listons à nouveau toutes les images, y compris les images intermédiaires, pour confirmer que les images orphelines ont été supprimées.

docker images -a

Vous ne devriez plus voir d'images avec <none> dans les colonnes REPOSITORY et TAG qui étaient présentes avant d'exécuter docker image prune. Les images ubuntu:latest, ubuntu:18.04 et my-ubuntu-app devraient toujours être présentes, car elles ne sont pas orphelines.

Cela démontre l'utilisation de base de docker image prune pour supprimer les images orphelines. C'est une bonne pratique à effectuer régulièrement pour libérer de l'espace disque sur votre hôte Docker.

Supprimer toutes les images inutilisées avec docker image prune -a

Dans l'étape précédente, nous avons appris à supprimer les images orphelines (dangling images) en utilisant docker image prune. Bien que la suppression des images orphelines soit utile, il peut y avoir d'autres images sur votre système qui ne sont pas actuellement utilisées par aucun conteneur mais qui ne sont pas orphelines (c'est-à-dire qu'elles ont une étiquette - tag). Pour supprimer également ces images, vous pouvez utiliser le drapeau -a (ou --all) avec docker image prune.

La commande docker image prune -a supprime toutes les images inutilisées, pas seulement les images orphelines. C'est un nettoyage plus radical et doit être utilisé avec prudence, car elle supprimera toute image qui n'est pas actuellement associée à un conteneur en cours d'exécution.

Voyons comment cela fonctionne. Tout d'abord, listons les images que nous avons actuellement.

docker images

Vous devriez voir ubuntu:latest, ubuntu:18.04 et my-ubuntu-app. Ces images ne sont pas actuellement utilisées par aucun conteneur en cours d'exécution, mais elles ne sont pas orphelines car elles ont des étiquettes.

Maintenant, exécutez la commande docker image prune -a :

docker image prune -a

De même que dans l'étape précédente, Docker vous montrera une liste des images qu'il va supprimer et vous demandera confirmation.

WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N]

Tapez y puis appuyez sur Entrée pour procéder.

Une fois la commande terminée, elle indiquera la quantité totale d'espace récupéré.

Maintenant, listez les images à nouveau pour voir lesquelles restent.

docker images

Vous devriez constater que toutes les images qui n'étaient pas associées à un conteneur en cours d'exécution ont été supprimées. Si vous aviez des conteneurs en cours d'exécution, les images utilisées par ces conteneurs ne seraient pas supprimées.

L'utilisation de docker image prune -a est un moyen puissant de libérer une quantité importante d'espace disque, mais n'oubliez pas qu'elle supprime toutes les images non actuellement utilisées.

Filtrer les images à supprimer en fonction de la date de création

En plus de supprimer toutes les images inutilisées, docker image prune vous permet de filtrer les images à supprimer en fonction de différents critères. Un filtre utile est basé sur la date de création de l'image. Cela vous permet de supprimer les images créées avant un point précis dans le temps.

Le drapeau --filter est utilisé pour appliquer des filtres. Pour filtrer par date de création, vous utilisez le filtre until. Le filtre until prend un horodatage (timestamp) ou une durée comme valeur. Les images créées après le moment spécifié seront conservées, tandis que celles créées avant ou à ce moment seront prises en compte pour la suppression.

Tirons d'abord quelques images avec des dates de création différentes. Nous allons tirer alpine:latest et centos:latest.

docker pull alpine:latest
docker pull centos:latest

Maintenant, listons les images et observons leurs dates de création.

docker images

Notez la colonne CREATED pour chaque image.

Pour démontrer le filtrage par date, nous avons besoin d'un point de référence. Disons que nous voulons supprimer les images créées il y a plus de 5 minutes. Nous pouvons spécifier le filtre until avec une durée comme 5m.

docker image prune -a --filter "until=5m"

Cette commande prendra en compte la suppression de toutes les images inutilisées créées il y a plus de 5 minutes. Docker vous demandera à nouveau confirmation avant de procéder.

WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N]

Tapez y puis appuyez sur Entrée pour confirmer.

Après la suppression, listez les images à nouveau :

docker images

Selon le moment où vous avez tiré les images et exécuté la commande de suppression, certaines images pourraient avoir été supprimées. Les images créées au cours des 5 dernières minutes devraient rester.

Vous pouvez également spécifier un horodatage spécifique dans différents formats. Par exemple, pour supprimer les images créées avant une date et une heure spécifiques, vous pourriez utiliser un format comme "2023-10-27T10:00:00".

Le filtrage par date de création est utile pour automatiser les tâches de nettoyage, en s'assurant que seules les images relativement récentes sont conservées sur votre système.

Filtrer les images à supprimer en fonction des étiquettes (labels)

Dans cette étape finale, nous allons explorer une autre option de filtrage puissante pour docker image prune : le filtrage basé sur les étiquettes (labels). Les étiquettes sont des paires clé-valeur que vous pouvez attacher aux objets Docker, y compris les images, pour ajouter des métadonnées. Vous pouvez ensuite utiliser ces étiquettes pour filtrer et gérer vos ressources Docker.

Le drapeau --filter avec la clé label vous permet de spécifier quelles images inclure ou exclure du processus de suppression en fonction de leurs étiquettes.

Tout d'abord, créons quelques images avec des étiquettes différentes. Nous allons utiliser un simple Dockerfile et construire deux images avec des étiquettes différentes.

Créez un fichier nommé Dockerfile.labeled dans votre répertoire ~/project avec le contenu suivant :

FROM alpine:latest
LABEL environment="development"
LABEL version="1.0"
RUN echo "This is a labeled image" >/app/info.txt

Maintenant, construisons deux images à partir de ce Dockerfile, en appliquant des étiquettes différentes pendant le processus de construction à l'aide du drapeau --label.

docker build -t my-labeled-app:dev --label project=myapp --label stage=dev ~/project -f Dockerfile.labeled
docker build -t my-labeled-app:prod --label project=myapp --label stage=prod ~/project -f Dockerfile.labeled

Nous avons maintenant construit deux images, my-labeled-app:dev et my-labeled-app:prod, toutes deux basées sur le même Dockerfile mais avec des étiquettes stage différentes.

Listons les images et examinons leurs étiquettes.

docker images --filter reference="my-labeled-app*" --format "{{.Repository}}:{{.Tag}} {{.Labels}}"

Vous devriez voir une sortie montrant les images et leurs étiquettes associées.

Maintenant, utilisons docker image prune pour supprimer les images en fonction de leurs étiquettes. Supposons que nous voulions supprimer toutes les images inutilisées qui ont l'étiquette stage=dev. Nous pouvons utiliser le drapeau --filter avec label=stage=dev. Nous allons également utiliser le drapeau -a pour prendre en compte toutes les images inutilisées, pas seulement les images orphelines.

docker image prune -a --filter "label=stage=dev"

Docker vous montrera les images qui correspondent au filtre et qui seront supprimées. Confirmez en tapant y.

Après la suppression, listez les images à nouveau :

docker images --filter reference="my-labeled-app*" --format "{{.Repository}}:{{.Tag}} {{.Labels}}"

Vous devriez constater que l'image my-labeled-app:dev a été supprimée, tandis que my-labeled-app:prod reste car elle ne correspondait pas au filtre.

Vous pouvez également utiliser la syntaxe label!=key=value pour supprimer les images qui n'ont pas une étiquette ou une valeur d'étiquette spécifique. Par exemple, pour supprimer toutes les images inutilisées qui n'ont pas l'étiquette stage=prod :

docker image prune -a --filter "label!=stage=prod"

Cette commande supprimerait my-labeled-app:dev (s'il existait encore) et toutes les autres images inutilisées qui n'ont pas l'étiquette stage=prod.

Le filtrage par étiquettes offre un moyen flexible de gérer et de nettoyer vos images en fonction de vos propres métadonnées définies.

Résumé

Dans ce laboratoire (lab), nous avons appris à utiliser la commande docker image prune pour gérer l'espace disque en supprimant les images Docker inutilisées. Nous avons commencé par comprendre le but de la commande et les types d'images inutilisées qu'elle cible : les images orphelines (sans étiquette (tag) et non référencées) et toutes les images inutilisées (y compris les images étiquetées mais non référencées). Nous avons ensuite pratiqué l'identification et la suppression des images orphelines en utilisant la commande de base docker image prune.

Nous avons ensuite exploré plus en détail les capacités de docker image prune en apprenant à supprimer toutes les images inutilisées en utilisant le drapeau -a. Enfin, nous avons découvert comment utiliser les options de filtrage pour supprimer sélectivement les images en fonction de critères tels que la date de création et les étiquettes (labels), offrant un contrôle plus précis sur le nettoyage des images.