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

Halten Sie Ihre Docker-Images mit Docker Image Prune überschaubar

Die Dinge können leicht chaotisch werden, während Sie sich auf die Bereitstellung Ihrer Projekte und das Testen von Dingen in Docker-Containern konzentrieren. Sie werden feststellen, dass Sie Ihren Arbeitsplatz von Zeit zu Zeit aufräumen müssen. Warum halten Sie Ihre Docker-Umgebung also nicht mit Docker-Image-Prune und anderen praktischen Befehlen aufgeräumt?

In diesem Tutorial lernen Sie die vielen Möglichkeiten kennen, Ihre Docker-Umgebung sauber und überschaubar zu halten, sowie einige Best Practices zur Bewältigung potenzieller Komplexitäten.

Fangen wir an!

Voraussetzungen

Um diesem Tutorial folgen zu können, müssen Sie Folgendes zur Verfügung haben:

  • Ein Windows 10-PC – Dieses Tutorial verwendet Windows 10 und startet Docker-Befehle in PowerShell, aber jedes Betriebssystem, das Docker ausführt, ist in Ordnung.
  • Docker – Dieses Tutorial verwendet Docker Desktop v3.6.0 für den Container-Host.
  • Ein vorhandener Docker-Container zum Bereinigen

Docker-Images entfernen

Eine Docker-Umgebung besteht aus vielen verschiedenen Komponenten von Bildern, Containern, Netzwerken usw. Sie werden viele verschiedene Komponenten zum Aufräumen finden. Beginnen wir diesen Bereinigungsprozess, indem wir zuerst alle alten Bilder beschneiden, die Sie nicht mehr benötigen. Aber keine Sorge, wenn Sie Bilder entfernen und eine Docker-Datei erstellt haben, die diese gelöschten Bilder benötigt, lädt Docker sie automatisch erneut herunter.

Wenn Sie unnötige Bilder entfernen müssen, die Sie in der Vergangenheit heruntergeladen haben, wird die Datei rm Befehl ist dein Freund. Dieser Befehl entfernt Bilder und Container, aber das Tutorial konzentriert sich zuerst auf Bilder.

Wenn Sie einen oder mehrere Container haben, die derzeit das Image verwenden, das Sie entfernen möchten, müssen Sie zuerst die Container, die dieses Image verwenden, mit docker stop stoppen Befehl. Weitere Informationen finden Sie im ATA-Artikel Use Docker Stop Containers Without Screwing Things Up!.

Beachten Sie, dass Sie Docker-Images nicht entfernen können, es sei denn, Sie beenden die Container, die das Image verwenden.

So entfernen Sie ein Bild mit docker rm , müssen Sie zuerst die Bild-ID finden. Führen Sie dazu das docker image ls aus Befehl. Das docker image ls Der Befehl liest Docker und gibt alle Bilder zurück, die Sie derzeit haben, einschließlich der ID jedes Bildes.

Sie können auch die docker images ausführen Befehl zum Auflisten der zuletzt erstellten Bilder.

docker image ls

Unten sehen Sie das Ergebnis des docker image ls Befehl in einer Tabellenliste mit Spalten REPOSITORY , TAG , BILD-ID , ERSTELLT und GRÖSSE .

Sobald Sie die Image-ID kennen, geben Sie diese Image-ID an docker image rm weiter Befehl, wie unten gezeigt. Sobald Sie dies getan haben, entfernt Docker das Image mit der angegebenen ID.

# Remove only the images with the specified image ID
docker image rm image_id

Entfernen von „hängenden“ Docker-Images

Wenn Sie anfangen, mehr Container zu erstellen und mehr Bilder herunterzuladen, werden Sie wahrscheinlich verschiedene Bilder haben, die keinen zugehörigen Container haben. Diese Images werden als „Dangling“- oder „Stray“-Images bezeichnet und werden derzeit nicht von Docker verwendet.

Um Speicherplatz zu sparen und Ordnung zu halten, lassen Sie uns all diese baumelnden Bilder bereinigen. Führen Sie dazu docker image prune aus . Dieser Befehl löscht oder Bilder entfernen, für die kein Container erstellt wurde.

docker image prune

Wenn Sie ALLE Bilder mit einem zugehörigen Container entfernen möchten oder nicht, müssen Sie keine bestimmte Bild-ID finden; Führen Sie docker image prune -a aus nuklear zu werden und sie alle zu entfernen.

Entfernen von Docker-Containern

Sobald Sie Ihre Docker-Images bereinigt haben, ist es an der Zeit, zu Containern überzugehen. Glücklicherweise werden Sie feststellen, dass das Entfernen von Containern dem Entfernen von Bildern mit rm ähnelt Befehl.

Suchen Sie zuerst die Container-ID mit dem docker container ls Befehl zum Entfernen von Containern, wie unten gezeigt. Dieser Befehl gibt alle Container zurück, einschließlich der CONTAINER ID . Der -al Der Parameter ist optional, um Ihnen alle Container (laufend oder nicht) und nur die neueste Version jedes Containers anzuzeigen.

docker container ls -al # List all Docker containers

Sobald Sie die Container-ID kennen, führen Sie docker rm aus und übergeben Sie ihm die Container-ID, die Sie entfernen möchten.

# Remove only the containers with the specified container ID
docker rm container_id

Sie können auch mehr als eine Container-ID angeben, indem Sie jede ID durch ein Leerzeichen trennen, wie unten gezeigt. Dieser Befehl entfernt (rm ) die Alpine- und Docker 101-Tutorial-Container mit den Container-IDs f8ec07177218 und 6fac840d9382 .

docker rm f8ec07177218 6fac840d9382

Entfernen aller angehaltenen Docker-Container

Vielleicht haben Sie viele angehaltene Container, die nur Platz beanspruchen. Genauso wie baumelnde Bilder erfüllen angehaltene Container im Moment keinen Zweck.

So entfernen Sie alle angehaltenen Container:

1. Führen Sie den docker aus Befehl unten, um alle aufzulisten (ls --all ) Docker-Container. Beachten Sie alle Container mit einem STATUS von Vor (X) Y Stunden beendet . Alle diese Container werden derzeit gestoppt.

docker container ls --all

2. Führen Sie nun den docker container prune aus Befehl zum Entfernen aller gestoppten Container. Wenn dieser Befehl ausgeführt wird, sehen Sie, welche Container-IDs der Befehl entfernt hat.

docker container prune

3. Führen Sie abschließend docker container ls -a aus erneut, um zu sehen, dass jeder angehaltene Container entfernt wurde.

Wenn Sie eine oder mehrere Container-IDs lieber nicht manuell angeben möchten, können Sie Docker-Befehle auch mit $() verschachteln beide Container auflisten und in einer Zeile mit docker container rm $(docker container ls -aq) entfernen . Der docker container Befehl verwendet den q Wechseln Sie, um Container nicht an die Konsole zurückzugeben. Sobald Docker alle Container gesammelt hat, führt es docker container rm aus gegen jeden.

Entfernen von Docker-Containern durch Filterregeln

Vielleicht haben Sie viele verschiedene Container, und das Entfernen von ihnen nach ID wäre mühsam. Wenn sie alle gemeinsame Merkmale aufweisen, können Sie einen Filter erstellen, um nur Container zu entfernen, die einer bestimmten Suchanfrage entsprechen.

Verwenden Sie den filter, um mehrere Container zu entfernen, die einer bestimmten Abfrage entsprechen Parameter oder Filter-Flag auf dem docker container prune Befehl. Mit diesem Parameter können Sie entweder ein until angeben -Attribut zum Filtern von Containern, die vor einem Datum oder einem label erstellt wurden Argument, um Container mit/ohne ein bestimmtes Label abzugleichen.

Beispielsweise können Sie alle gestoppten Container entfernen, die länger als 10h erstellt wurden vor, indem Sie den folgenden Befehl ausführen.

docker container prune --filter "until=10h"

Geben Sie Y ein um das Entfernen des Docker-Containers zu bestätigen, wie unten gezeigt. Sobald die Entfernung abgeschlossen ist, sehen Sie, welche Container entfernt wurden und wie viel Speicherplatz insgesamt zurückgewonnen wurde.

Bereinigung von Containern durch Verschachtelung von Docker-Befehlen

Alle zuvor behandelten Befehle erforderten, dass Sie jeden Container vorher stoppen. Was aber, wenn die Container laufen? Anstatt jeden Container einzeln zu stoppen, können Sie stattdessen Docker-Befehle in einem Entfernungsbefehl verschachteln, um alle Container zu stoppen und gleichzeitig zu entfernen.

Treffen Sie zusätzliche Vorsichtsmaßnahmen, wenn Sie laufende Container entfernen. Das Entfernen kann sich auf einige Anwendungen oder Prozesse auswirken, die von diesem Docker-Container abhängig sind.

Der verschachtelte Docker ($(docker container ) Der folgende Befehl listet alle Container leise auf (-aq ) im Arbeitsspeicher, einschließlich der aktuell ausgeführten. Die Liste der Container wird dann an den äußeren docker übergeben Befehl zum Entfernen (rm ) die Container in der Liste.

Sie können unten sehen, dass die Ausführung des verschachtelten Befehls alle Container auf einmal entfernt, wie unten gezeigt. Wenn Sie also die Liste der Container überprüfen, erhalten Sie keine Ausgabe, da die Liste leer ist.

Automatisches Entfernen von Containern mit --rm Flagge

Die vorherigen Befehle werden verwendet, um Docker-Container erst zu entfernen, nachdem die Docker-Liste überladen wurde. Aber warum warten, bis die Docker-Liste vollgestopft ist? Wenn Sie ein „clean as you go“-Arbeitertyp sind, stehen Ihnen mit --rm vorbeugende Reinigungsmaßnahmen zur Verfügung Flagge.

Der --rm Flag in einem docker run Der Befehl ist praktisch, wenn Sie nur für kurze Zeit Dinge auf Ihrem Computer testen und keine kritischen Dateien oder Bereitstellungen in diesem Container handhaben.

Der docker run Die folgende Befehlssyntax fügt einen Docker-Container mit dem Namen Ihrer Wahl hinzu (container_name ) und ein Docker-Image (organization/base_image ) aus der Docker Hub-Bibliothek. Aber dann der --rm Flag entfernt den Container automatisch.

docker run --rm --name container_name organization/base_image

Docker-Volumes bereinigen

Docker besteht nicht nur aus Bildern und Containern. Das Docker-Ökosystem besteht auch aus Speichervolumes. Mit der gleichen allgemeinen Methode zum Suchen von IDs und Löschen von Elementen können Sie auch Speichervolumes bereinigen.

Führen Sie wie bei Containern und Bildern docker volume ls aus um alle Volume-IDs anzuzeigen, die Sie im System haben.

docker volume ls

Unten können Sie sehen, dass in diesem Tutorial drei Bände aufgelistet sind.

Führen Sie nun den docker aus Befehl unten, um alle unbenutzten Volumes zu löschen (volume prune ).

Um ungenutzte Docker-Netzwerke zu entfernen, führen Sie stattdessen diesen Befehl aus:docker network prune

docker volume prune

Unten sehen Sie, dass der Befehl alle lokalen Volumes entfernt, da sie zum Zeitpunkt des Löschvorgangs nicht verwendet wurden. Wenn Sie also alle Docker-Volumes auflisten, erhalten Sie nur eine leere Tabellenliste.

Alle nicht verwendeten Docker-Komponenten auf einmal entfernen

In diesem Tutorial haben Sie ausgewählt und ausgewählt, welche Docker-Komponenten entfernt werden sollen. Vielleicht arbeiten Sie in einer Testumgebung und möchten einfach alles auf einmal bereinigen. Anstatt jede Komponente einzeln zu bereinigen, bereinigen Sie alles mit docker system prune !

Das docker system prune Der Befehl entfernt nicht ausgeführte Container, nicht verwendete Netzwerke, nicht verwendete Images und den Build-Cache für die Docker-Engine.

docker system prune

Fügen Sie -f hinzu Flag, um die Warnmeldungen zu erzwingen oder zu unterdrücken und das Löschen von Docker-Systemelementen zu bestätigen, wie folgt:docker system prune -f

Unten sehen Sie eine Eingabeaufforderung, in der Sie gefragt werden, ob Sie mit dem Entfernen von Docker-Systemelementen fortfahren möchten oder nicht. Bestätigen Sie durch Eingabe von Y, um fortzufahren.

Schlussfolgerung

In diesem Tutorial haben Sie die zahlreichen Möglichkeiten zum Bereinigen von Docker-Images mit docker image prune erkundet Befehl, Container mit docker container rm entfernen , und mehr.

Warum entwickeln Sie mit diesem neu gewonnenen Wissen nicht Ihre eigenen bevorzugten Methoden zum Bereinigen Ihrer Docker-Images? Vielleicht ein Docker-Asset-Inventar oder ein gutes Tagging-System, mit dem Sie Ihre Projekte richtig benennen und das Löschen kritischer Images oder Container vermeiden können?


Docker
  1. So verschieben Sie Docker-Images zwischen Hosts

  2. Erstellen, markieren und laden Sie Ihr eigenes Docker-Image hoch

  3. So teilen Sie Docker-Images mit anderen

  4. So installieren Sie Nextcloud mit Docker auf Ihrem Linux-Server

  5. Automatisches Erstellen und Konfigurieren benutzerdefinierter Docker-Images mit Dockerfile – Teil 3

So aktualisieren Sie Docker-Images auf die neueste Version

So kopieren Sie Dateien mit Docker cp in Ihren Docker-Container

So verwenden Sie Docker Commit zum Ändern von Container-Images

Vollständige Anleitung zum Entfernen von Docker-Images

So erstellen Sie ein benutzerdefiniertes Docker-Image mit Dockerfile

Teilen von Docker-Images auf Docker Hub