Wie man den docker image prune-Befehl verwendet, um nicht verwendete Images zu entfernen

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie effektiv den Festplattenspeicher verwalten können, indem Sie nicht verwendete Docker-Images mit dem Befehl docker image prune entfernen. Wir beginnen damit, den Zweck dieses Befehls und die verschiedenen Arten von nicht verwendeten Images zu verstehen, auf die er abzielt, insbesondere "dangling images" (verwaiste Images) und alle nicht verwendeten Images.

Durch praktische Übungen üben Sie zunächst das Entfernen von "dangling images" und erweitern dies dann, um alle nicht verwendeten Images zu entfernen. Darüber hinaus werden Sie untersuchen, wie Sie Filteroptionen mit docker image prune verwenden können, um Images selektiv basierend auf Kriterien wie Erstellungszeit und Labels zu entfernen. Dies gibt Ihnen eine feingliedrige Kontrolle über Ihren Image-Aufräumprozess.


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{{"Wie man den docker image prune-Befehl verwendet, um nicht verwendete Images zu entfernen"}} docker/rmi -.-> lab-555158{{"Wie man den docker image prune-Befehl verwendet, um nicht verwendete Images zu entfernen"}} docker/images -.-> lab-555158{{"Wie man den docker image prune-Befehl verwendet, um nicht verwendete Images zu entfernen"}} docker/prune -.-> lab-555158{{"Wie man den docker image prune-Befehl verwendet, um nicht verwendete Images zu entfernen"}} docker/build -.-> lab-555158{{"Wie man den docker image prune-Befehl verwendet, um nicht verwendete Images zu entfernen"}} end

Verständnis des Zwecks von docker image prune

In diesem Schritt werden wir den Zweck des Befehls docker image prune verstehen. Wenn Sie mit Docker arbeiten, werden Sie unweigerlich nicht verwendete Images auf Ihrem System ansammeln. Diese Images können einen beträchtlichen Teil des Festplattenspeichers beanspruchen. Der Befehl docker image prune wird verwendet, um diese nicht verwendeten Images zu entfernen und so Speicherplatz auf der Festplatte freizugeben.

Es gibt zwei Haupttypen von nicht verwendeten Images, auf die docker image prune abzielt:

  1. Dangling images (verwaiste Images): Dies sind Images, die nicht getaggt sind und von keinem Container referenziert werden. Sie sind im Wesentlichen Zwischenschichten, die nicht mehr benötigt werden.
  2. Alle nicht verwendeten Images: Dies umfasst sowohl "dangling images" als auch Images, die von keinem Container referenziert werden, auch wenn sie einen Tag haben.

Lassen Sie uns beginnen, indem wir einige "dangling images" erstellen, um zu sehen, wie docker image prune funktioniert. Wir werden einige verschiedene Versionen des ubuntu-Images herunterladen und dann ein neues Image auf der Grundlage einer dieser Versionen erstellen. Dieser Prozess hinterlässt oft "dangling images".

Zuerst laden Sie die Images ubuntu:latest und ubuntu:18.04 herunter.

docker pull ubuntu:latest
docker pull ubuntu:18.04

Sie sollten eine Ausgabe sehen, die anzeigt, dass die Images heruntergeladen werden.

Jetzt erstellen wir ein einfaches Image auf der Grundlage von ubuntu:latest. Erstellen Sie eine Datei namens Dockerfile in Ihrem ~/project-Verzeichnis mit folgendem Inhalt:

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

Diese Dockerfile startet einfach mit dem ubuntu:latest-Image und fügt eine Datei namens hello.txt in das /app-Verzeichnis hinzu.

Jetzt erstellen Sie das Image mit dem Befehl docker build. Wir werden dieses Image nicht taggen, was dazu beiträgt, ein "dangling image" zu erstellen.

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

Sie sollten eine Ausgabe sehen, die den Build-Prozess anzeigt. Nachdem der Build abgeschlossen ist, lassen Sie uns alle Images, einschließlich der Zwischenbilder, auflisten, um zu sehen, ob wir "dangling images" haben.

docker images -a

Suchen Sie nach Images mit <none> in den Spalten REPOSITORY und TAG. Dies sind "dangling images".

Der Befehl docker image prune ist standardmäßig darauf ausgelegt, diese "dangling images" zu entfernen. Im nächsten Schritt werden wir diesen Befehl verwenden, um die "dangling images" zu bereinigen, die wir gerade erstellt haben.

Entfernen von "dangling images" mit docker image prune

Im vorherigen Schritt haben wir einige "dangling images" erstellt, indem wir ein Image ohne spezifischen Tag erstellt haben. In diesem Schritt werden wir den Befehl docker image prune verwenden, um diese "dangling images" zu entfernen.

Standardmäßig entfernt docker image prune nur "dangling images". Dies ist die sicherste Methode, um nicht verwendete Image-Schichten aufzuräumen, ohne versehentlich Images zu entfernen, die Sie möglicherweise noch benötigen, auch wenn sie derzeit nicht mit einem laufenden Container verknüpft sind.

Um "dangling images" zu entfernen, führen Sie einfach den Befehl docker image prune aus:

docker image prune

Wenn Sie diesen Befehl ausführen, zeigt Docker Ihnen eine Liste der "dangling images" an, die es entfernen wird, und fordert Sie zur Bestätigung auf.

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

Geben Sie y ein und drücken Sie die Eingabetaste, um mit der Entfernung fortzufahren.

Nachdem der Befehl abgeschlossen ist, wird er den gesamten wiedergewonnenen Speicherplatz melden.

Jetzt lassen Sie uns erneut alle Images, einschließlich der Zwischenbilder, auflisten, um zu bestätigen, dass die "dangling images" entfernt wurden.

docker images -a

Sie sollten keine Images mehr sehen, die <none> in den Spalten REPOSITORY und TAG haben, die vor dem Ausführen von docker image prune vorhanden waren. Die Images ubuntu:latest, ubuntu:18.04 und my-ubuntu-app sollten weiterhin vorhanden sein, da sie keine "dangling images" sind.

Dies zeigt die grundlegende Verwendung von docker image prune zum Entfernen von "dangling images". Dies ist eine gute Praxis, die Sie regelmäßig ausführen sollten, um Speicherplatz auf Ihrem Docker-Host freizugeben.

Entfernen aller nicht verwendeten Images mit docker image prune -a

Im vorherigen Schritt haben wir gelernt, wie man "dangling images" mit docker image prune entfernt. Obwohl das Entfernen von "dangling images" hilfreich ist, können auf Ihrem System möglicherweise andere Images vorhanden sein, die derzeit von keinem Container verwendet werden, aber keine "dangling images" sind (d. h., sie haben einen Tag). Um auch diese Images zu entfernen, können Sie die -a- (oder --all-) Option mit docker image prune verwenden.

Der Befehl docker image prune -a entfernt alle nicht verwendeten Images, nicht nur die "dangling images". Dies ist eine aggressivere Bereinigung und sollte mit Vorsicht angewendet werden, da es alle Images entfernt, die derzeit nicht mit einem laufenden Container verknüpft sind.

Lassen Sie uns sehen, wie dies funktioniert. Zuerst lassen Sie uns die Images auflisten, die wir derzeit haben.

docker images

Sie sollten ubuntu:latest, ubuntu:18.04 und my-ubuntu-app sehen. Diese Images werden derzeit von keinem laufenden Container verwendet, aber sie sind keine "dangling images", weil sie Tags haben.

Jetzt führen Sie den Befehl docker image prune -a aus:

docker image prune -a

Ähnlich wie im vorherigen Schritt zeigt Docker Ihnen eine Liste der Images an, die es entfernen wird, und fordert Sie zur Bestätigung auf.

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

Geben Sie y ein und drücken Sie die Eingabetaste, um fortzufahren.

Nachdem der Befehl abgeschlossen ist, wird er den gesamten wiedergewonnenen Speicherplatz melden.

Jetzt listen Sie die Images erneut auf, um zu sehen, welche übrig bleiben.

docker images

Sie sollten feststellen, dass alle Images, die nicht mit einem laufenden Container verknüpft waren, entfernt wurden. Wenn Sie laufende Container hatten, würden die von diesen Containern verwendeten Images nicht entfernt werden.

Die Verwendung von docker image prune -a ist eine leistungsstarke Methode, um einen beträchtlichen Teil des Festplattenspeichers freizugeben, aber denken Sie daran, dass es alle derzeit nicht verwendeten Images entfernt.

Filtern von Images zur Entfernung basierend auf der Erstellungszeit

Neben dem Entfernen aller nicht verwendeten Images ermöglicht es Ihnen docker image prune, zu filtern, welche Images für die Entfernung in Betracht gezogen werden, basierend auf verschiedenen Kriterien. Ein nützlicher Filter basiert auf der Erstellungszeit des Images. Dies ermöglicht es Ihnen, Images zu entfernen, die vor einem bestimmten Zeitpunkt erstellt wurden.

Die --filter-Option wird verwendet, um Filter anzuwenden. Um nach der Erstellungszeit zu filtern, verwenden Sie den until-Filter. Der until-Filter nimmt einen Zeitstempel oder eine Dauer als Wert. Images, die nach dem angegebenen Zeitpunkt erstellt wurden, werden behalten, während diejenigen, die vor oder zum angegebenen Zeitpunkt erstellt wurden, für die Entfernung in Betracht gezogen werden.

Zuerst laden wir einige Images mit unterschiedlicher Erstellungszeit herunter. Wir laden alpine:latest und centos:latest herunter.

docker pull alpine:latest
docker pull centos:latest

Jetzt lassen wir uns die Images auflisten und beobachten ihre Erstellungszeiten.

docker images

Beachten Sie die Spalte CREATED für jedes Image.

Um die Filterung nach Zeit zu demonstrieren, benötigen wir einen Referenzzeitpunkt. Nehmen wir an, wir möchten Images entfernen, die vor mehr als 5 Minuten erstellt wurden. Wir können den until-Filter mit einer Dauer wie 5m angeben.

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

Dieser Befehl wird alle nicht verwendeten Images in Betracht ziehen, die vor mehr als 5 Minuten erstellt wurden, zu entfernen. Docker wird erneut um Bestätigung bitten, bevor es fortfährt.

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

Geben Sie y ein und drücken Sie die Eingabetaste, um zu bestätigen.

Nach der Entfernung lassen wir uns die Images erneut auflisten:

docker images

Je nachdem, wie lange her Sie die Images heruntergeladen und den Entfernungsbefehl ausgeführt haben, könnten einige Images entfernt worden sein. Images, die in den letzten 5 Minuten erstellt wurden, sollten verbleiben.

Sie können auch einen spezifischen Zeitstempel in verschiedenen Formaten angeben. Beispielsweise könnten Sie, um Images zu entfernen, die vor einem bestimmten Datum und einer bestimmten Uhrzeit erstellt wurden, ein Format wie "2023-10-27T10:00:00" verwenden.

Das Filtern nach Erstellungszeit ist nützlich für die Automatisierung von Bereinigungstasks, um sicherzustellen, dass nur relativ neue Images auf Ihrem System behalten werden.

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.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man den Befehl docker image prune verwendet, um Speicherplatz zu verwalten, indem nicht verwendete Docker-Images entfernt werden. Wir haben zunächst den Zweck des Befehls und die Arten von nicht verwendeten Images verstanden, auf die er abzielt: "dangling images" (ungetaggte und nicht referenzierte) und alle nicht verwendeten Images (einschließlich getaggter, aber nicht referenzierter Images). Anschließend haben wir geübt, "dangling images" zu identifizieren und zu entfernen, indem wir den grundlegenden docker image prune-Befehl verwendet haben.

Wir haben die Funktionen von docker image prune weiter erforscht, indem wir gelernt haben, wie man alle nicht verwendeten Images mit der -a-Option entfernt. Schließlich haben wir entdeckt, wie man Filteroptionen verwendet, um Images selektiv basierend auf Kriterien wie Erstellungszeit und Labels zu entfernen, was eine feinere Kontrolle über die Image-Bereinigung ermöglicht.