Wie man den docker system prune-Befehl verwendet, um Festplattenspeicherplatz zurückzugewinnen

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 den Befehl docker system prune effektiv nutzen können, um Festplattenspeicherplatz zurückzugewinnen, indem Sie ungenutzte Docker-Daten entfernen. Wir beginnen damit, zu verstehen, was docker system prune standardmäßig entfernt. Dies umfasst beendete Container, lose Images (dangling images) und lose Netzwerke (dangling networks), aber keine Volumes.

Anschließend werden Sie untersuchen, wie Sie ungenutzte Docker-Daten bereinigen können, wobei Sie speziell Volumes ausnehmen. Danach lernen Sie, wie Sie alle ungenutzten Daten, einschließlich anonymen Volumes, entfernen. Schließlich entdecken Sie, wie Sie Filter mit docker system prune verwenden können, um eine feinere Kontrolle darüber zu erlangen, welche Daten entfernt werden.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/SystemManagementGroup -.-> docker/system("Manage Docker") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") subgraph Lab Skills docker/ps -.-> lab-555250{{"Wie man den docker system prune-Befehl verwendet, um Festplattenspeicherplatz zurückzugewinnen"}} docker/images -.-> lab-555250{{"Wie man den docker system prune-Befehl verwendet, um Festplattenspeicherplatz zurückzugewinnen"}} docker/volume -.-> lab-555250{{"Wie man den docker system prune-Befehl verwendet, um Festplattenspeicherplatz zurückzugewinnen"}} docker/system -.-> lab-555250{{"Wie man den docker system prune-Befehl verwendet, um Festplattenspeicherplatz zurückzugewinnen"}} docker/prune -.-> lab-555250{{"Wie man den docker system prune-Befehl verwendet, um Festplattenspeicherplatz zurückzugewinnen"}} end

Verständnis, was docker system prune standardmäßig entfernt

In diesem Schritt werden wir uns mit dem Befehl docker system prune befassen und verstehen, welche Arten von ungenutzten Docker-Daten er standardmäßig entfernt. Dieser Befehl ist nützlich, um Festplattenspeicherplatz zu bereinigen, indem lose oder ungenutzte Objekte entfernt werden.

Zunächst erstellen wir einige ungenutzte Docker-Objekte. Wir werden einen einfachen Container ausführen und ihn dann stoppen. Dies hinterlässt einen beendeten Container und möglicherweise ein lose Image (dangling image), wenn das Image von keinem anderen Container verwendet wird.

Öffnen Sie das Terminal in der LabEx-Umgebung. Das Standardverzeichnis ist ~/project.

Führen Sie einen einfachen hello-world-Container aus:

docker run hello-world

Sie sollten eine Ausgabe sehen, die anzeigt, dass der Docker-Daemon das hello-world-Image abgerufen und den Container ausgeführt hat. Der Container wird unmittelbar nach dem Drucken seiner Nachricht beendet.

Jetzt listen wir alle Container auf, einschließlich der beendeten:

docker ps -a

Sie werden den hello-world-Container mit dem Status "Exited" (Beendet) aufgeführt sehen.

Als Nächstes listen wir die Images auf:

docker images

Sie sollten das hello-world-Image sehen.

Jetzt führen wir den Befehl docker system prune ohne zusätzliche Optionen aus. Dies entfernt lose Images, lose Container und lose Netzwerke (dangling images, dangling containers und dangling networks). Standardmäßig werden keine Volumes entfernt.

docker system prune -f

Wir verwenden die -f-Option, um die Entfernung ohne Bestätigungsaufforderung zu erzwingen.

Nachdem der Befehl ausgeführt wurde, sehen Sie eine Ausgabe, die anzeigt, was entfernt wurde.

Jetzt überprüfen wir die Container erneut:

docker ps -a

Der beendete hello-world-Container sollte verschwunden sein.

Überprüfen Sie die Images erneut:

docker images

Das hello-world-Image kann noch vorhanden sein, wenn es nicht als "dangling" (lose) angesehen wird (z. B. wenn es kürzlich abgerufen wurde). Wenn Sie jedoch andere lose Images hatten, wären diese entfernt worden.

Der wichtigste Punkt hier ist, dass docker system prune standardmäßig beendete Container, lose Images und lose Netzwerke bereinigt. Es entfernt keine Volumes, es sei denn, Sie geben ihm ausdrücklich den Befehl dazu.

Bereinigen von ungenutzten Docker-Daten ohne Entfernung von Volumes

Im vorherigen Schritt haben wir gesehen, dass docker system prune standardmäßig keine Volumes entfernt. Volumes werden verwendet, um von Docker-Containern generierte und verwendete Daten persistent zu speichern. Das versehentliche Entfernen von Volumes kann zu Datenverlust führen.

In diesem Schritt werden wir zeigen, wie docker system prune funktioniert, ohne Volumes zu entfernen. Wir werden ein Volume erstellen, einen Container ausführen, der es verwendet, den Container stoppen und dann das System bereinigen. Wir werden beobachten, dass das Volume nach der Bereinigung weiterhin vorhanden ist.

Zunächst erstellen wir ein benanntes Volume. Benannte Volumes werden explizit von Docker erstellt und verwaltet.

docker volume create myvolume

Als Ausgabe sollten Sie den Namen des erstellten Volumes sehen.

Jetzt führen wir einen einfachen Container aus, der dieses Volume verwendet. Wir verwenden das ubuntu-Image. Wenn Sie es nicht lokal haben, wird Docker es herunterladen.

docker run -d --name mycontainer -v myvolume:/app ubuntu sleep 60

Dieser Befehl führt einen ubuntu-Container im detached-Modus (-d) aus, benennt ihn mycontainer, bindet das myvolume an das Verzeichnis /app innerhalb des Containers und lässt den Container 60 Sekunden lang laufen, indem er den Befehl sleep 60 ausführt.

Überprüfen Sie, ob der Container läuft:

docker ps

Sie sollten mycontainer in der Liste sehen.

Jetzt stoppen wir den Container:

docker stop mycontainer

Der Container wird gestoppt, aber er bleibt im beendeten Zustand existieren.

Verifizieren Sie, dass der Container gestoppt ist:

docker ps -a

Sie sollten mycontainer mit dem Status "Exited" (Beendet) sehen.

Jetzt listen wir die Volumes auf:

docker volume ls

Sie sollten myvolume in der Liste sehen.

Jetzt führen wir erneut docker system prune aus. Denken Sie daran, dass es standardmäßig keine Volumes entfernt.

docker system prune -f

Beobachten Sie die Ausgabe. Sie sollte anzeigen, dass der beendete Container entfernt wurde, aber es sollte nicht erwähnt werden, dass das Volume entfernt wurde.

Verifizieren Sie, dass der Container verschwunden ist:

docker ps -a

mycontainer sollte nicht mehr in der Liste erscheinen.

Schließlich verifizieren Sie, dass das Volume weiterhin existiert:

docker volume ls

Sie sollten immer noch myvolume in der Liste sehen. Dies bestätigt, dass docker system prune standardmäßig Volumes bewahrt.

Bereinigen aller ungenutzten Docker-Daten, einschließlich anonymen Volumes

In den vorherigen Schritten haben wir gelernt, dass docker system prune standardmäßig keine Volumes entfernt. Es gibt jedoch Situationen, in denen Sie alle ungenutzten Docker-Daten entfernen möchten, einschließlich Volumes, die nicht mehr mit einem Container verknüpft sind. Dies ist besonders nützlich für die Bereinigung von anonymen Volumes, die erstellt werden, wenn Sie ein Verzeichnis innerhalb eines Containers mounten, ohne ein Volume explizit zu benennen.

Um alle ungenutzten Docker-Daten, einschließlich Volumes, zu entfernen, können Sie die -a-Option mit docker system prune verwenden. Die -a-Option steht für "all" (alle) und schließt Volumes in den Bereinigungsvorgang ein.

Erstellen wir ein anonymes Volume, indem wir einen Container ausführen und ein Verzeichnis mounten, ohne einen Volumennamen anzugeben.

docker run -d --name anothercontainer -v /data ubuntu sleep 60

Dieser Befehl führt einen ubuntu-Container namens anothercontainer aus und mountet ein anonymes Volume auf das /data-Verzeichnis innerhalb des Containers.

Überprüfen Sie, ob der Container läuft:

docker ps

Sie sollten anothercontainer in der Liste sehen.

Jetzt stoppen wir den Container:

docker stop anothercontainer

Der Container wird stoppen und ein beendeter Container werden.

Verifizieren Sie, dass der Container gestoppt ist:

docker ps -a

Sie sollten anothercontainer mit dem Status "Exited" (Beendet) sehen.

Jetzt listen wir die Volumes auf:

docker volume ls

Sie werden das myvolume aus dem vorherigen Schritt und ein neues Volume mit einem langen, zufällig generierten Namen sehen. Dies ist das anonyme Volume.

Jetzt führen wir docker system prune mit der -a-Option aus, um alle ungenutzten Daten, einschließlich Volumes, zu entfernen.

docker system prune -a -f

Wir verwenden -a, um Volumes einzuschließen, und -f, um die Entfernung ohne Bestätigungsaufforderung zu erzwingen.

Beobachten Sie die Ausgabe genau. Sie sollte anzeigen, dass der beendete Container entfernt wurde, und es sollte auch das entfernte anonyme Volume aufgeführt werden. Das benannte Volume myvolume aus dem vorherigen Schritt sollte ebenfalls entfernt werden, da es von keinem Container mehr verwendet wird.

Verifizieren Sie, dass alle Container entfernt sind:

docker ps -a

Es sollten keine Container in der Liste sein.

Schließlich verifizieren Sie, dass alle Volumes entfernt sind:

docker volume ls

Es sollten keine Volumes in der Liste sein. Dies bestätigt, dass docker system prune -a alle ungenutzten Docker-Daten entfernt, einschließlich sowohl benannter als auch anonymer Volumes.

Bereinigen von Docker-Daten mit Filtern

Neben der Entfernung aller ungenutzten Daten ermöglicht es Ihnen docker system prune, Filter zu verwenden, um gezielt Docker-Objekte zu entfernen. Dies gibt Ihnen eine feinere Kontrolle darüber, was bereinigt wird.

Filter können auf verschiedene Objekttypen angewendet werden. Bei docker system prune können Sie basierend auf Kriterien wie dem Alter der Objekte filtern.

Erstellen wir einige weitere Docker-Objekte, um die Filterung zu demonstrieren. Wir werden ein paar Container ausführen und dann stoppen.

Führen Sie den ersten Container aus:

docker run -d --name oldcontainer ubuntu sleep 10

Dieser Container wird 10 Sekunden lang laufen und dann beenden.

Führen Sie den zweiten Container aus:

docker run -d --name newcontainer ubuntu sleep 20

Dieser Container wird 20 Sekunden lang laufen und dann beenden.

Warten Sie, bis beide Container beendet sind. Sie können ihren Status mit docker ps -a überprüfen.

docker ps -a

Sie sollten sowohl oldcontainer als auch newcontainer mit dem Status "Exited" (Beendet) sehen.

Jetzt verwenden wir einen Filter, um nur Objekte zu entfernen, die älter als eine bestimmte Zeit sind. Wir können den until-Filter mit einer Dauer verwenden. Beispielsweise können Sie until=5s verwenden, um Objekte zu entfernen, die älter als 5 Sekunden sind.

Versuchen wir, Objekte zu bereinigen, die älter als 15 Sekunden sind. Dies sollte oldcontainer entfernen, aber newcontainer behalten (vorausgesetzt, Sie haben lange genug gewartet, dass oldcontainer beendet wurde, aber nicht newcontainer).

docker system prune -f --filter "until=15s"

Beobachten Sie die Ausgabe. Sie sollte anzeigen, dass oldcontainer entfernt wurde, aber newcontainer sollte verbleiben.

Verifizieren Sie die Container:

docker ps -a

Sie sollten newcontainer in der Liste sehen, aber oldcontainer sollte verschwunden sein.

Jetzt bereinigen wir erneut, diesmal entfernen wir Objekte, die älter als 30 Sekunden sind. Dies sollte auch newcontainer entfernen.

docker system prune -f --filter "until=30s"

Beobachten Sie die Ausgabe. Sie sollte anzeigen, dass newcontainer entfernt wurde.

Verifizieren Sie die Container erneut:

docker ps -a

Es sollten keine Container in der Liste sein.

Filter bieten eine leistungsstarke Möglichkeit, den Bereinigungsvorgang anzupassen. Sie können je nach Typ des zu bereinigenden Objekts (Container, Images, Volumes, Netzwerke) verschiedene Filter-Schlüssel verwenden. Der until-Filter wird häufig verwendet, um Objekte zu bereinigen, die für eine bestimmte Zeitspanne nicht verwendet wurden.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man den Befehl docker system prune verwendet, um Festplattenspeicherplatz zurückzugewinnen, indem ungenutzte Docker-Daten entfernt werden. Wir haben zunächst das Standardverhalten von docker system prune verstanden, das beendete Container, lose Images (dangling images) und lose Netzwerke (dangling networks) entfernt. Wir haben dies demonstriert, indem wir einen beendeten Container erstellt und dann entfernt haben.

Anschließend haben wir untersucht, wie man docker system prune mit Optionen verwendet, um zu steuern, welche Daten entfernt werden. Wir haben gelernt, wie man ungenutzte Daten entfernt, ohne Volumes zu löschen, und wie man anonyme Volumes in den Bereinigungsvorgang einbezieht. Schließlich haben wir kurz darauf eingegangen, wie man Filter verwendet, um Docker-Daten gezielt basierend auf bestimmten Kriterien zu bereinigen. Dieses Lab hat praktische Erfahrungen in der Verwendung von docker system prune zur effektiven Verwaltung des Festplattenspeicherplatzes in einer Docker-Umgebung vermittelt.