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.
Eine einfache docker-compose.yml Datei erstellen
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:latestspezifiziert 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 der 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.
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.



