Wie man den docker compose restart Befehl zur Verwaltung von Diensten verwendet

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 Lebenszyklus Ihrer Docker-Dienste effektiv mit dem Befehl docker compose restart verwalten können. Wir beginnen mit der Einrichtung einer einfachen Multi-Service-Anwendung mit Docker Compose, die aus einem Web-Service und einem Datenbank-Service besteht.

Nach der Einrichtung werden Sie verschiedene Möglichkeiten erkunden, den docker compose restart-Befehl zu nutzen. Dazu gehört das Neustarten aller Dienste innerhalb Ihrer Anwendung, das gezielte Neustarten eines bestimmten Dienstes, das Neustarten eines Dienstes ohne Beeinflussung seiner Abhängigkeiten und schließlich das Neustarten eines Dienstes mit einer definierten Timeout-Periode. Durch diese praktischen Übungen erhalten Sie hands-on Erfahrung in der Steuerung und Wartung Ihrer Docker-basierten Anwendungen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/restart("Restart Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555089{{"Wie man den docker compose restart Befehl zur Verwaltung von Diensten verwendet"}} docker/ps -.-> lab-555089{{"Wie man den docker compose restart Befehl zur Verwaltung von Diensten verwendet"}} docker/restart -.-> lab-555089{{"Wie man den docker compose restart Befehl zur Verwaltung von Diensten verwendet"}} docker/pull -.-> lab-555089{{"Wie man den docker compose restart Befehl zur Verwaltung von Diensten verwendet"}} end

Vorbereitung einer einfachen Multi-Service-Anwendung

In diesem Schritt bereiten wir eine einfache Multi-Service-Anwendung vor, die wir in diesem Lab verwenden werden, um das Neustarten von Docker-Diensten zu üben. Diese Anwendung besteht aus zwei Diensten: einem Web-Service und einem Datenbank-Service. Wir werden diese Dienste mit einer Docker Compose-Datei definieren.

Zuerst müssen wir Docker Compose installieren. Da es in der LabEx VM-Umgebung nicht vorinstalliert ist, werden wir es herunterladen und installieren.

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

Der erste Befehl lädt die Docker Compose-Binärdatei aus dem offiziellen GitHub-Repository herunter und speichert sie unter /usr/local/bin/docker-compose. Die Teile $(uname -s) und $(uname -m) erkennen automatisch Ihr Betriebssystem und die Architektur, um die korrekte Binärdatei herunterzuladen. Der zweite Befehl macht die heruntergeladene Datei ausführbar.

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

docker-compose --version

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

Wechseln Sie nun in das Verzeichnis ~/project, das Ihr Arbeitsverzeichnis für dieses Lab ist.

cd ~/project

Jetzt erstellen wir eine docker-compose.yml-Datei, um unsere Multi-Service-Anwendung zu definieren. Diese Datei spezifiziert die Dienste, ihre Images und alle notwendigen Konfigurationen.

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"
    depends_on:
      - db

  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: mysecretpassword

In dieser docker-compose.yml-Datei:

  • version: '3.8' gibt die Docker Compose-Dateiformatversion an.
  • services: definiert die verschiedenen Dienste unserer Anwendung.
  • Der web-Service verwendet das nginx:latest-Image, bildet Port 80 des Hosts auf Port 80 im Container ab und hängt vom db-Service ab. Das bedeutet, der db-Service wird vor dem web-Service gestartet.
  • Der db-Service verwendet das postgres:latest-Image und setzt die Umgebungsvariable POSTGRES_PASSWORD, die vom PostgreSQL-Image benötigt wird.

Speichern Sie die Datei und beenden Sie den nano-Editor (Drücken Sie Strg + X, dann Y, dann Enter).

Bevor wir die Dienste starten, müssen wir die erforderlichen Docker-Images herunterladen.

docker pull nginx:latest
docker pull postgres:latest

Diese Befehle laden die nginx:latest- und postgres:latest-Images von Docker Hub herunter.

Starten Sie abschließend die in unserer docker-compose.yml-Datei definierten Dienste.

docker-compose up -d

Der Befehl docker-compose up -d erstellt, startet und führt die Dienste im Hintergrund aus (Detached Mode).

Sie können den Status der laufenden Dienste mit folgendem Befehl überprüfen:

docker-compose ps

Sie sollten eine Ausgabe sehen, die anzeigt, dass sowohl der web- als auch der db-Service laufen.

Alle Dienste neu starten

In diesem Schritt lernen Sie, wie Sie alle in der docker-compose.yml-Datei definierten Dienste neu starten. Das Neustarten von Diensten ist eine häufige Operation, wenn Sie Änderungen am Anwendungscode, an Konfigurationen oder an der Docker Compose-Datei selbst vornehmen.

Um alle Dienste neu zu starten, verwenden wir den Befehl docker-compose restart. Dieser Befehl stoppt alle laufenden Container, die in der docker-compose.yml-Datei definiert sind, und startet sie anschließend erneut.

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

cd ~/project

Führen Sie nun folgenden Befehl aus, um alle Dienste neu zu starten:

docker-compose restart

Sie sehen eine Ausgabe, die anzeigt, dass die Dienste gestoppt und dann wieder gestartet werden.

Nachdem der Befehl abgeschlossen ist, können Sie mit dem Befehl docker-compose ps überprüfen, ob die Dienste neu gestartet wurden und wieder laufen.

docker-compose ps

Die Ausgabe sollte zeigen, dass sowohl der web- als auch der db-Service im Zustand Up sind, was bedeutet, dass sie erfolgreich neu gestartet wurden.

Das Neustarten aller Dienste ist nützlich, wenn Sie Änderungen anwenden müssen, die mehrere Teile Ihrer Anwendung betreffen, oder wenn Sie einen sauberen Neustart des gesamten Anwendungsstacks sicherstellen möchten.

Einen bestimmten Dienst neu starten

In diesem Schritt lernen Sie, wie Sie nur einen bestimmten Dienst innerhalb Ihrer Multi-Service-Anwendung neu starten. Dies ist nützlich, wenn Sie Änderungen an einem einzelnen Dienst vorgenommen haben und nicht den gesamten Anwendungsstack neu starten müssen.

Um einen bestimmten Dienst neu zu starten, verwenden Sie den Befehl docker-compose restart gefolgt vom Namen des Dienstes, den Sie neu starten möchten. Die Dienstnamen sind in Ihrer docker-compose.yml-Datei definiert (in unserem Fall web und db).

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project befinden.

cd ~/project

Lassen Sie uns den web-Dienst neu starten.

docker-compose restart web

Sie sehen eine Ausgabe, die anzeigt, dass der web-Dienst gestoppt und dann wieder gestartet wird. Der db-Dienst bleibt weiterhin in Betrieb.

Nachdem der Befehl abgeschlossen ist, überprüfen Sie den Status der Dienste mit docker-compose ps.

docker-compose ps

Die Ausgabe sollte zeigen, dass sowohl der web- als auch der db-Dienst weiterhin im Zustand Up sind. Allerdings wurde der web-Dienst gestoppt und erneut gestartet.

Nun starten wir den db-Dienst neu.

docker-compose restart db

Sie sehen eine Ausgabe, die anzeigt, dass der db-Dienst gestoppt und dann wieder gestartet wird. Beachten Sie, dass da der web-Dienst vom db-Dienst abhängt, Docker Compose möglicherweise auch kurzzeitig den web-Dienst stoppt und neu startet, um sicherzustellen, dass die Abhängigkeit während des Neustarts von db erfüllt ist.

Überprüfen Sie den Dienststatus erneut:

docker-compose ps

Beide Dienste sollten Up sein. Das Neustarten einzelner Dienste ermöglicht eine feinere Kontrolle über den Lebenszyklus Ihrer Anwendung.

Einen Dienst ohne Abhängigkeiten neu starten

Im vorherigen Schritt haben wir gesehen, dass das Neustarten des db-Dienstes auch einen kurzen Neustart des web-Dienstes verursachte, aufgrund der in docker-compose.yml definierten depends_on-Beziehung. In manchen Fällen möchten Sie möglicherweise einen Dienst neu starten, ohne dessen Abhängigkeiten zu beeinflussen.

Um einen Dienst ohne Neustart seiner Abhängigkeiten neu zu starten, können Sie den Befehl docker-compose restart mit dem Flag --no-deps verwenden.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project befinden.

cd ~/project

Lassen Sie uns versuchen, den db-Dienst erneut zu starten, diesmal mit dem --no-deps-Flag.

docker-compose restart --no-deps db

Beobachten Sie die Ausgabe. Sie sollten sehen, dass nur der db-Dienst gestoppt und gestartet wird. Der web-Dienst, der von db abhängt, bleibt unverändert.

Überprüfen Sie den Dienststatus mit docker-compose ps.

docker-compose ps

Beide Dienste sollten weiterhin im Zustand Up sein. Dies zeigt, wie Sie einen Dienst isoliert neu starten können, was beispielsweise beim Debuggen oder beim Anwenden von Änderungen an einem einzelnen Dienst nützlich sein kann, ohne davon abhängige Dienste zu beeinträchtigen.

Einen Dienst mit spezifischem Timeout neu starten

In diesem letzten Schritt lernen Sie, wie Sie ein Timeout für den Neustart-Vorgang festlegen können. Wenn Sie einen Dienst neu starten, sendet Docker Compose ein Stopp-Signal an den Container und wartet auf ein ordnungsgemäßes Herunterfahren. Falls der Container nicht innerhalb eines bestimmten Zeitraums stoppt, erzwingt Docker das Herunterfahren. Sie können diese Wartezeit mit dem --timeout-Flag steuern.

Das Standard-Timeout für das Stoppen von Containern beträgt 10 Sekunden. Lassen Sie uns versuchen, den web-Dienst mit einem kürzeren Timeout von 3 Sekunden neu zu starten.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project befinden.

cd ~/project

Führen Sie nun folgenden Befehl aus, um den web-Dienst mit einem 3-Sekunden-Timeout neu zu starten:

docker-compose restart --timeout 3 web

Sie sehen eine Ausgabe, die anzeigt, dass der web-Dienst gestoppt und dann gestartet wird. Docker Compose wartet maximal 3 Sekunden auf ein ordnungsgemäßes Stoppen des Containers, bevor ein erzwungener Shutdown erfolgt.

Nach Abschluss des Befehls überprüfen Sie den Dienststatus mit docker-compose ps.

docker-compose ps

Beide Dienste sollten weiterhin im Zustand Up sein.

Die Verwendung des --timeout-Flags ermöglicht es Ihnen zu steuern, wie lange Docker Compose während eines Neustarts auf das Stoppen eines Dienstes wartet. Dies kann nützlich sein für Dienste, die mehr oder weniger Zeit für ein sauberes Herunterfahren benötigen.

Abschließend bereinigen wir die laufenden Dienste, indem wir sie stoppen und entfernen.

docker-compose down

Der Befehl docker-compose down stoppt und entfernt die Container, Netzwerke und Volumes, die durch docker-compose up erstellt wurden.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man eine einfache Multi-Service-Anwendung mit Docker Compose vorbereitet. Dies umfasste die Installation von Docker Compose, die Überprüfung der Installation sowie das Erstellen einer docker-compose.yml-Datei zur Definition von zwei Diensten: einem Webdienst (nginx) und einem Datenbankdienst (postgres), wobei der Webdienst vom Datenbankdienst abhängig ist.

Anschließend haben wir verschiedene Möglichkeiten zur Verwaltung dieser Dienste mit dem Befehl docker compose restart untersucht. Wir haben gelernt, wie man alle in der docker-compose.yml-Datei definierten Dienste neu startet, einen bestimmten Dienst neu startet, einen Dienst ohne Neustart seiner Abhängigkeiten neu startet und einen Dienst mit einem spezifischen Timeout neu startet. Diese Schritte demonstrierten die Flexibilität und Kontrolle, die Docker Compose für die Verwaltung des Lebenszyklus von Multi-Container-Anwendungen bietet.