So nutzen Sie den docker volume prune-Befehl, um ungenutzte Volumes 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 Docker-Volumes (Docker-Dateisysteme) effektiv verwalten können, wobei der Schwerpunkt auf dem Befehl docker volume prune liegt. Wir beginnen damit, verschiedene Arten von Volumes zu erstellen und zu untersuchen, einschließlich benannter Volumes und Volumes mit Labels, um ihre Eigenschaften und die Art und Weise zu verstehen, wie Docker sie verwaltet.

Anschließend zeigen wir, wie Volumes mit Containern verwendet werden, indem wir einen Container erstellen, der ein Volume nutzt, und ihn dann wieder entfernen. Dies verdeutlicht die Persistenz der in Volumes gespeicherten Daten. Abschließend führt das Lab Sie durch die Verwendung des Befehls docker volume prune, um nicht verwendete Volumes zu entfernen. Dabei werden die Entfernung von anonymen Volumes, alle nicht verwendeten Volumes (einschließlich benannter Volumes) und die Verwendung von Label-Filtern zur selektiven Bereinigung von Volumes behandelt.


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/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") subgraph Lab Skills docker/run -.-> lab-555261{{"So nutzen Sie den docker volume prune-Befehl, um ungenutzte Volumes zu entfernen"}} docker/ls -.-> lab-555261{{"So nutzen Sie den docker volume prune-Befehl, um ungenutzte Volumes zu entfernen"}} docker/rm -.-> lab-555261{{"So nutzen Sie den docker volume prune-Befehl, um ungenutzte Volumes zu entfernen"}} docker/inspect -.-> lab-555261{{"So nutzen Sie den docker volume prune-Befehl, um ungenutzte Volumes zu entfernen"}} docker/pull -.-> lab-555261{{"So nutzen Sie den docker volume prune-Befehl, um ungenutzte Volumes zu entfernen"}} docker/volume -.-> lab-555261{{"So nutzen Sie den docker volume prune-Befehl, um ungenutzte Volumes zu entfernen"}} docker/prune -.-> lab-555261{{"So nutzen Sie den docker volume prune-Befehl, um ungenutzte Volumes zu entfernen"}} end

Erstellen und Untersuchen von Volumes

In diesem Schritt lernen wir, wie man Docker-Volumes (Docker-Dateisysteme) erstellt und untersucht. Volumes sind die bevorzugte Methode, um Daten zu speichern, die von Docker-Containern erzeugt und verwendet werden. Während Bind-Mounts (Verzeichnismounts) von der Verzeichnisstruktur des Hostsystems abhängen, werden Volumes vollständig von Docker verwaltet.

Zunächst erstellen wir ein benanntes Volume mit dem Befehl docker volume create. Wir nennen dieses Volume myvolume.

docker volume create myvolume

Sie sollten den Namen des Volumes in der Konsole sehen, was die erfolgreiche Erstellung bestätigt.

Nun untersuchen wir das gerade erstellte Volume mit dem Befehl docker volume inspect. Dieser Befehl liefert detaillierte Informationen über das Volume, wie z. B. seinen Namen, den Treiber und den Mountpunkt (Einbindungspunkt) auf dem Hostsystem.

docker volume inspect myvolume

Die Ausgabe ist ein JSON-Array, das Informationen über das Volume enthält. Suchen Sie nach dem Feld "Mountpoint", das den Speicherort auf dem Host anzeigt, an dem die Daten des Volumes gespeichert sind. Docker verwaltet diesen Speicherort, und Sie sollten normalerweise vermeiden, Dateien direkt in diesem Verzeichnis zu ändern.

Als Nächstes erstellen wir ein weiteres Volume, diesmal mit einem Label. Labels sind nützlich, um Docker-Objekte zu organisieren und zu filtern. Wir erstellen ein Volume namens labeled_volume und fügen ein Label app=web hinzu.

docker volume create --label app=web labeled_volume

Wiederum wird der Name des Volumes bei erfolgreicher Erstellung ausgegeben.

Schließlich untersuchen wir das labeled_volume, um das hinzugefügte Label zu sehen.

docker volume inspect labeled_volume

In der JSON-Ausgabe sollten Sie ein Feld "Labels" finden, das das Label app=web enthält.

Erstellen und Entfernen eines Containers mit einem Volume

In diesem Schritt erstellen wir einen Docker-Container und binden das myvolume, das wir im vorherigen Schritt erstellt haben, an ihn an. Dies zeigt, wie Daten auch nach der Entfernung des Containers persistent bleiben können.

Zunächst laden wir das ubuntu-Image herunter, das wir für unseren Container verwenden werden.

docker pull ubuntu

Dieser Befehl lädt das ubuntu-Image von Docker Hub herunter.

Jetzt starten wir einen Container basierend auf dem ubuntu-Image und binden myvolume an das Verzeichnis /app innerhalb des Containers. Wir führen auch einen Befehl aus, der einige Daten in eine Datei innerhalb des eingebundenen Volumes schreibt.

docker run -d --name mycontainer -v myvolume:/app ubuntu /bin/bash -c "echo 'Hello from the container!' > /app/data.txt; sleep 30"

Lassen Sie uns diesen Befehl analysieren:

  • docker run: Dieser Befehl wird verwendet, um einen neuen Container zu starten.
  • -d: Dieser Schalter startet den Container im detached-Modus, d. h. er läuft im Hintergrund.
  • --name mycontainer: Dies weist dem Container den Namen mycontainer zu, was die Referenzierung erleichtert.
  • -v myvolume:/app: Dies ist der entscheidende Teil für die Verwendung des Volumes. Es bindet das benannte Volume myvolume an das Verzeichnis /app innerhalb des Containers.
  • ubuntu: Dies gibt das Image an, das für den Container verwendet werden soll.
  • /bin/bash -c "echo 'Hello from the container!' > /app/data.txt; sleep 30": Dies ist der Befehl, der innerhalb des Containers ausgeführt wird. Es verwendet bash, um zwei Befehle auszuführen: Zunächst schreibt es die Zeichenfolge "Hello from the container!" in eine Datei namens data.txt innerhalb des Verzeichnisses /app (das ist das eingebundene Volume), und dann lässt es den Container 30 Sekunden schlafen, um ihn für eine kurze Zeitspanne am Laufen zu halten.

Sie können überprüfen, ob der Container läuft, indem Sie den Befehl docker ps verwenden.

docker ps

Sie sollten mycontainer in der Ausgabe mit dem Status "Up" sehen.

Jetzt entfernen wir den Container. Auch wenn wir den Container entfernen, sollten die in das Volume geschriebenen Daten persistent bleiben.

docker rm -f mycontainer

Der -f-Schalter erzwingt die Entfernung des Containers, auch wenn er noch läuft.

Um zu überprüfen, dass die Daten im Volume persistent bleiben, können wir einen neuen Container starten und dasselbe Volume einbinden, und dann den Inhalt der Datei überprüfen.

docker run --rm -v myvolume:/app ubuntu cat /app/data.txt

Lassen Sie uns diesen Befehl analysieren:

  • docker run: Startet einen neuen Container.
  • --rm: Dieser Schalter entfernt den Container automatisch, wenn er beendet wird.
  • -v myvolume:/app: Bindet das myvolume an /app in diesem neuen Container.
  • ubuntu: Verwendet das ubuntu-Image.
  • cat /app/data.txt: Dies ist der Befehl, der innerhalb des Containers ausgeführt wird. Es verwendet cat, um den Inhalt der Datei data.txt im Verzeichnis /app anzuzeigen.

Sie sollten "Hello from the container!" in der Konsole sehen, was bestätigt, dass die Daten im Volume auch nach der Entfernung des ursprünglichen Containers persistent geblieben sind.

Entfernen ungenutzter anonymer Volumes

In diesem Schritt lernen wir, wie man ungenutzte anonyme Volumes (Dateisysteme) entfernt. Anonyme Volumes werden erstellt, wenn Sie beim Einbinden eines Volumes in einen Container keinen expliziten Namen zuweisen. Normalerweise werden sie entfernt, wenn der Container, der sie erstellt hat, entfernt wird, aber manchmal können sie persistent bleiben. Das Entfernen (Pruning) hilft, diese ungenutzten Volumes aufzuräumen.

Zunächst erstellen wir einen Container mit einem anonymen Volume. Wir starten einen einfachen Container, der sofort beendet wird.

docker run --rm -v /data ubuntu ls /data

Lassen Sie uns diesen Befehl analysieren:

  • docker run: Startet einen neuen Container.
  • --rm: Dieser Schalter entfernt den Container automatisch, wenn er beendet wird.
  • -v /data: Dies erstellt ein anonymes Volume und bindet es an das Verzeichnis /data innerhalb des Containers. Da wir keinen Namen vor dem Doppelpunkt angegeben haben, generiert Docker einen zufälligen Namen für das Volume.
  • ubuntu: Verwendet das ubuntu-Image.
  • ls /data: Der Befehl, der innerhalb des Containers ausgeführt wird, der die Inhalte des Verzeichnisses /data auflistet.

Obwohl der Container aufgrund des --rm-Schalters entfernt wird, kann das anonyme Volume immer noch existieren, wenn es nicht explizit von Docker aufgeräumt wurde.

Um alle Volumes, einschließlich der anonymen, anzuzeigen, können Sie den Befehl docker volume ls verwenden.

docker volume ls

Sie sollten myvolume und labeled_volume aus den vorherigen Schritten sehen und möglicherweise ein oder mehrere Volumes mit langen, zufällig aussehenden Namen. Dies sind die anonymen Volumes.

Jetzt entfernen wir die ungenutzten anonymen Volumes mit dem Befehl docker volume prune. Standardmäßig entfernt dieser Befehl nur anonyme Volumes, die derzeit von keinem Container verwendet werden.

docker volume prune

Docker fordert Sie zur Bestätigung auf, bevor es fortfährt. Geben Sie y ein und drücken Sie die Eingabetaste.

Die Ausgabe zeigt Ihnen, welche Volumes entfernt wurden. Sie sollten sehen, dass die ungenutzten anonymen Volume(s) entfernt wurden.

Lassen Sie uns die Volumes erneut auflisten, um zu bestätigen, dass die anonymen Volumes entfernt wurden.

docker volume ls

Sie sollten jetzt nur die benannten Volumes (myvolume und labeled_volume) in der Liste sehen.

Entfernen aller ungenutzten Volumes, einschließlich benannter Volumes

Im vorherigen Schritt haben wir ungenutzte anonyme Volumes entfernt. In diesem Schritt lernen wir, wie man alle ungenutzten Volumes entfernt, einschließlich benannter Volumes, die derzeit an keinen Container angebunden sind.

Zunächst listen wir die vorhandenen Volumes auf, um zu sehen, was wir haben.

docker volume ls

Sie sollten myvolume und labeled_volume in der Liste sehen. Dies sind benannte Volumes und wurden vom Standardbefehl docker volume prune nicht entfernt, da sie benannt sind.

Um alle ungenutzten Volumes, einschließlich der benannten, zu entfernen, müssen wir den --all- oder -a-Schalter mit dem Befehl docker volume prune verwenden.

docker volume prune --all

Docker wird erneut um Bestätigung bitten. Geben Sie y ein und drücken Sie die Eingabetaste.

Die Ausgabe zeigt Ihnen, welche Volumes entfernt werden. Da myvolume und labeled_volume derzeit von keinem Container verwendet werden, werden sie entfernt.

Lassen Sie uns die Volumes erneut auflisten, um zu bestätigen, dass alle ungenutzten Volumes entfernt wurden.

docker volume ls

Sie sollten jetzt eine leere Liste sehen, was darauf hinweist, dass alle ungenutzten Volumes, sowohl anonym als auch benannt, entfernt wurden.

Entfernen von Volumes mit Label-Filtern

In diesem letzten Schritt lernen wir, wie man Volumes basierend auf Labels (Markierungen) entfernt. Dies ist eine leistungsstarke Methode, um gezielt Volumes zu entfernen, die bestimmten Kriterien entsprechen, ohne andere Volumes zu beeinflussen.

Zunächst erstellen wir ein paar neue Volumes mit verschiedenen Labels, damit wir etwas zu filtern haben.

docker volume create --label env=dev dev_volume
docker volume create --label env=prod prod_volume
docker volume create --label type=data data_volume

Wir haben drei neue Volumes erstellt: dev_volume mit dem Label env=dev, prod_volume mit dem Label env=prod und data_volume mit dem Label type=data.

Lassen Sie uns die Volumes auflisten, um die neu erstellten zu sehen.

docker volume ls

Sie sollten dev_volume, prod_volume und data_volume in der Liste sehen.

Jetzt entfernen wir nur die Volumes, die das Label env=dev haben. Wir können den --filter-Schalter mit dem label-Schlüssel verwenden.

docker volume prune --filter label=env=dev

Docker wird um Bestätigung bitten. Geben Sie y ein und drücken Sie die Eingabetaste.

Die Ausgabe zeigt, dass dev_volume entfernt wurde.

Lassen Sie uns die Volumes erneut auflisten, um zu bestätigen, dass nur dev_volume entfernt wurde.

docker volume ls

Sie sollten jetzt prod_volume und data_volume noch in der Liste sehen.

Wir können auch nach Labels filtern, die nicht vorhanden sind. Beispielsweise entfernen wir Volumes, die nicht das Label type=data haben.

docker volume prune --filter label!=type=data

Docker wird um Bestätigung bitten. Geben Sie y ein und drücken Sie die Eingabetaste.

Die Ausgabe zeigt, dass prod_volume entfernt wurde.

Lassen Sie uns die Volumes ein letztes Mal auflisten, um zu sehen, was übrig bleibt.

docker volume ls

Sie sollten jetzt nur noch data_volume in der Liste sehen.

Dies zeigt, wie Sie Label-Filter verwenden können, um Volumes gezielt nach Ihren Bedürfnissen zu entfernen.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man Docker-Volumes (Docker-Datenträger) verwaltet, die die bevorzugte Methode zur Persistenz von Containerdaten sind. Wir haben begonnen, indem wir sowohl benannte Volumes als auch Volumes mit Labels (Markierungen) mit docker volume create und docker volume inspect erstellt und untersucht haben. Dies hat es uns ermöglicht, zu verstehen, wie Volumes erstellt werden und ihre Details, einschließlich ihrer Mountpunkte (Einbindungspunkte) und zugehörigen Labels, anzuzeigen.

Anschließend haben wir die Persistenz von Daten demonstriert, indem wir einen Container erstellt haben, der ein benanntes Volume nutzte, und dann den Container entfernt haben. Dies hat gezeigt, dass das Volume und seine Daten nach der Entfernung des Containers intakt blieben. Schließlich haben wir uns mit dem Befehl docker volume prune beschäftigt und gelernt, wie man standardmäßig ungenutzte anonyme Volumes entfernt, wie man alle ungenutzten Volumes (einschließlich benannter Volumes) mit dem --all-Schalter entfernt und wie man Volumes gezielt basierend auf Labels mit der --filter-Option entfernt. Diese Schritte haben uns praktische Erfahrungen in der Bereinigung ungenutzter Volumes vermittelt, um Plattenplatz freizugeben.