Verwendung des docker compose rm Befehls zum Entfernen gestoppter Container

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 den Befehl docker compose rm verwenden, um beendete Container zu entfernen. Wir beginnen mit der Vorbereitung eines einfachen Docker Compose-Projekts, das die Installation von Docker Compose und die Erstellung einer docker-compose.yml-Datei umfasst, um einen grundlegenden Webdienst zu definieren.

Nach dem Projektaufbau werden Sie das Stoppen der Dienstcontainer üben. Der Kern des Labs konzentriert sich auf die Verwendung von docker compose rm zum Entfernen dieser beendeten Container. Dabei werden Szenarien ohne Volumes, mit anonymen Volumes behandelt und schließlich gezeigt, wie die Entfernung von Containern erzwungen werden kann.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) 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/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/ps -.-> lab-555090{{"Verwendung des docker compose rm Befehls zum Entfernen gestoppter Container"}} docker/stop -.-> lab-555090{{"Verwendung des docker compose rm Befehls zum Entfernen gestoppter Container"}} docker/rm -.-> lab-555090{{"Verwendung des docker compose rm Befehls zum Entfernen gestoppter Container"}} docker/pull -.-> lab-555090{{"Verwendung des docker compose rm Befehls zum Entfernen gestoppter Container"}} docker/volume -.-> lab-555090{{"Verwendung des docker compose rm Befehls zum Entfernen gestoppter Container"}} end

Ein einfaches Docker Compose-Projekt vorbereiten

In diesem Schritt bereiten wir ein einfaches Docker Compose-Projekt vor. Da Docker Compose in der LabEx-Umgebung nicht vorinstalliert ist, werden wir es zunächst installieren. Docker Compose ist ein Tool zum Definieren und Ausführen von Multi-Container-Docker-Anwendungen. Mit Compose verwenden Sie eine YAML-Datei, um die Dienste Ihrer Anwendung zu konfigurieren. Mit einem einzigen Befehl erstellen und starten Sie dann alle Dienste aus Ihrer Konfiguration.

Zuerst installieren wir Docker Compose. Wir laden die neueste stabile Version herunter und machen sie ausführbar.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Nach der Installation überprüfen wir die Installation, indem wir die Version prüfen.

docker-compose --version

Sie sollten die Versionsnummer in der Ausgabe sehen, was bestätigt, dass Docker Compose korrekt installiert ist.

Nun erstellen wir ein einfaches Docker Compose-Projekt. Wir erstellen ein Verzeichnis für unser Projekt und darin eine docker-compose.yml-Datei. Diese Datei definiert einen einfachen Webdienst mit dem nginx-Image.

Navigieren Sie zum Projektverzeichnis.

cd ~/project

Erstellen Sie ein neues Verzeichnis für unser Projekt, z.B. my-web-app.

mkdir my-web-app
cd my-web-app

Erstellen Sie nun die docker-compose.yml-Datei mit dem nano-Editor.

nano docker-compose.yml

Fügen Sie folgenden Inhalt in die docker-compose.yml-Datei ein:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Diese docker-compose.yml-Datei definiert einen Dienst namens web. Dieser Dienst verwendet das nginx:latest-Docker-Image und mappt Port 80 auf dem Host auf Port 80 im Container.

Speichern Sie die Datei mit Strg + X, dann Y und Enter.

Nun können wir die in der docker-compose.yml-Datei definierten Dienste mit dem Befehl docker-compose up starten. Das Flag -d führt die Container im Detached-Modus aus, d.h. sie laufen im Hintergrund.

docker-compose up -d

Dieser Befehl lädt das nginx:latest-Image (falls nicht bereits vorhanden) und startet einen Container für den web-Dienst.

Sie können den Status der laufenden Container mit dem Befehl docker ps überprüfen.

docker ps

Sie sollten einen Container namens my-web-app_web_1 (oder ähnlich, abhängig vom Verzeichnisnamen) sehen, der läuft und Port 80 weiterleitet.

Um zu überprüfen, ob der Webserver läuft, können Sie curl verwenden.

curl http://localhost

Sie sollten die HTML-Seite der standardmäßigen Nginx-Begrüßungsseite in der Ausgabe sehen. Dies bestätigt, dass unser einfaches Docker Compose-Projekt korrekt eingerichtet und in Betrieb ist.

Dienst-Container anhalten

Im vorherigen Schritt haben wir unseren einfachen Webdienst mit docker-compose up -d gestartet. Der Container läuft nun im Hintergrund. In diesem Schritt lernen wir, wie man laufende Dienst-Container mit Docker Compose anhalten kann.

Um die in der docker-compose.yml-Datei definierten laufenden Container anzuhalten, verwenden wir den Befehl docker-compose stop. Dieser Befehl sendet ein SIGTERM-Signal an die Container, wodurch sie ordnungsgemäß herunterfahren können.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-web-app befinden, wo sich Ihre docker-compose.yml-Datei befindet.

cd ~/project/my-web-app

Führen Sie nun den Befehl docker-compose stop aus.

docker-compose stop

Sie sehen eine Ausgabe, die anzeigt, dass der Container angehalten wird.

Nach Ausführung des stop-Befehls werden die Container angehalten, aber nicht entfernt. Dies können Sie überprüfen, indem Sie alle Container einschließlich der angehaltenen mit dem Befehl docker ps -a auflisten.

docker ps -a

Sie sollten den Container my-web-app_web_1 mit dem Status Exited sehen. Dies bestätigt, dass der Container erfolgreich angehalten wurde.

Wenn Sie versuchen, den Webserver erneut mit curl aufzurufen, sollte dies fehlschlagen, da der Container angehalten ist.

curl http://localhost

Sie sollten einen Verbindungsfehler sehen, was darauf hinweist, dass der Webdienst nicht mehr läuft.

Das Anhalten von Containern ist nützlich, wenn Sie Ihre Dienste vorübergehend stoppen möchten, ohne deren Konfiguration oder Daten zu entfernen. In den nächsten Schritten werden wir untersuchen, wie man diese angehaltenen Container entfernt.

Angehaltene Dienst-Container ohne Volumes entfernen

Im vorherigen Schritt haben wir den laufenden Container mit docker-compose stop angehalten. Der Container befindet sich nun im Zustand Exited. In diesem Schritt lernen wir, wie man diese angehaltenen Container mit Docker Compose entfernt.

Um die in der docker-compose.yml-Datei definierten angehaltenen Container zu entfernen, verwenden wir den Befehl docker-compose rm. Standardmäßig entfernt dieser Befehl nur angehaltene Dienst-Container. Er entfernt keine Volumes oder Netzwerke.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-web-app befinden, wo sich Ihre docker-compose.yml-Datei befindet.

cd ~/project/my-web-app

Führen Sie nun den Befehl docker-compose rm aus. Sie werden aufgefordert, die Entfernung zu bestätigen. Geben Sie y ein und drücken Sie Enter.

docker-compose rm

Sie sehen eine Ausgabe, die anzeigt, dass der Container entfernt wird.

Nach Ausführung des rm-Befehls sollte der Container entfernt sein. Dies können Sie überprüfen, indem Sie alle Container einschließlich der angehaltenen mit dem Befehl docker ps -a auflisten.

docker ps -a

Sie sollten den Container my-web-app_web_1 nicht mehr in der Liste sehen. Dies bestätigt, dass der Container erfolgreich entfernt wurde.

Das Entfernen angehaltener Container hilft, Ihr System aufzuräumen und Ressourcen freizugeben. In den nächsten Schritten werden wir untersuchen, wie man mit Volumes beim Entfernen von Containern umgeht.

Angehaltene Dienst-Container mit anonymen Volumes entfernen

Im vorherigen Schritt haben wir den angehaltenen Container entfernt. Nun wollen wir untersuchen, wie man Container zusammen mit ihren zugehörigen anonymen Volumes entfernt. Anonyme Volumes sind Volumes, die nicht explizit in der docker-compose.yml-Datei benannt sind. Docker weist ihnen automatisch einen zufälligen Namen zu.

Zuerst passen wir unsere docker-compose.yml-Datei an, um ein anonymes Volume einzubinden. Wir werden dem web-Service ein Volume hinzufügen.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-web-app befinden.

cd ~/project/my-web-app

Bearbeiten Sie die docker-compose.yml-Datei.

nano docker-compose.yml

Fügen Sie den volumes-Abschnitt zur web-Service-Definition hinzu. Wir binden ein anonymes Volume an /usr/share/nginx/html im Container. Dies ist der Ort, an dem Nginx seine Standardinhalte bereitstellt.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - /usr/share/nginx/html

Speichern Sie die Datei mit Strg + X, dann Y und Enter.

Starten wir den Dienst nun erneut. Dadurch wird ein neuer Container und ein anonymes Volume erstellt.

docker-compose up -d

Sie können die von Docker erstellten Volumes mit dem Befehl docker volume ls auflisten. Sie sollten ein Volume mit einem langen, zufällig generierten Namen sehen, das mit Ihrem Projekt verknüpft ist.

docker volume ls

Halten Sie nun die Dienst-Container wieder an.

docker-compose stop

Überprüfen Sie mit docker ps -a, dass der Container angehalten wurde.

docker ps -a

Sie sollten den Container my-web-app_web_1 im Zustand Exited sehen.

Um die angehaltenen Container und ihre zugehörigen anonymen Volumes zu entfernen, verwenden wir den Befehl docker-compose rm mit dem -v-Flag.

docker-compose rm -v

Sie werden aufgefordert, die Entfernung zu bestätigen. Geben Sie y ein und drücken Sie Enter.

Nach Ausführung des Befehls überprüfen Sie mit docker ps -a, dass der Container entfernt wurde.

docker ps -a

Der Container my-web-app_web_1 sollte nicht mehr aufgeführt sein.

Überprüfen Sie nun die Volumes erneut mit docker volume ls.

docker volume ls

Das anonyme Volume, das für den web-Service erstellt wurde, sollte ebenfalls entfernt sein. Dies zeigt, wie das -v-Flag anonyme Volumes zusammen mit den Containern entfernt.

Laufende Dienst-Container gewaltsam entfernen

In den vorherigen Schritten haben wir Container gestoppt und entfernt. Manchmal müssen Sie Container entfernen, selbst wenn sie noch laufen. Hier kommt die Option zur gewaltsamen Entfernung ins Spiel.

Starten wir zunächst unseren Dienst erneut.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-web-app befinden.

cd ~/project/my-web-app

Starten Sie den Dienst im Detached-Modus.

docker-compose up -d

Überprüfen Sie mit docker ps, dass der Container läuft.

docker ps

Sie sollten den Container my-web-app_web_1 mit dem Status Up sehen.

Versuchen wir nun, den laufenden Container zu entfernen, ohne ihn vorher zu stoppen. Wenn Sie versuchen, docker-compose rm auf einen laufenden Container anzuwenden, schlägt dies fehl.

docker-compose rm

Sie erhalten eine Fehlermeldung, die anzeigt, dass der Container läuft und nicht entfernt werden kann.

Um laufende Container gewaltsam zu entfernen, verwenden wir den Befehl docker-compose rm mit dem -f-Flag. Dieses Flag erzwingt die Entfernung ohne Bestätigung und ohne den Container ordnungsgemäß zu stoppen.

docker-compose rm -f

Sie sehen eine Ausgabe, die anzeigt, dass der Container entfernt wird. Beachten Sie, dass Sie diesmal nicht zur Bestätigung aufgefordert wurden.

Nach Ausführung des Befehls überprüfen Sie mit docker ps -a, dass der Container entfernt wurde.

docker ps -a

Der Container my-web-app_web_1 sollte nicht mehr aufgeführt sein. Dies bestätigt, dass der Container gewaltsam entfernt wurde, obwohl er lief.

Die gewaltsame Entfernung sollte mit Vorsicht verwendet werden, da sie zu Datenverlust führen kann, wenn der Container Daten in ein Volume schrieb, das nicht explizit verwaltet wird.

Damit schließen wir unsere Untersuchung zum Entfernen von Docker Compose-Dienstcontainern. Sie haben gelernt, wie man Container stoppt, angehaltene Container ohne Volumes entfernt, angehaltene Container mit anonymen Volumes entfernt und laufende Container gewaltsam entfernt.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man den Befehl docker compose rm verwendet, um gestoppte Container zu entfernen. Wir begannen mit der Vorbereitung eines einfachen Docker Compose-Projekts, das die Installation von Docker Compose und die Erstellung einer docker-compose.yml-Datei umfasste, um einen grundlegenden Webdienst mit dem Nginx-Image zu definieren.

Anschließend haben wir geübt, die Dienst-Container zu stoppen und sie dann mit docker compose rm zu entfernen. Wir haben verschiedene Szenarien untersucht, darunter das Entfernen gestoppter Container ohne Volumes, das Entfernen gestoppter Container mit anonymen Volumes und die Verwendung der Force-Option zum Entfernen von Containern. Diese praktische Übung demonstrierte die Anwendung des Befehls docker compose rm zur Verwaltung des Lebenszyklus von Containern in einem Docker Compose-Projekt.