GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So löschen Sie ungenutzte Docker-Ressourcen

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 – Der until 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 – Das label 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 als label=key=value an (Schlüssel gleich Wert), label!=key=value (Schlüssel ungleich Wert), label=key (hat das angegebene Label) oder label!=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.


Docker
  1. So entfernen Sie alle Docker-Images, Container, Volumes, Netzwerke und ungenutzte Ressourcen

  2. So aktualisieren Sie laufende Docker-Container automatisch

  3. So verwenden Sie Docker Compose

  4. So verbinden Sie Docker-Container

  5. So übergeben Sie Umgebungsvariablen an Docker-Container

So führen Sie Docker-Container aus

So entfernen Sie Docker-Container

So stoppen Sie Docker-Container

So benennen oder umbenennen Sie Docker-Container

So verwalten Sie Docker-Container

So konfigurieren Sie Netzwerk-Namespaces in Docker-Containern