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.