Verwendung des docker desktop stop Befehls zur Verwaltung von Docker Desktop

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 Ihre Docker-Container effektiv mit dem Befehl docker stop verwalten können. Wir behandeln die grundlegende Verwendung zum Stoppen eines laufenden Containers, untersuchen verschiedene Optionen zur Steuerung des Stoppvorgangs, einschließlich des erzwungenen Stoppens eines Containers und der Einstellung eines Timeouts für den Stoppvorgang. Am Ende dieses Labs werden Sie in der Lage sein, docker stop sicher und gezielt einzusetzen, um Ihre Docker-Container ordnungsgemäß oder erzwungen zu beenden.


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/stop("Stop Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555150{{"Verwendung des docker desktop stop Befehls zur Verwaltung von Docker Desktop"}} docker/ps -.-> lab-555150{{"Verwendung des docker desktop stop Befehls zur Verwaltung von Docker Desktop"}} docker/stop -.-> lab-555150{{"Verwendung des docker desktop stop Befehls zur Verwaltung von Docker Desktop"}} docker/pull -.-> lab-555150{{"Verwendung des docker desktop stop Befehls zur Verwaltung von Docker Desktop"}} end

Grundlegende Verwendung von docker stop verstehen

In diesem Schritt lernen wir die grundlegende Verwendung des docker stop-Befehls. Der docker stop-Befehl dient zum Stoppen eines oder mehrerer laufender Container. Standardmäßig sendet der Befehl ein SIGTERM-Signal an den Container und nach einer Karenzzeit ein SIGKILL-Signal, falls der Container nicht gestoppt wurde.

Zuerst starten wir einen einfachen Container, der aktiv bleibt. Wir verwenden das ubuntu-Image und führen einen Befehl aus, der den Container am Laufen hält.

docker run -d ubuntu sleep infinity

Das Flag -d startet den Container im Detached-Modus, d.h. er läuft im Hintergrund. sleep infinity ist ein Befehl, der den Container unbegrenzt aktiv hält.

Nun listen wir die laufenden Container auf, um die Container-ID zu erhalten.

docker ps

Sie sollten eine ähnliche Ausgabe sehen, die Ihren laufenden ubuntu-Container anzeigt:

CONTAINER ID   IMAGE          COMMAND           CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu         "sleep infinity"   X seconds ago   Up X seconds             <container_name>

Ersetzen Sie <container_id> mit der tatsächlichen ID Ihres laufenden Containers aus der docker ps-Ausgabe. Stoppen Sie nun den Container mit dem docker stop-Befehl gefolgt von der Container-ID.

docker stop <container_id>

Nach Ausführung dieses Befehls sollte der Container stoppen. Sie können dies überprüfen, indem Sie die laufenden Container erneut auflisten.

docker ps

Diesmal sollte der docker ps-Befehl den gerade gestoppten Container nicht mehr anzeigen.

Um alle Container einschließlich der gestoppten anzuzeigen, können Sie das -a-Flag mit docker ps verwenden.

docker ps -a

Dies zeigt Ihnen den gestoppten Container mit dem Status Exited an.

Docker-Container mit Detach-Option stoppen

In diesem Schritt untersuchen wir das Stoppen eines Containers unter Verwendung der Detach-Option. Während docker stop selbst nicht direkt eine Detach-Option wie docker run besitzt, ist das Konzept des Abkoppelns (Detaching) inherent in der Funktionsweise von docker stop, wenn Sie es in Ihrem Terminal ausführen. Der Befehl wird ausgeführt und gibt die Kontrolle an Ihr Terminal zurück, sobald das Stopp-Signal gesendet wurde, wodurch Sie andere Aufgaben fortsetzen können.

Lassen Sie uns zunächst einen weiteren Container starten, den wir stoppen werden. Diesmal verwenden wir das nginx-Image. Laden Sie zunächst das nginx-Image herunter, falls es nicht lokal vorhanden ist.

docker pull nginx

Starten Sie nun den nginx-Container im Detached-Modus.

docker run -d nginx

Ermitteln Sie die Container-ID des laufenden nginx-Containers.

docker ps

Sie sehen eine ähnliche Ausgabe, die sowohl den vorherigen ubuntu-Container (falls nicht entfernt) als auch den neuen nginx-Container anzeigt:

CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
<nginx_container_id>   nginx          "nginx -g 'daemon off"   X seconds ago   Up X seconds   80/tcp    <nginx_container_name>
<ubuntu_container_id>   ubuntu         "sleep infinity"         Y minutes ago   Exited Y minutes ago             <ubuntu_container_name>

Stoppen Sie nun den nginx-Container mit seiner ID.

docker stop <nginx_container_id>

Wenn Sie docker stop ausführen, sendet der Befehl das Stopp-Signal und gibt sofort die Kontrolle an Ihr Terminal zurück. Dies ist das "abgekoppelte" (detached) Verhalten aus Sicht Ihrer Terminal-Sitzung – Sie müssen nicht warten, bis der Container vollständig gestoppt ist, bevor Sie einen weiteren Befehl eingeben können.

Überprüfen Sie, ob der nginx-Container gestoppt wurde.

docker ps

Der nginx-Container sollte nicht mehr in der Liste der laufenden Container erscheinen.

Docker-Container gewaltsam stoppen

In diesem Schritt lernen wir, wie man einen Container mit dem docker stop-Befehl gewaltsam stoppt. Während docker stop standardmäßig ein sanftes Stopp-Signal (SIGTERM) sendet, reagiert ein Container manchmal nicht auf dieses Signal und muss gewaltsam gestoppt werden. Dies wird durch das Standardverhalten von docker stop erreicht, das nach einem Timeout ein SIGKILL sendet.

Lassen Sie uns einen Container starten, der sich schwer sanft stoppen lässt. Wir verwenden wieder einen einfachen ubuntu-Container, simulieren diesmal jedoch einen Prozess, der das SIGTERM-Signal ignoriert.

docker run -d ubuntu sh -c 'trap "" SIGTERM; sleep infinity'

In diesem Befehl:

  • trap "" SIGTERM weist die Shell an, das SIGTERM-Signal zu ignorieren
  • sleep infinity hält den Container am Laufen

Ermitteln Sie die Container-ID dieses neuen ubuntu-Containers.

docker ps

Sie sollten den neuen ubuntu-Container laufen sehen.

CONTAINER ID   IMAGE          COMMAND                        CREATED         STATUS         PORTS     NAMES
<force_stop_container_id>   ubuntu         "sh -c 'trap \"\" SIGT…"   X seconds ago   Up X seconds             <container_name>
<nginx_container_id>   nginx          "nginx -g 'daemon off"   Y minutes ago   Exited Y minutes ago   80/tcp    <nginx_container_name>
<ubuntu_container_id>   ubuntu         "sleep infinity"         Z minutes ago   Exited Z minutes ago             <ubuntu_container_name>

Versuchen Sie nun, diesen Container mit dem standardmäßigen docker stop-Befehl und seiner ID zu stoppen.

docker stop <force_stop_container_id>

Da der Container das SIGTERM-Signal ignoriert, wartet docker stop die standardmäßige Karenzzeit (normalerweise 10 Sekunden) und sendet dann ein SIGKILL-Signal, das nicht ignoriert werden kann. Dies stoppt den Container gewaltsam. Sie bemerken möglicherweise eine kurze Verzögerung, bevor der Befehl abgeschlossen ist.

Überprüfen Sie, ob der Container gestoppt wurde.

docker ps

Der Container sollte nicht mehr als laufend aufgeführt sein.

Sie können auch explizit ein Timeout von 0 Sekunden mit dem -t-Flag angeben, um sofort ein SIGKILL-Signal zu senden und den Container ohne Wartezeit gewaltsam zu stoppen. Wir werden das -t-Flag im nächsten Schritt näher untersuchen.

Docker-Container mit Timeout stoppen

In diesem Schritt lernen wir, wie man einen Container mit einem spezifischen Timeout mithilfe des -t oder --time-Flags beim docker stop-Befehl stoppt. Dies ermöglicht es Ihnen festzulegen, wie lange Docker warten soll, bis der Container nach dem Senden des SIGTERM-Signals ordnungsgemäß beendet wird, bevor er gewaltsam mit SIGKILL gestoppt wird.

Lassen Sie uns einen Container starten, den wir mit einem Timeout stoppen werden. Wir verwenden das ubuntu-Image und ein Skript, das auf ein Signal wartet, bevor es beendet wird.

docker run -d ubuntu sh -c 'trap "exit 0" SIGTERM; sleep infinity'

Dieser Befehl startet einen ubuntu-Container im Detached-Modus. Der Teil trap "exit 0" SIGTERM richtet einen Trap ein, der das Skript veranlasst, sich ordnungsgemäß zu beenden, wenn es ein SIGTERM-Signal empfängt. sleep infinity hält den Container am Laufen, bis er das Signal empfängt.

Ermitteln Sie die Container-ID dieses neuen ubuntu-Containers.

docker ps

Sie sollten den neuen ubuntu-Container laufen sehen.

CONTAINER ID   IMAGE          COMMAND                        CREATED         STATUS         PORTS     NAMES
<timeout_container_id>   ubuntu         "sh -c 'trap \"exit 0\"…"   X seconds ago   Up X seconds             <container_name>
<force_stop_container_id>   ubuntu         "sh -c 'trap \"\" SIGT…"   Y minutes ago   Exited Y minutes ago             <container_name>
<nginx_container_id>   nginx          "nginx -g 'daemon off"   Z minutes ago   Exited Z minutes ago   80/tcp    <nginx_container_name>
<ubuntu_container_id>   ubuntu         "sleep infinity"         A minutes ago   Exited A minutes ago             <ubuntu_container_name>

Stoppen Sie nun diesen Container mit einem Timeout von 5 Sekunden unter Verwendung des -t-Flags.

docker stop -t 5 <timeout_container_id>

Docker sendet das SIGTERM-Signal und wartet 5 Sekunden. Da unser Container so eingerichtet ist, dass er bei SIGTERM ordnungsgemäß beendet wird, sollte er innerhalb dieses Timeout-Zeitraums stoppen. Falls er innerhalb von 5 Sekunden nicht stoppt, würde Docker dann ein SIGKILL senden.

Überprüfen Sie, ob der Container gestoppt wurde.

docker ps

Der Container sollte nicht mehr als laufend aufgeführt sein.

Die Verwendung des -t-Flags ist nützlich, wenn Sie Ihrem Container eine bestimmte Zeitspanne für Aufräumarbeiten geben möchten, bevor er gewaltsam gestoppt wird.

Zusammenfassung

In diesem Lab haben wir die grundlegende Verwendung des docker stop-Befehls zum Verwalten laufender Container gelernt. Wir begannen mit dem Verständnis, dass docker stop zunächst ein SIGTERM-Signal sendet und nach einer Karenzzeit ein SIGKILL folgt. Wir übten das Stoppen eines einfachen ubuntu-Containers im Detached-Modus, indem wir seine Container-ID mit docker ps ermittelten und dann docker stop <container_id> ausführten. Wir überprüften den gestoppten Status des Containers, indem wir die laufenden Container erneut auflisteten, und lernten auch, wie man alle Container einschließlich der gestoppten mit docker ps -a anzeigt.