Wie man den docker compose wait Befehl verwendet, um zu blockieren bis Services stoppen

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 wait effektiv nutzen können, um den Lebenszyklus Ihrer Docker Compose Services zu verwalten. Wir beginnen mit der Erstellung einer grundlegenden docker-compose.yml-Datei mit mehreren Services und beobachten deren Ausgangszustand nach dem Start.

Anschließend erkunden Sie die Kernfunktionalität von docker compose wait, um die Ausführung zu blockieren, bis alle Services innerhalb Ihres Projekts gestoppt wurden. Wir demonstrieren dann, wie Sie diesen Befehl verwenden können, um auf das Stoppen bestimmter Services zu warten, und schließlich, wie Sie docker compose wait mit der Option --down-project für einen vollständigen Projekt-Shutdown und Wartevorgang kombinieren können.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/ps -.-> lab-555097{{"Wie man den docker compose wait Befehl verwendet, um zu blockieren bis Services stoppen"}} docker/stop -.-> lab-555097{{"Wie man den docker compose wait Befehl verwendet, um zu blockieren bis Services stoppen"}} docker/rm -.-> lab-555097{{"Wie man den docker compose wait Befehl verwendet, um zu blockieren bis Services stoppen"}} docker/logs -.-> lab-555097{{"Wie man den docker compose wait Befehl verwendet, um zu blockieren bis Services stoppen"}} docker/create -.-> lab-555097{{"Wie man den docker compose wait Befehl verwendet, um zu blockieren bis Services stoppen"}} docker/volume -.-> lab-555097{{"Wie man den docker compose wait Befehl verwendet, um zu blockieren bis Services stoppen"}} end

Erstellen einer einfachen docker-compose.yml mit mehreren Services

In diesem Schritt erstellen wir eine einfache docker-compose.yml-Datei, die zwei Services definiert. Bevor wir beginnen, müssen wir Docker Compose installieren, da es in dieser Umgebung nicht vorinstalliert ist.

Zuerst laden wir die Docker Compose Binary herunter. Wir verwenden Version v2.20.2, die mit der installierten Docker-Version kompatibel ist.

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

Dieser Befehl lädt die Docker Compose Binary von der offiziellen GitHub Releases-Seite herunter und speichert sie unter /usr/local/bin/docker-compose. Die Teile $(uname -s) und $(uname -m) erkennen automatisch Ihr Betriebssystem und die Architektur.

Als nächstes müssen wir der heruntergeladenen Binary Ausführungsrechte erteilen.

sudo chmod +x /usr/local/bin/docker-compose

Nun überprüfen wir, ob Docker Compose korrekt installiert wurde, indem wir die Version abfragen.

docker-compose version

Sie sollten eine Ausgabe sehen, die die installierte Docker Compose-Version anzeigt.

Nachdem Docker Compose nun installiert ist, können wir unsere docker-compose.yml-Datei erstellen. Diese Datei verwendet das YAML-Format, um die Services, Netzwerke und Volumes für Ihre Anwendung zu definieren. Wir erstellen eine einfache Datei mit zwei Services: einem Web-Server und einer Datenbank.

Navigieren Sie zu Ihrem Projektverzeichnis.

cd ~/project

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

nano docker-compose.yml

Fügen Sie folgenden Inhalt in den Editor ein:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: mysecretpassword

Lassen Sie uns diese Datei aufschlüsseln:

  • version: '3.8' gibt die Docker Compose-Dateiformatversion an.
  • services: definiert die verschiedenen Services, die Ihre Anwendung ausmachen.
  • web: definiert einen Service namens web.
    • image: nginx:latest gibt an, dass dieser Service das neueste nginx-Image von Docker Hub verwendet.
    • ports: bildet Port 80 auf dem Host auf Port 80 im web-Container ab, sodass Sie vom Browser aus auf den Web-Server zugreifen können.
  • db: definiert einen Service namens db.
    • image: postgres:latest gibt an, dass dieser Service das neueste postgres-Image von Docker Hub verwendet.
    • environment: setzt Umgebungsvariablen im Container. Hier setzen wir das für das PostgreSQL-Image erforderliche POSTGRES_PASSWORD.

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

Sie haben nun erfolgreich eine docker-compose.yml-Datei mit zwei definierten Services erstellt.

Services starten und ihren Status überprüfen

In diesem Schritt werden wir die in unserer docker-compose.yml-Datei definierten Services starten und ihren Status beobachten.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project befinden, in dem Sie die docker-compose.yml-Datei erstellt haben.

cd ~/project

Verwenden Sie nun den Befehl docker-compose up, um die Services zu starten. Das Flag -d führt die Container im Detached-Modus aus, was bedeutet, dass sie im Hintergrund laufen.

docker-compose up -d

Wenn Sie diesen Befehl zum ersten Mal ausführen, lädt Docker Compose die erforderlichen Images (nginx:latest und postgres:latest) herunter, falls sie nicht bereits auf Ihrem System vorhanden sind. Dies kann je nach Internetverbindung einige Zeit dauern. Nach dem Download werden die Container für die Services web und db erstellt und gestartet.

Sie sollten eine Ausgabe sehen, die anzeigt, dass Netzwerke, Volumes (falls definiert, was in unserem einfachen Beispiel nicht der Fall ist) und Container erstellt und gestartet werden.

Um den Status der laufenden Services zu überprüfen, verwenden Sie den Befehl docker-compose ps.

docker-compose ps

Dieser Befehl listet die von Docker Compose im aktuellen Verzeichnis verwalteten Container auf. Sie sollten sowohl den web- als auch den db-Service mit ihrem Status sehen, der Up sein sollte.

Sie können auch den Standardbefehl docker ps verwenden, um alle laufenden Container auf Ihrem System anzuzeigen, einschließlich der von Docker Compose gestarteten.

docker ps

Suchen Sie nach Containern, deren Namen mit dem Verzeichnisnamen (project in diesem Fall) gefolgt vom Servicenamen (z.B. project-web-1, project-db-1) beginnen.

Um die Logs der Services anzuzeigen, können Sie den Befehl docker-compose logs verwenden. Zum Beispiel, um die Logs für den web-Service anzuzeigen:

docker-compose logs web

Und für den db-Service:

docker-compose logs db

Dies ist nützlich für Debugging-Zwecke und um zu verstehen, was in Ihren Containern passiert.

Sie haben nun erfolgreich die in Ihrer docker-compose.yml-Datei definierten Services gestartet und ihren Status mit docker-compose ps überprüft.

Verwendung von docker compose wait zum Blockieren bis Services stoppen

In diesem Schritt untersuchen wir den Befehl docker compose wait, der verwendet wird, um zu blockieren, bis Services einen bestimmten Zustand erreichen. Standardmäßig wartet docker compose wait darauf, dass Services stoppen.

Stellen Sie zunächst sicher, dass Ihre Services aus dem vorherigen Schritt noch laufen. Sie können dies mit docker-compose ps überprüfen.

cd ~/project
docker-compose ps

Sie sollten sowohl den web- als auch den db-Service mit dem Status Up aufgelistet sehen.

Öffnen Sie nun ein neues Terminalfenster oder einen neuen Tab. Lassen Sie das aktuelle Terminalfenster geöffnet, da wir es später zum Stoppen der Services verwenden werden.

Navigieren Sie im neuen Terminalfenster zum Verzeichnis ~/project.

cd ~/project

Führen Sie den Befehl docker compose wait aus. Dieser Befehl blockiert und wartet, bis alle in der docker-compose.yml-Datei im aktuellen Verzeichnis definierten Services gestoppt wurden.

docker compose wait

Sie werden feststellen, dass dieser Befehl scheinbar hängt. Dies ist erwartet, da die Services derzeit laufen. Der docker compose wait-Befehl wartet darauf, dass sie stoppen.

Wechseln Sie nun zurück zu Ihrem ursprünglichen Terminalfenster, in dem die Services laufen. Wir werden die Services mit dem Befehl docker-compose down stoppen. Dieser Befehl stoppt und entfernt die Container, Netzwerke und Volumes, die von docker-compose up erstellt wurden.

cd ~/project
docker-compose down

Beobachten Sie die Ausgabe im ursprünglichen Terminalfenster. Sie werden Meldungen sehen, die anzeigen, dass die Container gestoppt und entfernt werden.

Wechseln Sie nun zurück zum neuen Terminalfenster, in dem Sie docker compose wait ausgeführt haben. Da die Services durch den docker-compose down-Befehl im anderen Terminal gestoppt wurden, erkennt der docker compose wait-Befehl in diesem Fenster, dass die Services gestoppt wurden, und wird beendet.

Sie sollten sehen, dass die Eingabeaufforderung im neuen Terminalfenster zurückkehrt. Dies demonstriert, wie docker compose wait blockiert, bis die angegebenen Services (standardmäßig alle Services) gestoppt wurden.

Sie haben erfolgreich docker compose wait verwendet, um zu blockieren, bis alle Services in Ihrem Projekt gestoppt wurden.

Verwendung von docker compose wait mit spezifischen Services

Im vorherigen Schritt haben wir docker compose wait verwendet, um auf das Stoppen aller Services zu warten. In diesem Schritt lernen wir, wie man docker compose wait nutzt, um auf bestimmte Services in einem bestimmten Zustand zu warten.

Starten wir zunächst unsere Services erneut mit docker-compose up -d. Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project befinden.

cd ~/project
docker-compose up -d

Überprüfen Sie mit docker-compose ps, dass beide Services laufen.

docker-compose ps

Öffnen Sie nun ein neues Terminalfenster oder einen neuen Tab. Wir werden dieses neue Terminal verwenden, um das Warten auf einen spezifischen Service zu demonstrieren.

Navigieren Sie im neuen Terminalfenster zum Verzeichnis ~/project.

cd ~/project

Wir können angeben, auf welche Services gewartet werden soll, indem wir deren Namen nach dem docker compose wait-Befehl angeben. Zum Beispiel, um nur auf das Stoppen des web-Services zu warten:

docker compose wait web

Ähnlich wie im vorherigen Schritt blockiert dieser Befehl, da der web-Service derzeit läuft.

Wechseln Sie nun zurück zu Ihrem ursprünglichen Terminalfenster. Wir werden nur den web-Service stoppen. Dazu können wir den docker stop-Befehl mit dem Containernamen verwenden. Den Containernamen finden Sie mit docker ps. Er wird wahrscheinlich project-web-1 lauten.

cd ~/project
docker stop project-web-1

Ersetzen Sie project-web-1 durch den tatsächlichen Containernamen, falls dieser abweicht.

Beobachten Sie die Ausgabe im ursprünglichen Terminalfenster. Sie sehen eine Meldung, die anzeigt, dass der web-Container gestoppt wird.

Wechseln Sie nun zurück zum neuen Terminalfenster, in dem Sie docker compose wait web ausgeführt haben. Da der web-Service gestoppt wurde, erkennt der docker compose wait web-Befehl dies und wird beendet.

Sie sollten sehen, dass die Eingabeaufforderung im neuen Terminalfenster zurückkehrt. Beachten Sie, dass der docker compose wait web-Befehl beendet wurde, obwohl der db-Service noch läuft.

Um zu bestätigen, dass der db-Service noch läuft, wechseln Sie zurück zum ursprünglichen Terminal und führen Sie docker-compose ps aus.

cd ~/project
docker-compose ps

Sie sollten den db-Service mit dem Status Up sehen, während der web-Service nicht mehr aufgelistet ist oder einen gestoppten Status anzeigt.

Stoppen Sie abschließend den verbleibenden db-Service.

cd ~/project
docker-compose down

Sie haben erfolgreich docker compose wait verwendet, um zu blockieren, bis ein spezifischer Service gestoppt wurde.

Verwendung von docker compose wait mit der --down-project Option

In diesem letzten Schritt untersuchen wir die --down-project Option mit docker compose wait. Diese Option ist nützlich, wenn Sie auf das Stoppen der Services warten und anschließend automatisch das gesamte Projekt herunterfahren möchten.

Stellen Sie zunächst sicher, dass unsere Services aus dem vorherigen Schritt gestoppt sind. Sie können dies mit docker-compose ps überprüfen.

cd ~/project
docker-compose ps

Falls noch Services laufen, stoppen Sie diese mit docker-compose down.

docker-compose down

Starten wir nun die Services erneut im Detached-Modus.

cd ~/project
docker-compose up -d

Überprüfen Sie, dass beide Services laufen.

docker-compose ps

Nun verwenden wir den docker compose wait Befehl mit der --down-project Option. Dieser Befehl wartet darauf, dass alle Services stoppen und führt anschließend automatisch docker-compose down aus.

docker compose wait --down-project

Ähnlich wie bei den vorherigen Verwendungen von docker compose wait blockiert dieser Befehl, da die Services derzeit laufen.

Öffnen Sie nun ein neues Terminalfenster oder einen neuen Tab. In diesem neuen Terminal werden wir die Services manuell stoppen.

Navigieren Sie im neuen Terminalfenster zum Verzeichnis ~/project.

cd ~/project

Stoppen Sie die Services mit docker-compose down.

docker-compose down

Beobachten Sie die Ausgabe im neuen Terminalfenster. Sie sehen Meldungen, die anzeigen, dass die Container gestoppt und entfernt werden.

Wechseln Sie nun zurück zum ursprünglichen Terminalfenster, in dem Sie docker compose wait --down-project ausgeführt haben. Da die Services durch den docker-compose down Befehl im anderen Terminal gestoppt wurden, erkennt dies der docker compose wait Befehl. Da die --down-project Option verwendet wurde, fährt er automatisch fort, das Projekt herunterzufahren, was in diesem Fall bedeutet, dass die Container, Netzwerke und Volumes entfernt werden.

Sie sollten im ursprünglichen Terminalfenster eine ähnliche Ausgabe sehen wie beim manuellen Ausführen von docker-compose down. Nachdem das Projekt heruntergefahren wurde, wird der docker compose wait Befehl beendet.

Sie haben erfolgreich docker compose wait mit der --down-project Option verwendet, um auf das Stoppen der Services zu warten und anschließend automatisch das Projekt herunterzufahren.

Zusammenfassung

In diesem Lab haben wir gelernt, wie der Befehl docker compose wait verwendet wird, um zu blockieren, bis Services gestoppt sind. Wir begannen mit der Installation von Docker Compose und der Erstellung einer einfachen docker-compose.yml-Datei, die zwei Services (web und db) definiert. Dieser Aufbau stellte die notwendige Umgebung bereit, um die Funktionalität des wait-Befehls zu demonstrieren.

Anschließend haben wir untersucht, wie docker compose wait verwendet wird, um zu blockieren, bis alle in der docker-compose.yml-Datei definierten Services gestoppt sind. Wir haben auch gelernt, wie der Befehl mit spezifischen Servicenamen verwendet wird, um nur auf das Stoppen dieser Services zu warten, sowie wie die Option --down-project genutzt wird, um auf das Herunterfahren des gesamten Projekts zu warten. Diese Schritte veranschaulichten die Flexibilität und Nützlichkeit des docker compose wait-Befehls für die Verwaltung des Lebenszyklus von Docker Compose-Services.