Filtern von Images zur Entfernung basierend auf Labels
In diesem letzten Schritt werden wir eine weitere leistungsstarke Filteroption für docker image prune
erkunden: das Filtern basierend auf Labels. Labels sind Schlüssel-Wert-Paare, die Sie an Docker-Objekte, einschließlich Images, anhängen können, um Metadaten hinzuzufügen. Sie können diese Labels dann verwenden, um Ihre Docker-Ressourcen zu filtern und zu verwalten.
Die --filter
-Option mit dem label
-Schlüssel ermöglicht es Ihnen, anzugeben, welche Images aus dem Entfernungsvorgang basierend auf ihren Labels ein- oder ausgeschlossen werden sollen.
Zuerst erstellen wir ein paar Images mit unterschiedlichen Labels. Wir verwenden eine einfache Dockerfile und erstellen zwei Images mit unterschiedlichen Labels.
Erstellen Sie eine Datei namens Dockerfile.labeled
in Ihrem ~/project
-Verzeichnis mit folgendem Inhalt:
FROM alpine:latest
LABEL environment="development"
LABEL version="1.0"
RUN echo "This is a labeled image" >/app/info.txt
Jetzt erstellen wir zwei Images aus dieser Dockerfile und wenden während des Erstellungsprozesses die --label
-Option an, um unterschiedliche Labels hinzuzufügen.
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
Wir haben jetzt zwei Images erstellt, my-labeled-app:dev
und my-labeled-app:prod
, beide basierend auf derselben Dockerfile, aber mit unterschiedlichen stage
-Labels.
Lassen Sie uns die Images auflisten und ihre Labels untersuchen.
docker images --filter reference="my-labeled-app*" --format "{{.Repository}}:{{.Tag}} {{.Labels}}"
Sie sollten eine Ausgabe sehen, die die Images und ihre zugehörigen Labels anzeigt.
Jetzt verwenden wir docker image prune
, um Images basierend auf ihren Labels zu entfernen. Nehmen wir an, wir möchten alle nicht verwendeten Images entfernen, die das Label stage=dev
haben. Wir können die --filter
-Option mit label=stage=dev
verwenden. Wir verwenden auch die -a
-Option, um alle nicht verwendeten Images in Betracht zu ziehen, nicht nur die "dangling images".
docker image prune -a --filter "label=stage=dev"
Docker zeigt Ihnen die Images an, die dem Filter entsprechen und entfernt werden. Bestätigen Sie, indem Sie y
eingeben.
Nach der Entfernung lassen wir uns die Images erneut auflisten:
docker images --filter reference="my-labeled-app*" --format "{{.Repository}}:{{.Tag}} {{.Labels}}"
Sie sollten feststellen, dass das my-labeled-app:dev
-Image entfernt wurde, während my-labeled-app:prod
verbleibt, da es nicht dem Filter entsprach.
Sie können auch die Syntax label!=key=value
verwenden, um Images zu entfernen, die nicht ein bestimmtes Label oder Labelwert haben. Beispielsweise können Sie alle nicht verwendeten Images entfernen, die nicht das Label stage=prod
haben:
docker image prune -a --filter "label!=stage=prod"
Dieser Befehl würde my-labeled-app:dev
(falls es noch existierte) und alle anderen nicht verwendeten Images entfernen, die nicht das stage=prod
-Label haben.
Das Filtern nach Labels bietet eine flexible Möglichkeit, Ihre Images basierend auf Ihren eigenen definierten Metadaten zu verwalten und aufzuräumen.