Verwendung des docker compose stop Befehls zur Verwaltung von Services

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 stop verwenden, um Services zu verwalten, die in einer Docker Compose-Datei definiert sind. Wir beginnen mit der Vorbereitung eines einfachen Docker Compose-Projekts, einschließlich der Installation von Docker Compose und der Erstellung einer grundlegenden docker-compose.yml-Datei.

Nach dem Projekt-Setup werden Sie üben, die in der Compose-Datei definierten Services zu starten. Der Schwerpunkt des Labs liegt auf der Verwendung des Befehls docker compose stop, um alle laufenden Services zu stoppen, einen bestimmten Service zu beenden und Services mit einem spezifizierten Timeout zu stoppen. Diese praktische Übung vermittelt Ihnen wertvolle Fähigkeiten zur Steuerung des Lebenszyklus Ihrer Multi-Container-Docker-Anwendungen mit Docker Compose.


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/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555093{{"Verwendung des docker compose stop Befehls zur Verwaltung von Services"}} docker/ps -.-> lab-555093{{"Verwendung des docker compose stop Befehls zur Verwaltung von Services"}} docker/start -.-> lab-555093{{"Verwendung des docker compose stop Befehls zur Verwaltung von Services"}} docker/stop -.-> lab-555093{{"Verwendung des docker compose stop Befehls zur Verwaltung von Services"}} docker/pull -.-> lab-555093{{"Verwendung des docker compose stop Befehls zur Verwaltung von Services"}} end

Ein einfaches Docker Compose-Projekt vorbereiten

In diesem Schritt bereiten wir ein einfaches Docker Compose-Projekt vor. Docker Compose ist ein Tool zum Definieren und Ausführen von Multi-Container-Docker-Anwendungen. Mit Compose verwenden Sie eine YAML-Datei, um die Services Ihrer Anwendung zu konfigurieren. Anschließend können Sie mit einem einzigen Befehl alle Services aus Ihrer Konfiguration erstellen und starten.

Da Docker Compose in der LabEx-Umgebung nicht vorinstalliert ist, müssen wir es zunächst installieren. Wir werden die Docker Compose-Binärdatei herunterladen und ausführbar machen.

Zuerst laden wir die Docker Compose-Binärdatei herunter. Wir verwenden curl, um die neueste stabile Version herunterzuladen.

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-Binärdatei für Ihre Systemarchitektur herunter und speichert sie unter /usr/local/bin/docker-compose.

Als nächstes müssen wir die heruntergeladene Binärdatei ausführbar machen.

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

Dieser Befehl fügt die Ausführungsberechtigungen für die Docker Compose-Binärdatei hinzu.

Nun überprüfen wir die Installation, indem wir die Docker Compose-Version abfragen.

docker-compose --version

In der Ausgabe sollte die installierte Docker Compose-Version erscheinen, was die erfolgreiche Installation bestätigt.

Nachdem Docker Compose nun installiert ist, erstellen wir ein einfaches Docker Compose-Projekt. Wir legen ein Verzeichnis für unser Projekt an und erstellen darin eine docker-compose.yml-Datei.

Zuerst erstellen wir ein Verzeichnis namens my-compose-app in Ihrem Home-Verzeichnis.

mkdir ~/project/my-compose-app

Wechseln Sie in das neu erstellte Verzeichnis.

cd ~/project/my-compose-app

Nun erstellen wir eine docker-compose.yml-Datei. Diese Datei definiert die Services für unsere Anwendung. Wir verwenden nano, um die Datei zu erstellen und zu bearbeiten.

nano docker-compose.yml

Fügen Sie im nano-Editor folgenden Inhalt ein:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: ubuntu:latest
    command: tail -f /dev/null

Lassen Sie uns diese docker-compose.yml-Datei aufschlüsseln:

  • version: '3.8' gibt die Docker Compose-Dateiformatversion an.
  • services: definiert die Services, aus denen Ihre Anwendung besteht.
  • web: definiert einen Service namens web.
    • image: nginx:latest gibt an, dass dieser Service das nginx:latest-Docker-Image verwendet. Falls das Image lokal nicht verfügbar ist, lädt Docker Compose es von Docker Hub herunter.
    • ports: bildet Port 80 auf dem Host-Rechner auf Port 80 im web-Container ab.
  • app: definiert einen Service namens app.
    • image: ubuntu:latest gibt an, dass dieser Service das ubuntu:latest-Docker-Image verwendet.
    • command: tail -f /dev/null spezifiziert den Befehl, der beim Start des app-Containers ausgeführt wird. Dieser Befehl hält den Container unendlich lange am Laufen, ohne ihn zu beenden.

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

Bevor wir die Services starten können, sollten wir sicherstellen, dass die benötigten Docker-Images verfügbar sind. Obwohl Docker Compose fehlende Images automatisch herunterlädt, ist es eine gute Praxis, sie vorab explizit zu pullen – besonders in Umgebungen mit eingeschränktem Internetzugang oder für einen schnelleren Start.

Laden wir zunächst das nginx:latest-Image herunter.

docker pull nginx:latest

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

Als nächstes laden wir das ubuntu:latest-Image herunter.

docker pull ubuntu:latest

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

Sie haben nun erfolgreich ein einfaches Docker Compose-Projekt mit zwei Services (web und app) vorbereitet und die benötigten Docker-Images heruntergeladen.

Die in der Compose-Datei definierten Services starten

In diesem Schritt werden wir die Services starten, die in der im vorherigen Schritt erstellten docker-compose.yml-Datei definiert sind. Docker Compose bietet einen einfachen Befehl, um alle Services in Ihrer Konfiguration zu bauen, zu erstellen und zu starten.

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

cd ~/project/my-compose-app

Um die Services zu starten, verwenden wir den Befehl docker-compose up. Standardmäßig startet docker-compose up die Container im Vordergrund und gibt die Logs jedes Containers aus.

docker-compose up

Wenn Sie diesen Befehl ausführen, wird Docker Compose:

  1. Nach der docker-compose.yml-Datei im aktuellen Verzeichnis suchen.
  2. Die erforderlichen Docker-Images für jeden Service bauen oder herunterladen, falls sie nicht bereits verfügbar sind.
  3. Container für jeden Service erstellen und starten.
  4. Die Logs aller laufenden Container in Ihrem Terminal anzeigen.

Sie werden eine Ausgabe sehen, die anzeigt, dass die Netzwerke und Container erstellt und gestartet werden. Die Logs der web (nginx) und app (ubuntu) Container werden angezeigt.

Da wir möchten, dass die Services im Hintergrund laufen, damit wir das Terminal weiter nutzen können, können wir die aktuelle Ausführung mit Strg + C beenden.

Um die Services im Detached-Modus (im Hintergrund) auszuführen, können wir das Flag -d mit dem docker-compose up-Befehl verwenden.

docker-compose up -d

Dieser Befehl startet die Services im Hintergrund und gibt die Namen der erstellten Container aus.

Nachdem die Services nun im Detached-Modus laufen, können Sie den Status der laufenden Container mit dem Befehl docker ps überprüfen.

docker ps

Sie sollten zwei laufende Container sehen: einen für den web-Service (basierend auf dem nginx-Image) und einen für den app-Service (basierend auf dem ubuntu-Image). Die Ausgabe zeigt Informationen zu den Containern, einschließlich ihrer IDs, Images, Status und Ports.

Um zu überprüfen, ob der web-Service erreichbar ist, können wir curl verwenden, um auf den nginx-Server zuzugreifen, der auf Port 80 läuft. Da wir Port 80 auf dem Host auf Port 80 im web-Container gemappt haben, können wir direkt von der LabEx-VM darauf zugreifen.

curl http://localhost:80

Sie sollten den standardmäßigen HTML-Inhalt sehen, der vom nginx-Webserver bereitgestellt wird, was bestätigt, dass der web-Service läuft und erreichbar ist.

Alle laufenden Services stoppen

In diesem Schritt lernen wir, wie man alle Services stoppt, die aktuell als Teil unseres Docker Compose-Projekts laufen. Docker Compose bietet einen praktischen Befehl, um alle in der docker-compose.yml-Datei definierten Container zu stoppen.

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

cd ~/project/my-compose-app

Um alle laufenden Services zu stoppen, verwenden wir den Befehl docker-compose down. Dieser Befehl stoppt und entfernt die Container, Netzwerke und Volumes, die in der docker-compose.yml-Datei definiert sind.

docker-compose down

Wenn Sie diesen Befehl ausführen, wird Docker Compose:

  1. Die laufenden Container ordnungsgemäß stoppen
  2. Die gestoppten Container entfernen
  3. Die von Docker Compose für dieses Projekt erstellten Netzwerke entfernen
  4. Alle in der docker-compose.yml-Datei definierten Volumes entfernen (sofern nicht explizit anders angegeben)

Sie werden eine Ausgabe sehen, die anzeigt, dass die Container und Netzwerke gestoppt und entfernt werden.

Nach der Ausführung von docker-compose down können Sie mit dem Befehl docker ps überprüfen, ob die Container nicht mehr laufen.

docker ps

Dieser Befehl listet die aktuell laufenden Container auf. Da wir alle Services gestoppt haben, sollten Sie die web- oder app-Container nicht mehr in der Ausgabe sehen. Die Ausgabe sollte nur die Kopfzeile anzeigen oder leer sein, wenn keine anderen Container auf Ihrem System laufen.

Das Stoppen von Services mit docker-compose down ist die Standardmethode, um die Ressourcen Ihres Docker Compose-Projekts aufzuräumen, wenn Sie damit fertig sind.

Einen bestimmten Service stoppen

In diesem Schritt lernen wir, wie man einen bestimmten Service innerhalb unseres Docker Compose-Projekts stoppt, anstatt alle Services gleichzeitig zu beenden. Dies ist nützlich, wenn Sie nur eine einzelne Komponente Ihrer Anwendung neu starten oder stoppen müssen.

Stellen wir zunächst sicher, dass unsere Services laufen. Navigieren Sie zum Projektverzeichnis und starten Sie die Services im Detached-Modus.

cd ~/project/my-compose-app
docker-compose up -d

Überprüfen Sie mit docker ps, ob sowohl der web- als auch der app-Service laufen.

docker ps

Sie sollten beide Container als laufend aufgelistet sehen.

Nun stoppen wir nur den app-Service. Um einen bestimmten Service zu stoppen, verwenden wir den Befehl docker-compose stop gefolgt vom Namen des Services.

docker-compose stop app

Dieser Befehl sendet ein Stopp-Signal an den Container des app-Services und wartet, bis dieser ordnungsgemäß beendet wird.

Nach Ausführung des Befehls überprüfen wir erneut den Status der Container.

docker ps

Jetzt sollte nur noch der web-Container als laufend aufgeführt sein. Der app-Container sollte nicht mehr in der Liste der aktiven Container erscheinen.

Um zu bestätigen, dass der app-Container gestoppt wurde, können Sie auch docker ps -a verwenden, das alle Container einschließlich der gestoppten anzeigt.

docker ps -a

Hier sollte der app-Container mit dem Status Exited aufgeführt sein.

Das gezielte Stoppen eines bestimmten Services ermöglicht es Ihnen, einzelne Komponenten Ihrer Anwendung zu verwalten, ohne andere zu beeinflussen. Dies ist besonders hilfreich während der Entwicklung oder bei der Fehlersuche in einem bestimmten Service.

Services mit Timeout stoppen

In diesem Schritt untersuchen wir, wie man Services mit einem spezifizierten Timeout stoppt. Wenn Sie einen Container stoppen, sendet Docker ein SIGTERM-Signal an den Hauptprozess im Container, um ihm Zeit für einen ordnungsgemäßen Shutdown zu geben. Falls der Prozess nicht innerhalb eines bestimmten Zeitraums beendet wird, sendet Docker ein SIGKILL-Signal, um ihn zwangsweise zu stoppen. Standardmäßig beträgt dieser Timeout 10 Sekunden. Sie können diesen Timeout mit dem -t oder --timeout Flag bei den Befehlen docker-compose stop oder docker-compose down anpassen.

Stellen wir zunächst sicher, dass unsere Services laufen. Navigieren Sie zum Projektverzeichnis und starten Sie die Services im Detached-Modus.

cd ~/project/my-compose-app
docker-compose up -d

Überprüfen Sie, ob beide Services laufen:

docker ps

Nun stoppen wir den web-Service mit einem Timeout von 5 Sekunden.

docker-compose stop -t 5 web

Dieser Befehl weist Docker Compose an, den web-Service zu stoppen und maximal 5 Sekunden auf ein ordnungsgemäßes Stoppen des Containers nach dem Senden des SIGTERM-Signals zu warten. Falls der Container nicht innerhalb von 5 Sekunden stoppt, sendet Docker ein SIGKILL-Signal.

Sie sehen eine Ausgabe, die anzeigt, dass der web-Service gestoppt wird.

Überprüfen wir erneut den Status der Container:

docker ps

Jetzt sollte nur noch der app-Container laufen. Der web-Container sollte gestoppt sein.

Ebenso können Sie einen Timeout anwenden, wenn Sie alle Services mit docker-compose down stoppen. Lassen Sie uns alle Services mit einem Timeout von 3 Sekunden stoppen.

docker-compose down -t 3

Dieser Befehl versucht, alle in der docker-compose.yml-Datei definierten Services zu stoppen und wartet maximal 3 Sekunden auf ein ordnungsgemäßes Stoppen jedes Containers, bevor er zwangsweise beendet wird.

Überprüfen Sie, dass nach Befehlsausführung keine Container mehr laufen:

docker ps

Die Ausgabe sollte keine laufenden Container anzeigen.

Die Verwendung der Timeout-Option ist wichtig, um sicherzustellen, dass Ihre Anwendungen genügend Zeit für Aufräumarbeiten vor dem Stopp haben, was Datenkorruption oder andere Probleme verhindert.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man ein einfaches Docker Compose-Projekt vorbereitet. Dazu gehörte die Installation von Docker Compose durch Herunterladen der Binärdatei und Setzen der Ausführungsrechte, sowie die Überprüfung der Installation. Anschließend erstellten wir ein Projektverzeichnis und eine docker-compose.yml-Datei, um die Services für unsere Anwendung zu definieren.

Wir haben außerdem gelernt, wie man den Lebenszyklus der in der Compose-Datei definierten Services mit dem Befehl docker compose stop verwaltet. Dies umfasste das Starten aller Services, das Stoppen aller laufenden Services, das Stoppen eines bestimmten Services sowie das Stoppen von Services mit einem spezifizierten Timeout.