Verwendung des docker compose pause Befehls zum Anhalten von Diensten

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 pause verwenden, um laufende Dienste, die in einer docker-compose.yml-Datei definiert sind, vorübergehend anzuhalten. Wir beginnen mit der Erstellung einer einfachen docker-compose.yml-Datei, die einen Webdienst mit dem Nginx-Image definiert.

Nach der Erstellung der docker-compose.yml-Datei lernen Sie, wie Sie die Dienste mit docker compose up starten, einen bestimmten laufenden Dienst mit docker compose pause anhalten, überprüfen, ob der Dienst tatsächlich pausiert ist, und schließlich den Dienst mit docker compose unpause fortsetzen. Diese praktische Übung vermittelt Ihnen Erfahrung im Lebenszyklusmanagement von Docker Compose-Diensten.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL 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/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555084{{"Verwendung des docker compose pause Befehls zum Anhalten von Diensten"}} docker/ps -.-> lab-555084{{"Verwendung des docker compose pause Befehls zum Anhalten von Diensten"}} docker/inspect -.-> lab-555084{{"Verwendung des docker compose pause Befehls zum Anhalten von Diensten"}} docker/pull -.-> lab-555084{{"Verwendung des docker compose pause Befehls zum Anhalten von Diensten"}} end

Erstellen einer einfachen docker-compose.yml-Datei

In diesem Schritt erstellen wir eine einfache docker-compose.yml-Datei. Bevor wir beginnen, müssen wir Docker Compose 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. Anschließend können Sie mit einem einzigen Befehl alle Dienste aus Ihrer Konfiguration erstellen und starten.

Zuerst installieren wir Docker Compose. Wir laden die Docker Compose-Binärdatei 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 können Sie die Installation überprüfen, indem Sie die Version von Docker Compose abfragen.

docker-compose --version

Sie sollten eine Ausgabe ähnlich zu Docker Compose version v2.20.2 sehen.

Nun erstellen wir ein Verzeichnis für unser Projekt und wechseln hinein.

mkdir my-docker-app
cd my-docker-app

Im Verzeichnis my-docker-app erstellen wir eine Datei namens docker-compose.yml. Diese Datei definiert die Dienste für unsere Anwendung. Wir verwenden den nano-Editor, um diese Datei zu erstellen und zu bearbeiten.

nano docker-compose.yml

Fügen Sie im nano-Editor folgenden Inhalt ein. Diese docker-compose.yml-Datei definiert einen einzelnen Dienst namens web, der das nginx:latest-Image verwendet.

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

Lassen Sie uns diese Datei aufschlüsseln:

  • version: '3.8' gibt die Version des Docker Compose-Dateiformats an.
  • services: definiert die Dienste, aus denen Ihre Anwendung besteht.
  • web: ist der Name unseres Dienstes.
  • image: nginx:latest spezifiziert das Docker-Image, das für diesen Dienst verwendet wird. In diesem Fall verwenden wir die neueste Version des Nginx-Images.
  • ports: bildet Ports zwischen dem Host und dem Container ab. "80:80" bildet Port 80 auf dem Host auf Port 80 im Container ab.

Nachdem Sie den Inhalt eingefügt haben, speichern Sie die Datei durch Drücken von Strg + X, dann Y und schließlich Enter.

Bevor wir den Dienst starten, müssen wir sicherstellen, dass das nginx:latest-Image lokal verfügbar ist. Falls nicht, wird Docker Compose es automatisch herunterladen, wenn Sie den Dienst starten. Sie können das Image jedoch auch manuell mit dem Befehl docker pull herunterladen.

docker pull nginx:latest

Dieser Befehl lädt das nginx:latest-Image von Docker Hub herunter.

Dienste aus docker-compose.yml starten

In diesem Schritt werden wir die in unserer docker-compose.yml-Datei definierten Dienste starten. Wir verwenden den Befehl docker-compose up, um die Dienste zu erstellen und zu starten.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-docker-app befinden, in dem Sie im vorherigen Schritt die docker-compose.yml-Datei erstellt haben.

cd ~/project/my-docker-app

Führen Sie nun folgenden Befehl aus, um die Dienste zu starten. Das Flag -d führt die Container im Detached-Modus aus, was bedeutet, dass sie im Hintergrund laufen.

docker-compose up -d

Dieser Befehl liest die docker-compose.yml-Datei, erstellt die notwendigen Container basierend auf den Dienstdefinitionen und startet sie. Falls das nginx:latest-Image noch nicht auf Ihrem System vorhanden ist, wird Docker Compose es automatisch herunterladen, bevor der Container gestartet wird.

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Netzwerk, Volumes (falls vorhanden) und der Dienstcontainer erstellt und gestartet werden. Zum Beispiel:

[+] Running 1/1
 ⠿ Container my-docker-app-web-1  Started

Um zu überprüfen, ob der Dienst läuft, können Sie den Befehl docker-compose ps verwenden. Dieser Befehl listet die von Docker Compose verwalteten Container im aktuellen Verzeichnis auf.

docker-compose ps

Sie sollten eine ähnliche Ausgabe wie diese sehen, die den web-Dienstcontainer mit dem Status running anzeigt:

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       2 minutes ago  running       0.0.0.0:80->80/tcp, :::80->80/tcp

Sie können auch überprüfen, ob der Nginx-Webserver erreichbar ist, indem Sie den curl-Befehl verwenden, um auf localhost Port 80 zuzugreifen.

curl localhost:80

Sie sollten die HTML-Ausgabe der Standard-Nginx-Willkommensseite sehen, was darauf hinweist, dass der Webserver läuft und erreichbar ist.

Einen laufenden Dienst anhalten

In diesem Schritt werden wir den laufenden web-Dienstcontainer pausieren. Das Anhalten eines Containers unterbricht alle Prozesse im Container. Dies unterscheidet sich vom Stoppen eines Containers, bei dem die Prozesse des Containers beendet werden. Wenn ein Container pausiert ist, wird sein Zustand eingefroren und er verbraucht minimale CPU-Ressourcen.

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

cd ~/project/my-docker-app

Um den web-Dienst anzuhalten, verwenden Sie den Befehl docker-compose pause gefolgt vom Dienstnamen.

docker-compose pause web

Sie sollten eine Ausgabe sehen, die anzeigt, dass der Dienst angehalten wird:

[+] Paused 1/1
 ⠿ Container my-docker-app-web-1  Paused

Überprüfen wir nun den Status des Dienstes mit docker-compose ps.

docker-compose ps

Die Ausgabe sollte den web-Dienstcontainer mit dem Status paused anzeigen:

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       5 minutes ago  paused        0.0.0.0:80->80/tcp, :::80->80/tcp

Wenn ein Container pausiert ist, sollte er nicht auf Anfragen reagieren können. Versuchen wir erneut, auf den Nginx-Webserver mit curl zuzugreifen.

curl localhost:80

Dieser Befehl könnte hängen bleiben oder einen Fehler zurückgeben, was darauf hinweist, dass der Dienst nicht reagiert, weil er angehalten ist. Dies bestätigt, dass die Prozesse des Containers unterbrochen wurden.

Überprüfen ob der Dienst pausiert ist

In diesem Schritt werden wir explizit überprüfen, ob der web-Dienstcontainer sich im pausierten Zustand befindet. Obwohl wir im vorherigen Schritt den Status mit docker-compose ps überprüft haben, ist es eine gute Praxis, den Zustand auch direkt mit Docker-Befehlen zu bestätigen.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis ~/project/my-docker-app befinden.

cd ~/project/my-docker-app

Wir können den Befehl docker ps verwenden, um alle laufenden (einschließlich pausierten) Container aufzulisten. Wir filtern die Ausgabe, um unseren web-Dienstcontainer zu finden und seinen Status zu überprüfen.

docker ps --filter "name=my-docker-app-web-1"

Die Ausgabe dieses Befehls sollte den Container mit der STATUS-Spalte anzeigen, die Paused angibt.

Alternativ können Sie den Befehl docker inspect verwenden, um detaillierte Informationen über den Container zu erhalten, einschließlich seines Zustands. Wir verwenden grep, um speziell nach dem "Paused"-Status in der Ausgabe zu suchen.

docker inspect my-docker-app-web-1 | grep Paused

Dieser Befehl sollte eine Zeile ähnlich wie "Paused": true, ausgeben, was bestätigt, dass der Container tatsächlich pausiert ist.

Wie im vorherigen Schritt gezeigt, sollte der Versuch, über curl auf den Dienst zuzugreifen, fehlschlagen oder hängen bleiben, was weiter bestätigt, dass der Container keine Anfragen aktiv verarbeitet.

curl localhost:80

Dieser Befehl sollte nicht die Nginx-Willkommensseite zurückgeben.

Dienst fortsetzen

In diesem Schritt werden wir den web-Dienstcontainer, den wir im vorherigen Schritt pausiert haben, wieder fortsetzen. Das Fortsetzen eines Containers nimmt alle Prozesse wieder auf, die beim Pausieren des Containers unterbrochen wurden.

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

cd ~/project/my-docker-app

Um den web-Dienst fortzusetzen, verwenden Sie den Befehl docker-compose unpause gefolgt vom Dienstnamen.

docker-compose unpause web

Sie sollten eine Ausgabe sehen, die anzeigt, dass der Dienst fortgesetzt wird:

[+] Unpaused 1/1
 ⠿ Container my-docker-app-web-1  Unpaused

Überprüfen wir nun erneut den Status des Dienstes mit docker-compose ps.

docker-compose ps

Die Ausgabe sollte nun den web-Dienstcontainer mit dem Status running anzeigen:

NAME                  IMAGE         COMMAND                  SERVICE   CREATED        STATUS        PORTS
my-docker-app-web-1   nginx:latest  "/docker-entrypoint.…"   web       8 minutes ago  running       0.0.0.0:80->80/tcp, :::80->80/tcp

Da der Container nun läuft, sollte er wieder auf Anfragen antworten können. Versuchen wir, mit curl auf den Nginx-Webserver zuzugreifen.

curl localhost:80

Sie sollten nun die standardmäßige Nginx-Willkommensseite als HTML-Ausgabe sehen, was bestätigt, dass der Dienst wieder läuft und erreichbar ist.

Abschließend können Sie die während dieses Labs erstellten Ressourcen bereinigen, indem Sie die Container, Netzwerke und Volumes, die in der docker-compose.yml-Datei definiert sind, mit dem Befehl docker-compose down stoppen und entfernen.

docker-compose down

Dieser Befehl stoppt die laufenden Container und entfernt die Container, Netzwerke und Volumes.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man den Befehl docker compose pause verwendet, um den Zustand von Diensten zu verwalten, die in einer docker-compose.yml-Datei definiert sind. Wir begannen mit der Installation von Docker Compose und der Erstellung einer einfachen docker-compose.yml-Datei, die einen Webdienst mit dem Nginx-Image definiert.

Nach der Einrichtung starteten wir den Dienst mit docker compose up -d, pausierten den laufenden Dienst mit docker compose pause web, überprüften seinen pausierten Zustand und setzten ihn schließlich mit docker compose unpause web fort. Diese praktische Übung demonstrierte die Anwendung der Befehle pause und unpause zum vorübergehenden Anhalten und Fortsetzen von Docker Compose-Diensten.