Verwendung des docker compose kill Befehls zum gewaltsamen Stoppen 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 kill verwenden, um Services, die in einer Docker Compose-Datei definiert sind, gewaltsam zu beenden. Wir beginnen mit der Vorbereitung einer einfachen Compose-Datei mit mehreren Services und starten diese mit docker compose up.

Anschließend werden Sie verschiedene Möglichkeiten erkunden, den docker compose kill-Befehl zu nutzen: um alle Services gewaltsam zu stoppen, um einen bestimmten Service zu beenden und um Services mit einem anderen Signal (signal) zu stoppen. Diese praktische Übung vermittelt Ihnen fundierte Kenntnisse im Umgang mit Docker Compose-Services mithilfe des kill-Befehls.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ps -.-> lab-555081{{"Verwendung des docker compose kill Befehls zum gewaltsamen Stoppen von Services"}} docker/logs -.-> lab-555081{{"Verwendung des docker compose kill Befehls zum gewaltsamen Stoppen von Services"}} docker/pull -.-> lab-555081{{"Verwendung des docker compose kill Befehls zum gewaltsamen Stoppen von Services"}} end

Vorbereitung einer einfachen Compose-Datei mit mehreren Services

In diesem Schritt erstellen wir eine einfache Docker Compose-Datei, die mehrere Services definiert. Docker Compose ist ein Tool, mit dem Sie Multi-Container-Docker-Anwendungen definieren und ausführen können. Während Docker auf dieser VM vorinstalliert ist, ist Docker Compose nicht vorhanden. Wir werden es zunächst installieren.

Zuerst installieren wir Docker Compose. Wir laden die neueste stabile Version 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

Nun überprüfen wir die Installation, indem wir die Version anzeigen lassen.

docker-compose --version

Sie sollten die Versionsinformationen in der Konsole sehen, was bestätigt, dass Docker Compose korrekt installiert wurde.

Als nächstes erstellen wir ein Verzeichnis für unser Projekt und wechseln hinein.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

Nun erstellen wir in diesem Verzeichnis eine docker-compose.yml-Datei. Diese Datei definiert unsere Services. Wir verwenden den nano-Editor, um die Datei zu erstellen und zu bearbeiten.

nano docker-compose.yml

Fügen Sie im nano-Editor folgenden Inhalt ein. Diese Datei definiert zwei Services: web und redis. Der web-Service verwendet das nginx-Image und mappt Port 80 des Containers auf Port 8080 des Hosts. Der redis-Service verwendet das redis-Image.

version: "3.8"
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  redis:
    image: redis

Nach dem Einfügen des Inhalts speichern Sie die Datei mit Strg + X, dann Y und schließlich Enter.

Bevor wir die Services starten können, müssen wir die in der docker-compose.yml-Datei definierten Images herunterladen. Dies erfolgt mit dem docker pull-Befehl.

docker pull nginx
docker pull redis

Diese Befehle laden die nginx- und redis-Images von Docker Hub herunter.

Services mit docker compose up starten

In diesem Schritt werden wir die in unserer docker-compose.yml-Datei definierten Services mit dem Befehl docker compose up starten. Dieser Befehl erstellt, (neu)erstellt, startet und verbindet sich mit Containern für einen Service.

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

cd ~/project/my-compose-app

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

docker-compose up -d

Sie sollten eine Ausgabe sehen, die anzeigt, dass Netzwerke, Volumes (falls vorhanden) und Container erstellt und gestartet werden.

Um zu überprüfen, ob die Container laufen, können Sie den Befehl docker ps verwenden.

docker ps

Dieser Befehl listet alle laufenden Container auf. Sie sollten Einträge für sowohl den web- (nginx) als auch den redis-Container sehen.

Sie können auch die Logs der Services mit dem Befehl docker-compose logs einsehen.

docker-compose logs

Dies zeigt die Logs aller Services an. Sie können auch Logs für einen bestimmten Service anzeigen, indem Sie den Servicenamen hinzufügen, z.B. docker-compose logs web.

Da wir Port 80 des nginx-Containers auf Port 8080 des Hosts gemappt haben, können Sie die Standard-Nginx-Willkommensseite mit curl auf Port 8080 aufrufen.

curl localhost:8080

Sie sollten den HTML-Inhalt der Nginx-Willkommensseite in der Ausgabe sehen.

Alle Services mit docker compose kill gewaltsam stoppen

In diesem Schritt lernen wir, wie man alle laufenden Services aus der docker-compose.yml-Datei mit dem Befehl docker compose kill gewaltsam stoppt. Im Gegensatz zu docker compose down, das Container ordnungsgemäß beendet und Ressourcen entfernt, sendet docker compose kill ein spezifisches Signal an die Container, um sie sofort zu stoppen.

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

cd ~/project/my-compose-app

Um alle Services gewaltsam zu stoppen, führen Sie einfach den Befehl docker compose kill ohne Angabe von Servicenamen aus. Standardmäßig sendet dieser Befehl ein SIGKILL-Signal an die Container.

docker-compose kill

Sie sollten eine Ausgabe sehen, die anzeigt, dass die Container beendet werden.

Um zu überprüfen, ob die Container gestoppt wurden, können Sie erneut den Befehl docker ps verwenden.

docker ps

Diesmal sollten die web- (nginx) und redis-Container nicht aufgelistet sein, da sie gestoppt wurden.

Sie können auch docker ps -a verwenden, um alle Container einschließlich der gestoppten anzuzeigen. Sie sollten die Container my-compose-app-web-1 und my-compose-app-redis-1 mit dem Status "Exited" sehen.

docker ps -a

Einen bestimmten Service mit docker compose kill gewaltsam stoppen

In diesem Schritt lernen wir, wie man einen bestimmten Service aus der docker-compose.yml-Datei mit dem Befehl docker compose kill gefolgt vom Servicenamen gewaltsam stoppt.

Zuerst starten wir unsere Services erneut, damit wir Container zum Stoppen haben. Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-compose-app befinden.

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

Überprüfen Sie mit docker ps, dass beide Container laufen.

docker ps

Nun stoppen wir gezielt nur den web-Service. Dazu fügen wir den Servicenamen web nach dem Befehl docker compose kill hinzu.

docker-compose kill web

Sie sollten eine Ausgabe sehen, die anzeigt, dass der web-Container beendet wird.

Um zu überprüfen, dass nur der web-Container gestoppt wurde, verwenden Sie erneut den Befehl docker ps.

docker ps

Jetzt sollte nur noch der redis-Container als laufend aufgelistet sein. Der web-Container sollte nicht in der Liste der aktiven Container erscheinen.

Mit docker ps -a können Sie alle Container einschließlich der gestoppten anzeigen. Der Container my-compose-app-web-1 sollte den Status "Exited" haben, während my-compose-app-redis-1 weiterhin als "Up" angezeigt werden sollte.

docker ps -a

Services mit alternativem Signal über docker compose kill -s gewaltsam stoppen

In diesem Schritt untersuchen wir, wie der Befehl docker compose kill mit dem -s-Flag verwendet wird, um ein spezifisches Signal an die Container zu senden. Standardmäßig sendet docker compose kill ein SIGKILL-Signal, das den Prozess sofort beendet. In manchen Fällen möchten Sie jedoch ein anderes Signal wie SIGTERM senden, das eine Aufforderung zur ordnungsgemäßen Beendigung des Prozesses darstellt.

Stellen Sie 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, dass beide Container laufen.

docker ps

Nun stoppen wir alle Services mit dem SIGTERM-Signal. Dazu verwenden wir das -s-Flag gefolgt vom Signalnamen.

docker-compose kill -s SIGTERM

Sie sollten eine Ausgabe sehen, die anzeigt, dass die Container mit dem angegebenen Signal beendet werden.

Um zu bestätigen, dass die Container gestoppt wurden, verwenden Sie den Befehl docker ps.

docker ps

Weder der web- noch der redis-Container sollten als laufend aufgeführt sein.

Mit docker ps -a können Sie sehen, dass die Container beendet wurden.

docker ps -a

Die Möglichkeit, verschiedene Signale zu senden, ist nützlich für kontrolliertere Shutdowns, da Anwendungen in den Containern so gegebenenfalls Aufräumarbeiten durchführen können, bevor sie beendet werden (sofern sie für die Verarbeitung dieser Signale konfiguriert sind).

Abschließend können Sie mit dem Befehl docker compose down die gestoppten Container und das von Docker Compose erstellte Netzwerk bereinigen.

docker-compose down

Dieser Befehl stoppt und entfernt die Container, Netzwerke und Volumes, die in der docker-compose.yml-Datei definiert sind.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man eine einfache Docker Compose-Datei mit mehreren Services (web und redis) vorbereitet und Docker Compose installiert. Anschließend haben wir diese Services mit dem Befehl docker compose up gestartet. Danach haben wir untersucht, wie man alle laufenden Services aus der Compose-Datei mit docker compose kill gewaltsam stoppt und wie man gezielt einen bestimmten Service mit docker compose kill <service_name> beendet. Abschließend haben wir gelernt, wie man mit dem -s-Flag ein alternatives Signal an die Services während des Kill-Prozesses sendet, wie beispielsweise docker compose kill -s SIGKILL.