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 mitdocker container rm $(docker container ls -aq)
entfernen . Derdocker container
Befehl verwendet denq
Wechseln Sie, um Container nicht an die Konsole zurückzugeben. Sobald Docker alle Container gesammelt hat, führt esdocker 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?