Docker Prune: Ein kompletter Leitfaden mit praktischen Beispielen

Wenn Sie täglich mit Docker arbeiten, wissen Sie, wie schnell es Festplattenspeicher verbrauchen kann.

Im Laufe der Zeit sammelt Ihr System ungenutzte Images, Container, Volumes und Netzwerke an. Diese bleiben größtenteils ungenutzt und belegen wertvollen Speicherplatz, was Sie möglicherweise daran hindert, an Ihrem aktuellen Projekt zu arbeiten. Glücklicherweise bietet Docker integrierte Bereinigungsbefehle, die unnötige Ressourcen leicht entfernen.

Diese Bereinigungsbefehle sind Teil der docker prune-Familie, und heute werden Sie alles darüber erfahren. Sie werden schnell zu Ihrer bevorzugten Lösung, um Festplattenspeicher freizugeben.

Lass uns mit einem kurzen Überblick beginnen, bevor wir in praktische Beispiele eintauchen.  

Bist du neu bei Docker? Schau dir unseren Leitfaden anzum Erlernen von Docker von Grund auf für Datenprofis, um schnell auf den neuesten Stand zu kommen.  

Was ist Docker Prune?  

Der Begriff „Docker Prune“ bezieht sich typischerweise auf eine Reihe von Befehlen, die dir helfen sollen, ungenutzte und unnötige Docker-Ressourcen zu entfernen.  

Im Laufe der Zeit, insbesondere wenn du an mehreren Projekten arbeitest, wirst du unzählige Images erstellen, Container ausführen sowie Volumes und Netzwerke einrichten. All dies sammelt sich auf deinem System und beansprucht eine erhebliche Menge an Speicherplatz. Der Zweck von docker prune besteht darin, dieses Durcheinander zu beseitigen und Speicherplatz zurückzugewinnen.  

Das gesagt, es steckt mehr hinter docker prune als man auf den ersten Blick denken könnte.  

Es ist nicht nur ein einzelner Befehl, den man ausführen kann. Nun, man könnte, aber manchmal benötigt man genaue Kontrolle darüber, was entfernt wird. Genau hier setzt dieser Artikel an. Er wird Ihnen zeigen, wie Sie das Säubern effektiv verwalten, um sicherzustellen, dass Sie nur das löschen, was Sie beabsichtigen, und wie Sie in einer sicheren Umgebung üben können, um zu vermeiden, wichtige Daten versehentlich zu entfernen.  

Es ist auch erwähnenswert, dass Prune-Befehle nur Ressourcen entfernen, die nicht aktiv genutzt werden. Bilder, Volumes und Netzwerke, die von laufenden Containern referenziert werden, werden nicht gelöscht. Mit anderen Worten, das Pruning beeinträchtigt keine aktiven Arbeitslasten.  

Im nächsten Abschnitt zeigen wir Ihnen die verschiedenen Arten von Prune-Befehlen und erklären, wie sie in Ihren Arbeitsablauf passen.  

Möchten Sie Docker in Ihren Lebenslauf oder Ihr Portfolio aufnehmen? Diese 10 Docker-Projektideen helfen Ihnen, bereit für den Job zu werden.

Alle Docker Prune-Befehle mit praktischen Beispielen

Docker bietet mehrere prune Befehle, mit denen Sie ungenutzte Ressourcen einzeln oder alle auf einmal bereinigen können. In diesem Abschnitt lernen Sie sie kennen—sowohl durch Theorie als auch durch praktische Beispiele.  

docker system prune  

Dies ist der umfassendste Befehl zur Wiederherstellung von Speicherplatz. Er entfernt alle ungenutzten Container, Netzwerke, Images und Build-Cache in einem einzigen Vorgang.  

Wenn Sie auf der Suche nach einer schnellen Möglichkeit sind, Speicherplatz mit einem einzigen Befehl freizugeben, ist dies der richtige.

Sie können Optionen an den Befehl docker system prune übergeben:

  • -a oder --all entfernt alle nicht verwendeten Images anstelle von nur hängenden (Images, die nicht markiert oder von einem Container referenziert werden).
  • --filter ermöglicht es Ihnen, Filterwerte anzugeben.
  • -f oder --force überspringt die Bestätigungsaufforderung.
  • --volumes entfernt auch anonyme Volumes zusammen mit Containern, Netzwerken, Images und Build-Cache.  

Standardmäßig fordert docker system prune eine Bestätigung an, da es sich um einen potenziell zerstörerischen Vorgang handelt:  

Bild 1 – Bestätigungsaufforderung für das Bereinigen des Docker-Systems

Um die Aufforderung zu umgehen und alle ungenutzten Images, Container, Netzwerke und Volumes mit einem einzigen Befehl zu entfernen, führen Sie aus:  

docker system prune -a -f --volumes

Bild 2 – Entfernen Sie alles mit einem einzigen Docker-System-Befehl

Aber was ist, wenn Sie eine genauere Kontrolle benötigen? Lassen Sie uns das als Nächstes besprechen.

docker container prune

Mit diesem Befehl werden einfach alle gestoppten Container entfernt.

Angesammelte Container bleiben auf Ihrem System, bis sie manuell entfernt werden. Sie können Speicherplatz beanspruchen und sind schwer zu erkennen, es sei denn, Sie verwenden ein Tool wie Docker Desktop Dashboard.

Wie docker system prune unterstützt dieser Befehl Optionen:

  • --filter ermöglicht es Ihnen, Schlüssel-Wert-Paare anzugeben, um zu steuern, welche Container entfernt werden.
  • -f oder --force überspringt die Bestätigungsabfrage.

Hier ist eine Liste von nicht laufenden Containern:

Bild 3 – Liste der nicht laufenden Container

Um code-server (und jeden anderen gestoppten Container) zu entfernen, führen Sie Folgendes aus:

docker container prune -f

Dies wird Sie nicht nach Bestätigung fragen, und innerhalb von Sekunden sehen Sie eine Ausgabe wie diese:

Bild 4 – Ausgabemeldung für Containerbereinigung

Und schon gibt es keine gestoppten Container mehr:

Bild 5 – Liste der nicht laufenden Container (2)

Jetzt kümmern wir uns um ungenutzte Images.

docker image prune

Ähnlich wie der vorherige Befehl entfernt docker image prune ungenutzte Images.

Standardmäßig entfernt es nur hängende Images – Images, die nicht getaggt sind und nicht mit einem Container verbunden sind. Sie können einen optionalen Flag verwenden, um alle ungenutzten Images zu entfernen, nicht nur die hängenden.

Hier ist eine Liste der verfügbaren Optionen

  • -a oder --all entfernt alle ungenutzten Images anstelle von nur den hängenden.
  • --filter ermöglicht es Ihnen, Schlüssel-Wert-Paare anzugeben, um zu steuern, welche Bilder entfernt werden sollen.
  • -f oder --force überspringt die Bestätigungsaufforderung.

Jetzt schauen wir es uns in Aktion an!

Hier ist eine Liste der Bilder, die sich derzeit auf dem System befinden:

Bild 6 – Liste der Docker-Bilder

Um sie alle mit einem einzigen Befehl zu entfernen, führen Sie aus:

docker image prune -a -f

Sie werden eine Ausgabe wie diese im Terminal sehen:

Bild 7 – Ausgabe Nachricht zur Bildbereinigung

Danach bleiben keine Bilder mehr in Docker Desktop:

Bild 8 – Liste der Docker-Bilder (2)

Als nächstes kümmern wir uns um ungenutzte Volumes.

docker volume prune

Wie der Name schon sagt, entfernt der docker volume prune-Befehl alle ungenutzten lokalen Volumes. Mit anderen Worten, es löscht Volumes, die von keinem Container referenziert werden.

Standardmäßig entfernt der Befehl nur anonyme Volumes – namenlose Volumes, die von Docker erstellt werden, wenn ein Container gestartet wird. Um explizit benannte Volumes zu entfernen, müssen Sie eine zusätzliche Option übergeben.

Dies sind die verfügbaren Optionen:

  • -a oder --all entfernt alle ungenutzten Volumes anstelle von nur anonymen.
  • --filter ermöglicht es Ihnen, Schlüssel-Wert-Paare anzugeben, um zu steuern, welche Volumes entfernt werden sollen.
  • -f oder --force überspringt die Bestätigungsaufforderung.

In unserem System haben wir ein einzelnes, benutzererstelltes Volume aus einer docker-compose.yml-Datei:

Bild 9 – Liste der Docker-Volumes

Der folgende Befehl entfernt alle lokalen Volumes:

docker volume prune -a -f

Nachdem Sie ihn ausgeführt haben, sehen Sie eine Ausgabe ähnlich dieser:

Bild 10 – Ausgabe der Volumenbereinigung

Jetzt sind keine Volumen mehr vorhanden:

Bild 11 – Liste der Docker-Volumen (2)

Schließlich sehen wir uns an, wie man ungenutzte Netzwerke löscht.

docker netzwerk bereinigen

Wenn Docker-Container miteinander kommunizieren, verwenden sie oft benutzerdefinierte Netzwerke. Diese Netzwerke bleiben jedoch normalerweise auf Ihrem System, sobald diese Container entfernt werden.

Der Befehl docker netzwerk bereinigen entfernt Netzwerke, die von keinem Container mehr verwendet werden.

Wie die anderen prune-Befehle enthält es einige Optionen:

  • --filter ermöglicht es Ihnen, Schlüssel-Wert-Paare anzugeben, um zu steuern, welche Netzwerke entfernt werden.
  • -f oder --force überspringt die Bestätigungsaufforderung.

Anders als Bilder, Container oder Volumes,können Sie Netzwerke nicht visuell über Docker Desktop inspizieren, daher müssen Sie über die Befehlszeile arbeiten. Hier ist eine Liste der verfügbaren Netzwerke:

Bild 12 – Liste der Docker-Netzwerke

Um alle Netzwerke zu entfernen, die nicht mit der Standard-Docker-Installation verbunden sind, führen Sie Folgendes aus:

docker network prune -a -f

Nach Ausführung des Befehls erhalten Sie eine Ausgabe wie diese:

Bild 13 – Ausgabemeldung des Netzwerkprunings

Alle Netzwerke, die mit zuvor ausgeführten Containern verbunden waren, sind nun verschwunden:

Bild 14 – Liste der Docker-Netzwerke

Beachten Sie jedoch, dass die drei verbleibenden Netzwerke für das ordnungsgemäße Funktionieren von Docker unerlässlich sind und nicht entfernt werden können.

Und das war’s für die grundlegende Verwendung von docker prune Befehlen! Als Nächstes werden wir fortgeschrittene Themen behandeln, wie die sichere Verwendung dieser Befehle und bewährte Verfahren für Produktions- und sensible Umgebungen.

Docker Prune Sicher Verwenden

Die docker prune Befehle helfen, schnell Speicherplatz zurückzugewinnen, müssen jedoch mit Vorsicht verwendet werden, insbesondere in Produktionsumgebungen. 

Das versehentliche Löschen wichtiger Container, Images oder Volumes kann zu Datenverlust führen und kritische Workflows stören. Um dies zu verhindern, ist es am besten zu verstehen, was entfernt wird, bevor Sie einen Prune-Befehl ausführen.

In diesem Abschnitt werden wichtige Vorsichtsmaßnahmen erläutert, die beim sicheren Ausführen von docker prune zu beachten sind.

Verstehen, was entfernt wird

Die Prune-Befehle sind so konzipiert, dass nur Ressourcen entfernt werden, die nicht aktiv verwendet werden.

Zum Beispiel löscht docker image prune nur hängende Images, und docker volume prune entfernt nur Volumes, die an keine Container angehängt sind. Das Hinzufügen von Optionen wie -a -f entfernt jedoch alle Images oder Volumes ohne Aufforderung zur Bestätigung.  

Darüber hinaus können in komplexen Umgebungen Abhängigkeiten leicht übersehen werden, daher ist es immer eine gute Praxis, vor dem Pruning eine doppelte Überprüfung vorzunehmen.  

Vor Ausführung eines prune Befehls sollten Sie Ihr System überprüfen, um zu sehen, welche Ressourcen derzeit verwendet werden. Es gibt mehrere Möglichkeiten, dies zu tun, und wir werden die häufigsten in diesem Abschnitt erkunden.  

Verwenden Sie diesen Befehl, um alle Container anzuzeigen, einschließlich der gestoppten:  

docker ps -a

Sie sollten eine Ausgabe ähnlich dieser sehen:

Bild 15 – Liste aller Docker-Container

Verwenden Sie ähnlich diesen Befehl, um alle Images aufzulisten, einschließlich der ungenutzten:  

docker images

Die Ausgabe wird ähnlich strukturiert sein wie die oben:  

Bild 16 – Liste aller Docker-Images

Um die Volumes zu überprüfen, führen Sie diesen Befehl aus, um alle Volumes aufzulisten:

docker volume ls

Bild 17 – Liste aller Docker-Volumes

Überprüfen Sie diese Ausgaben sorgfältig, um sicherzustellen, dass keine wichtigen Ressourcen versehentlich gelöscht werden.

Trockenlauf zur Sicherheit

Leider hat Docker immer noch keine eingebaute Option für einen Trockenlauf des Bereinigungsbefehls, obwohl dies vor Jahren angefordert wurde.

Aus diesem Grund müssen Sie Ressourcen manuell überprüfen, indem Sie die im vorherigen Abschnitt aufgeführten Befehle verwenden, bevor Sie einen Bereinigungsbefehl ausführen.

Wenn Sie in einer sensiblen Umgebung arbeiten, in der die Datenpersistenz entscheidend ist, sollten Sie immer eine Sicherung erstellen, bevor Sie Bereinigungsbefehle ausführen, die sich auf Volumes auswirken.

Natürlich handelt es sich dabei nur um Vorsichtsmaßnahmen, aber wir hoffen, bald eine Dry-Run-Option implementiert zu sehen.

Best Practices für Docker Prune  

Um Ihre Docker-Umgebung frei von unnötigem Ballast zu halten, ist es wichtig, prune-Befehle regelmäßig auszuführen—vielleicht sogar zu automatisieren.  

Dieser Abschnitt führt Sie durch die besten Praktiken für die Ausführung von docker prune-Befehlen in Produktionsumgebungen.  

Verwenden Sie docker prune regelmäßig  

Im Laufe der Zeit sammelt Docker ungenutzte Images, gestoppte Container und unnötige Volumes an—allesamt Faktoren, die erheblichen Speicherplatz beanspruchen.  

Das regelmäßige Ausführen von Bereinigungsbefehlen sorgt dafür, dass Ihre Umgebung sauber bleibt und einer übermäßigen Speicherplatznutzung vorbeugt. Sie sollten sie als Teil Ihres Wartungsplans einbeziehen.

Alle paar Wochen ist ein guter Ausgangspunkt, aber wenn Ihr Setup häufige Erstellung und Entfernung von Containern beinhaltet, sollten Sie einen häufigeren Zeitplan in Betracht ziehen.

Seien Sie in der Produktion vorsichtig  

Jede Arbeit in einer Produktionsumgebung erfordert besondere Vorsicht, und das Docker-Pruning bildet da keine Ausnahme.

Ein Moment der Unachtsamkeit kann zu Ausfallzeiten oder Datenverlust führen, und das möchten Sie nicht verantworten. Bevor Sie docker prune Befehle in einer Produktionsumgebung ausführen, überprüfen Sie immer die Systemressourcen mit docker ps -a, docker images und docker volume ls, wie im vorherigen Abschnitt erläutert.

Zusätzlich ist es ratsam, spezifische Bereinigungsbefehle anstelle des allumfassenden docker system prune zu verwenden, da es einfacher sein kann, sich von unbeabsichtigten Löschungen zu erholen.

Automatisieren Sie das Docker-Pruning

Ein weiterer bewährter Ansatz besteht darin, Bereinigungsbemühungen zu optimieren, indem Sie die docker prune Befehle mithilfe von geplanten Aufgaben automatisieren.

Auf Linux können Sie einen Cron-Job einrichten, um Befehle in regelmäßigen Abständen auszuführen, während Sie auf Windows den Taskplaner für eine ähnliche Automatisierung verwenden können. Dies hilft, ein sauberes System ohne manuelle Eingriffe aufrechtzuerhalten. Stellen Sie jedoch in einer Produktionsumgebung sicher, dass das automatisierte Aufräumen nicht in Konflikt mit wichtigen Arbeitslasten gerät.

Zum Beispiel führt dieser Cron-Job auf Linux jeden Sonntag um Mitternacht einen umfassenden Bereinigungsbefehl aus:

0 0 * * 0 docker system prune -a -f

Behebung von Problemen mit dem Docker Prune

Die docker prune Befehle sind eine beliebte Lösung, um Speicherplatz zurückzugewinnen, aber sie sind möglicherweise nicht immer ausreichend, um genügend Platz für das Herunterladen neuer Images oder das Ausführen neuer Container sicherzustellen.

Zusätzlich könnten Sie versehentlich wichtige Ressourcen entfernen, daher ist es entscheidend, Wiederherstellungsstrategien zu besprechen.

Beide Themen werden in diesem Abschnitt behandelt.

Probleme mit dem Speicherplatz  

Docker-Images können groß sein – wir hatten kürzlich eines über 13 GB – und wir sind sicher, dass es noch größere gibt. Daher kann es selbst nach dem Ausführen von docker prune vorkommen, dass Ihr System immer noch wenig Speicherplatz hat.

Um genau zu sehen, wie viel Platz von Bildern, Containern und Volumes verwendet wird, führen Sie diesen Befehl aus: Image 18 – Speichernutzung durch Docker

docker system df

Beim Rückgewinnen von Festplattenspeicher mit docker prune Befehlen fügen Sie die -a Flagge hinzu, um alle Bilder, Volumes oder Container zu entfernen – nicht nur hängende oder anonyme. Beachten Sie natürlich die potenziellen Nachteile dieses Ansatzes.

Wenn das Speicherplatzproblem bestehen bleibt, ist Ihre einzige Option, den verfügbaren Speicherplatz zu erhöhen.

Wiederherstellen von versehentlichen Löschungen

Die Wiederherstellung ist leichter gesagt als getan—deshalb empfehlen wir, zu verstehen, was durch das Beschneiden entfernt wird, bevor Sie den tatsächlichen Befehl ausführen.

Trotzdem, wenn Sie sich in der Situation wiederfinden, dass Sie wichtige Container, Images oder Volumes versehentlich beschnitten haben, beginnen Sie mit der Überprüfung der Protokolle, um festzustellen, was entfernt wurde.

Auf macOS kann dies durch Ausführen der folgenden beiden Befehle erfolgen (Optionen für Windows und Linux):

pred='process matches ".*(ocker|vpnkit).*" || (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")' /usr/bin/log stream --style syslog --level=debug --color=always --predicate "$pred" /usr/bin/log show --debug --info --style syslog --last 30m --predicate "$pred" >/tmp/logs.txt

Durch Ausführen dieser Befehle werden die letzten 30 Minuten der Docker-bezogenen Protokolle in /tmp/logs.txt gespeichert. Diese Protokolle sollten überprüft werden, um festzustellen, welche Container oder Images gelöscht wurden.

Für gelöschte Images können Sie sie wahrscheinlich erneut aus einem Register wie Docker Hub abrufen. Ein Befehl wie dieser sollte funktionieren:

docker pull <image_name>

Und für gelöschte Container kann man sie immer wieder erstellen, wenn sie auf persistenten Images basierten:

docker run --name <container_name> <image_name>

Alternativ kann man aus Backups wiederherstellen, wenn sie verfügbar sind, was zur Wiederherstellung von Volumen- und Containerdaten genutzt werden kann. In Zukunft sollten Sie Tools für Volumesnapshots in Betracht ziehen, um Datenverlust zu verhindern.

Die beste Strategie ist jedoch, die Ressourcen zu überprüfen, die gelöscht werden sollen, bevor Sie einen Bereinigungsbefehl ausführen, und nur fortzufahren, wenn Sie absolut sicher sind, dass dies sich nicht auf Ihren Workflow auswirkt. 

Zusammenfassung von Docker Prune 

Abschließend ist die docker prune-Befehlsfamilie eine leistungsstarke Möglichkeit, Speicherplatz zurückzugewinnen, birgt jedoch das Risiko, dass versehentlich benötigte Ressourcen gelöscht werden, was zu Datenverlust führen kann. Dieses Risiko ist noch größer, wenn die optionalen -a -f-Flags verwendet werden, die alles gewaltsam entfernen. 

Trotzdem bleibt das Bereinigen eine bewährte Methode, um Ihr System sauber und organisiert zu halten. 

Sie müssen einfach vorsichtig sein, besonders in Produktionsumgebungen. Verwenden Sie Befehle wie docker ps -a, docker images und docker volume ls vor dem Aufräumen, um alle Container, Images und Volumes aufzulisten. Führen Sie den Aufräumbefehl nur aus, nachdem Sie sicher sind, dass Sie mit dem Löschen der aufgelisteten Ressourcen einverstanden sind (vorausgesetzt, sie werden nicht von einem laufenden Container verwendet).

Wenn Sie mehr über Docker, Containerisierung und Container-Orchestrierung erfahren möchten, schauen Sie sich diese Kurse auf DataCamp an:

Source:
https://www.datacamp.com/tutorial/docker-prune