Mit Docker können Sie Ihre Anwendungen schnell als Container verpacken, sodass Sie sie überall von Ihrem Laptop bis zu einer öffentlichen Cloud ausführen können. Nachdem Sie Docker eine Weile verwendet haben, können Sie eine große Anzahl redundanter Container, Bilder und anderer Ressourcen ansammeln. So räumen Sie sie auf.
Docker löscht normalerweise nichts, es sei denn, Sie sagen es. Das bedeutet, dass von Ihnen gezogene Images und von Ihnen erstellte Container wahrscheinlich immer noch auf Ihrem System herumhängen, auch wenn sie nicht mehr verwendet werden.
Zu viele redundante Ressourcen können schnell zu einer übermäßigen Festplattennutzung führen. Es führt auch zu einer viel längeren Ausgabe beim Auflisten von Ressourcen in der Befehlszeile, wodurch es schwieriger wird, die gesuchten Informationen zu finden.
Dangling-Ressourcen beschneiden
Eine „hängende“ Ressource ist jedes Docker-Objekt, das derzeit keinem Container zugeordnet ist. Dazu gehören Docker-Images, -Netzwerke und -Volumes sowie angehaltene Container. Im Falle von Bildern ist ein Bild „hängend“, wenn es nicht getaggt ist und keine Referenzen hat.
Docker bietet einen einzigen Verwaltungsbefehl, mit dem Sie alle baumelnden Ressourcen und gestoppten Container löschen können. Es sei denn, eine Ressource wird von einem Running verwendet Container, wird er gelöscht.
docker system prune
Beim Ausführen des Befehls wird eine Bestätigungsaufforderung angezeigt, die die zu löschenden Ressourcentypen auflistet. Geben Sie y
ein und drücken Sie die Eingabetaste, um mit dem Löschen fortzufahren. Sie können die Bestätigung deaktivieren, indem Sie -f
übergeben oder --force
Flagge.
Volumes werden nicht standardmäßig entfernt. Das Löschen von Volumes riskiert den Verlust persistenter Daten, die Sie vielleicht behalten möchten. Wenn Sie Volumes entfernen möchten, die keinem Container zugeordnet sind, übergeben Sie --volumes
kennzeichnen, um sie in die Operation einzubeziehen.
Sie können noch mehr Bilddaten löschen, indem Sie den -a
übergeben (oder --all
) Flagge. Dadurch löscht Docker alle nicht verwendeten Bilder, nicht nur baumelnde, nicht referenzierte. Jedes Image auf Ihrem System wird gelöscht, es sei denn, es ist mindestens ein laufender Container vorhanden, der dies erfordert.
Verwendung von Filtern beim Pruning
Filter können mit prune
verwendet werden Befehl. Das Filtern gibt Ihnen mehr Kontrolle darüber, was gelöscht wird. Derzeit werden zwei Filter unterstützt, until
und timestamp
.
until
– Deruntil
Filter verhindert das Löschen von Containern, Images und Netzwerken, die vor einem bestimmten Zeitpunkt erstellt wurden. Sie können die Zeit in mehreren verschiedenen Formaten angeben, z. B. als Unix-Zeitstempel in Sekunden (z. B.1614890000
) oder eine Zeitstempelzeichenfolge im Datumsformat (z. B.2021-03-04T20:30:00
). ).label
– Daslabel
Filter schränkt das Löschen ein, sodass nur Ressourcen mit einem bestimmten Label gelöscht werden. Labels können mit Containern, Bildern, Netzwerken und Volumes verwendet werden. Sie geben Labels entweder alslabel=key=value
an (Schlüssel gleich Wert),label!=key=value
(Schlüssel ungleich Wert),label=key
(hat das angegebene Label) oderlabel!=key
(hat nicht das angegebene Label).
Um einen Filter zu verwenden, übergeben Sie ihn an --filter
Flagge:
docker system prune --filter until=2021-03-04T20:30:00 --filter label=foo=bar
Dieser Befehl würde Ressourcen mit dem foo=bar
löschen Label, das vor dem 4. März um 20:30 Uhr erstellt wurde. Alle Ressourcen, die diese Kriterien nicht erfüllen, bleiben unberührt.
Pruning einzelner Ressourcentypen
Sie müssen nicht immer docker system prune
verwenden . Docker bietet auch detailliertere Pruning-Befehle. Diese können verwendet werden, wenn Sie nur einen Ressourcentyp entfernen möchten.
Der --force
und --filter
Flags, die von docker system prune
unterstützt werden gelten auch für die unten aufgeführten einzelnen Prune-Befehle.
Bereinigung von Containern
Tägliche Docker-Befehle können schnell zu einer großen Anzahl gestoppter Container führen. Das Problem wird verschärft, wenn Sie docker build
Bilder ohne den --rm
-Flag, da dies dazu führt, dass zwischengeschaltete Build-Layer beibehalten werden.
Führen Sie docker container prune
aus angehaltene Behälter aufzuräumen. Angehaltene Container werden nicht angezeigt, wenn Sie docker ps
ausführen; Um sie anzuzeigen, müssen Sie docker ps -a
verwenden um alle Container auf Ihrem System anzuzeigen.
Wenn Sie einen einzelnen Container entfernen möchten, verwenden Sie den docker rm
Befehl, der die ID des Containers übergibt. Sie können dies erhalten, indem Sie docker ps
ausführen . Wenn der Container ausgeführt wird, müssen Sie --force
verwenden markieren, um es zu löschen.
Bilder beschneiden
Verwenden Sie docker image prune
um alle baumelnden Bilder zu entfernen. Wie docker system prune
, betrifft dies Bilder, die entweder nicht getaggt sind oder von keinem Container referenziert werden.
Fügen Sie den -a
hinzu -Flag, um stattdessen alle unbenutzten Bilder zu löschen. Dadurch wird jedes Image auf Ihrem System gelöscht, das nicht von mindestens einem Container benötigt wird. Getaggte Bilder werden ebenfalls eingeschlossen, sodass Sie schnell alte Pulls aus Docker Hub löschen können.
Sie können ein bestimmtes Bild mit dem docker rmi
entfernen Befehl:
docker rmi wordpress:latest
Wenn ein Bild mehrere Tags hat, docker rmi
entfernt das angegebene Tag, ohne das Bild tatsächlich zu löschen. Es wird gelöscht, sobald das letzte Tag entfernt wurde.
Pruning-Netzwerke
Docker-Netzwerke werden nicht automatisch bereinigt. Im Laufe der Zeit können Sie mit einer großen Anzahl von ihnen enden. Dadurch wird Ihr System mit redundanten virtuellen Bridge-Geräten und Routing-Tabelleneinträgen überladen. Führen Sie docker network prune
aus um ungenutzte Netzwerke zu zerstören und die Änderungen an der Konfiguration Ihres Hosts rückgängig zu machen.
Sie können einzelne Netzwerke löschen, indem Sie docker rm my-network
ausführen .
Pruning-Volumes
Docker löscht niemals ein Volume. Sie speichern die von Ihren Containern erstellten persistenten Daten, sodass ein unbeabsichtigtes Entfernen verheerende Folgen haben kann. Volumes können auch von mehreren Containern gemeinsam genutzt oder inaktiv gelassen werden, um in Zukunft an einen anderen Container angehängt zu werden.
Wenn Sie ungenutzte Volumes löschen möchten, sollten Sie docker volume prune
ausführen . Dadurch werden alle Volumes gelöscht, die nicht von mindestens einem Container verwendet werden. Einzelne Volumes können mit docker volume rm my-volume
entfernt werden .
Verhinderung zukünftiger Akkumulation
Sie können das Risiko einer Anhäufung redundanter Ressourcen in der Zukunft minimieren, indem Sie darauf achten, den --rm
zu übergeben Flag zu docker build
und docker run
Befehle.
Bei Verwendung mit build
, führt dies zum Löschen von zwischengeschalteten Build-Layern (gekennzeichnet als <none>:<none>
in docker images
) Ausgang. Dies kann eine erhebliche Verringerung der Festplattennutzung darstellen. Normalerweise wird für jede Anweisung in Ihrem Dockerfile
eine neue Zwischenschicht erstellt . Normalerweise können Sie sie entfernen, es sei denn, Sie beabsichtigen, sie später als Ausgangspunkt für ein neues Bild zu verwenden.
Mit --rm
mit docker run
entfernt den Container, sobald sein Befehl beendet wird. Dies ist ideal, wenn eine Binärdatei in einem Single-Use-Container ausgeführt wird. Übergeben Sie nicht --rm
für Container, die Sie dauerhaft ausführen möchten oder die Sie bei Bedarf starten und stoppen möchten. Beispiele hierfür sind Web- und Datenbankserver, die anstelle eines vom Benutzer bereitgestellten Befehls einen Dienst ausführen.
Schlussfolgerung
Das Pruning Ihrer Docker-Ressourcen kann Speicherplatz freigeben und Ihnen bei der Arbeit mit der Docker-CLI helfen. Das Eliminieren redundanter Container und Bilder erleichtert die Identifizierung der gesuchten Ressourcen.
Docker löscht nichts, es sei denn, Sie sagen es ihm. Es lohnt sich, docker system prune
auszuführen regelmäßig, um Ihr System sauber zu halten. Sie könnten eine Crontask erstellen, die sie monatlich ausführt, indem Sie until
verwenden filtern, um einen Aufbewahrungszeitraum für kürzlich hinzugefügte Ressourcen zu erstellen.