Wie man den docker container prune Befehl verwendet, um gestoppte Container zu entfernen

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie Ihre Docker-Umgebung effektiv verwalten können, indem Sie angehaltene Container mit dem Befehl docker container prune entfernen. Wir beginnen damit, mehrere Container zu erstellen und zu stoppen, um ein reales Szenario zu simulieren. Anschließend werden Sie verschiedene Methoden erkunden, um diese angehaltenen Container zu bereinigen – einschließlich der Entfernung aller Container, der Entfernung von Containern, die vor einem bestimmten Zeitpunkt erstellt wurden, und der selektiven Entfernung von Containern basierend auf Labels. Diese praktische Übung vermittelt Ihnen die Fähigkeiten, Ihr Docker-System sauber und optimiert zu halten.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") subgraph Lab Skills docker/run -.-> lab-555117{{"Wie man den docker container prune Befehl verwendet, um gestoppte Container zu entfernen"}} docker/ps -.-> lab-555117{{"Wie man den docker container prune Befehl verwendet, um gestoppte Container zu entfernen"}} docker/stop -.-> lab-555117{{"Wie man den docker container prune Befehl verwendet, um gestoppte Container zu entfernen"}} docker/rm -.-> lab-555117{{"Wie man den docker container prune Befehl verwendet, um gestoppte Container zu entfernen"}} docker/pull -.-> lab-555117{{"Wie man den docker container prune Befehl verwendet, um gestoppte Container zu entfernen"}} docker/prune -.-> lab-555117{{"Wie man den docker container prune Befehl verwendet, um gestoppte Container zu entfernen"}} end

Container erstellen und anhalten

In diesem Schritt lernen Sie, wie Docker-Container erstellt und gestoppt werden. Docker-Container sind leichtgewichtige, portable und eigenständige Einheiten, die alles enthalten, was zum Ausführen einer Anwendung benötigt wird.

Zuerst laden wir ein Docker-Image herunter, das wir zur Erstellung von Containern verwenden werden. Wir nutzen das ubuntu-Image, ein minimales Ubuntu-Betriebssystem.

docker pull ubuntu

Die Ausgabe zeigt den Download-Fortschritt des Images an.

Using default tag: latest
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

Nachdem das Image vorhanden ist, erstellen wir einen Container daraus. Der Befehl docker run wird mit dem Flag -d verwendet, um den Container im Hintergrund (detached mode) zu starten, und --name vergibt einen Namen.

docker run -d --name my-ubuntu-container ubuntu sleep infinity

Dieser Befehl erstellt einen Container namens my-ubuntu-container aus dem ubuntu-Image und führt den Befehl sleep infinity aus, wodurch der Container dauerhaft läuft.

Die Ausgabe zeigt die Container-ID als lange Zeichenkette.

<container_id>

Mit docker ps können wir überprüfen, ob der Container läuft.

docker ps

Die Liste zeigt alle aktiven Container, inklusive my-ubuntu-container.

CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu         "sleep infinity"   X seconds ago   Up X seconds             my-ubuntu-container

Nun erstellen wir einen zweiten Container ohne expliziten Namen – Docker vergibt automatisch einen.

docker run -d ubuntu sleep infinity

Erneut wird die Container-ID ausgegeben.

<container_id>

Mit docker ps sehen wir beide laufenden Container.

docker ps
CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu         "sleep infinity"   X seconds ago   Up X seconds             my-ubuntu-container
<container_id>   ubuntu         "sleep infinity"   X seconds ago   Up X seconds             <random_name>

Nun stoppen wir my-ubuntu-container mit docker stop:

docker stop my-ubuntu-container

Die Ausgabe bestätigt den Stopp:

my-ubuntu-container

docker ps zeigt nun nur noch den zweiten Container:

docker ps

Mit docker ps -a werden alle Container (auch gestoppte) angezeigt:

docker ps -a
CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu         "sleep infinity"   X minutes ago   Exited (0) X seconds ago              my-ubuntu-container
<container_id>   ubuntu         "sleep infinity"   X minutes ago   Up X minutes                          <random_name>

Zum Schluss stoppen wir den zweiten Container über seine ID (ersetzten Sie <container_id>):

docker stop <container_id>
<container_id>

Ein letztes docker ps -a bestätigt, dass beide Container gestoppt sind:

docker ps -a
CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu         "sleep infinity"   X minutes ago   Exited (0) X seconds ago              my-ubuntu-container
<container_id>   ubuntu         "sleep infinity"   X minutes ago   Exited (0) X seconds ago              <random_name>

Alle gestoppten Container bereinigen

Im vorherigen Schritt haben wir zwei Container erstellt und gestoppt. Gestoppte Container belegen weiterhin Speicherplatz und Ressourcen. In diesem Schritt lernen Sie, wie Sie alle gestoppten Container mit dem Befehl docker container prune entfernen können.

Zuerst listen wir alle Container inklusive der gestoppten auf, um zu sehen, welche wir entfernen werden.

docker ps -a

Sie sollten die beiden im vorherigen Schritt gestoppten Container sehen.

CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu         "sleep infinity"   X minutes ago   Exited (0) X minutes ago              my-ubuntu-container
<container_id>   ubuntu         "sleep infinity"   X minutes ago   Exited (0) X minutes ago              <random_name>

Nun bereinigen wir alle gestoppten Container. Der Befehl docker container prune entfernt sämtliche gestoppte Container.

docker container prune

Docker fordert eine Bestätigung vor dem Entfernen der Container an. Geben Sie y ein und drücken Sie Enter, um fortzufahren.

WARNUNG! Dadurch werden alle gestoppten Container entfernt.
Möchten Sie fortfahren? [y/N] y

Die Ausgabe zeigt die entfernten Container und den freigegebenen Speicherplatz an.

Gelöschte Container:
<container_id>
<container_id>

Insgesamt freigegebener Speicherplatz: XMB

Um zu überprüfen, ob die gestoppten Container entfernt wurden, listen wir erneut alle Container auf.

docker ps -a

Diesmal sollte keine Ausgabe erscheinen, was bedeutet, dass keine Container (weder laufende noch gestoppte) mehr vorhanden sind.

CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS         PORTS     NAMES

Gestoppte Container vor bestimmter Zeit bereinigen

Im vorherigen Schritt haben wir gelernt, wie man alle gestoppten Container bereinigt. Manchmal möchte man jedoch nur Container entfernen, die vor einem bestimmten Zeitpunkt erstellt wurden. Dies ist nützlich, um ältere Container zu bereinigen, während neuere erhalten bleiben. In diesem Schritt lernen wir, wie man gestoppte Container vor einem bestimmten Zeitpunkt mit dem --filter-Flag und dem until-Filter bereinigt.

Zuerst erstellen wir einige Container und stoppen sie, damit wir etwas zum Bereinigen haben.

docker run -d --name container-old-1 ubuntu sleep infinity
docker run -d --name container-old-2 ubuntu sleep infinity

Warten Sie einige Sekunden, dann erstellen Sie einen weiteren Container. Dies wird unser "neuerer" Container sein.

sleep 5
docker run -d --name container-new-1 ubuntu sleep infinity

Nun stoppen wir alle Container.

docker stop container-old-1 container-old-2 container-new-1

Listen Sie alle Container auf, um deren Status und Erstellungszeit zu sehen.

docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.CreatedAt}}"

Die Ausgabe sollte ähnlich aussehen, mit unterschiedlichen Erstellungszeiten:

container-old-1	Exited (0) X seconds ago	YYYY-MM-DD HH:MM:SS +0000 UTC
container-old-2	Exited (0) X seconds ago	YYYY-MM-DD HH:MM:SS +0000 UTC
container-new-1	Exited (0) X seconds ago	YYYY-MM-DD HH:MM:SS +0000 UTC

Jetzt bereinigen wir die gestoppten Container, die vor einem bestimmten Zeitpunkt erstellt wurden. Wir verwenden den until-Filter mit dem docker container prune-Befehl. Der until-Filter akzeptiert einen Zeitstempel oder eine Zeitspanne. Für dieses Beispiel verwenden wir eine Zeitspanne und geben an, dass wir Container entfernen möchten, die vor mehr als 10 Sekunden erstellt wurden.

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

Docker fordert eine Bestätigung an. Geben Sie y ein und drücken Sie Enter.

WARNUNG! Dadurch werden alle gestoppten Container entfernt.
Möchten Sie fortfahren? [y/N] y

Die Ausgabe zeigt, dass die älteren Container entfernt wurden. Der neuere Container sollte nicht in der Liste der gelöschten Container erscheinen.

Gelöschte Container:
<container_id_old_1>
<container_id_old_2>

Insgesamt freigegebener Speicherplatz: XMB

Um zu überprüfen, dass nur die älteren Container entfernt wurden, listen Sie erneut alle Container auf.

docker ps -a --format "{{.Names}}\t{{.Status}}"

Es sollte nur container-new-1 mit dem Status Exited angezeigt werden.

container-new-1	Exited (0) X seconds ago

Gestoppte Container mit spezifischem Label bereinigen

In den vorherigen Schritten haben wir gelernt, wie man alle gestoppten Container und gestoppte Container basierend auf ihrer Erstellungszeit bereinigt. In diesem Schritt werden wir eine weitere nützliche Methode zum Filtern von Containern für die Bereinigung untersuchen: die Verwendung von Labels. Labels sind Schlüssel-Wert-Paare, die Sie Docker-Objekten (einschließlich Containern) zuordnen können, um sie zu organisieren und zu verwalten.

Zuerst erstellen wir einige Container mit verschiedenen Labels.

docker run -d --name container-label-app --label app=frontend ubuntu sleep infinity
docker run -d --name container-label-env --label env=development ubuntu sleep infinity
docker run -d --name container-no-label ubuntu sleep infinity

Nun stoppen wir alle Container.

docker stop container-label-app container-label-env container-no-label

Listen Sie alle Container und ihre Labels auf, um die zugewiesenen Labels zu sehen.

docker ps -a --format "{{.Names}}\t{{.Labels}}"

Die Ausgabe sollte ähnlich aussehen:

container-label-app	app=frontend
container-label-env	env=development
container-no-label

Jetzt bereinigen wir nur die gestoppten Container mit dem Label app=frontend. Wir verwenden dazu das --filter-Flag mit dem label-Filter.

docker container prune --filter "label=app=frontend"

Docker fordert eine Bestätigung an. Geben Sie y ein und drücken Sie Enter.

WARNUNG! Dadurch werden alle gestoppten Container entfernt.
Möchten Sie fortfahren? [y/N] y

Die Ausgabe sollte anzeigen, dass der Container mit dem Label app=frontend entfernt wurde.

Gelöschte Container:
<container_id_app_frontend>

Insgesamt freigegebener Speicherplatz: XMB

Um zu überprüfen, dass nur der Container mit dem app=frontend-Label entfernt wurde, listen Sie erneut alle Container auf.

docker ps -a --format "{{.Names}}\t{{.Labels}}"

Jetzt sollten nur noch die Container mit dem env=development-Label und ohne Label angezeigt werden.

container-label-env	env=development
container-no-label

Sie können auch Container bereinigen, die kein bestimmtes Label haben, indem Sie dem Label-Filter das Präfix ! voranstellen. Lassen Sie uns den Container bereinigen, der nicht das Label env=development hat.

docker container prune --filter "label!=env=development"

Bestätigen Sie die Entfernung durch Eingabe von y und Drücken von Enter.

WARNUNG! Dadurch werden alle gestoppten Container entfernt.
Möchten Sie fortfahren? [y/N] y

Die Ausgabe sollte anzeigen, dass der Container ohne env=development-Label entfernt wurde.

Gelöschte Container:
<container_id_no_label>

Insgesamt freigegebener Speicherplatz: XMB

Listen Sie abschließend alle Container ein letztes Mal auf, um zu bestätigen, dass nur der Container mit dem env=development-Label übrig bleibt.

docker ps -a --format "{{.Names}}\t{{.Labels}}"

Es sollte nur noch container-label-env angezeigt werden.

container-label-env	env=development

Zusammenfassung

In diesem Lab haben wir gelernt, wie man Docker-Container mit den Befehlen docker run und docker stop erstellt und stoppt, sowie wie man laufende Container mit docker ps auflistet. Anschließend haben wir den Befehl docker container prune untersucht, um gestoppte Container effizient zu entfernen. Konkret haben wir geübt:

  1. Alle gestoppten Container zu bereinigen
  2. Gestoppte Container zu entfernen, die vor einem bestimmten Zeitpunkt erstellt wurden (mit der --filter until-Option)
  3. Selektiv gestoppte Container basierend auf Labels zu entfernen (mit der --filter label-Option)

Diese Schritte demonstrierten praktische Methoden zur Verwaltung und Bereinigung gestoppter Container in einer Docker-Umgebung.