Comment utiliser la commande docker desktop stop pour gérer Docker Desktop

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce lab, vous apprendrez à gérer efficacement vos conteneurs Docker en utilisant la commande docker stop. Nous aborderons l'utilisation de base pour arrêter un conteneur en cours d'exécution, explorerons différentes options pour contrôler le processus d'arrêt, y compris comment forcer l'arrêt d'un conteneur et comment définir un délai d'attente (timeout) pour l'opération d'arrêt. À la fin de ce lab, vous serez compétent dans l'utilisation de docker stop pour terminer vos conteneurs Docker de manière gracieuse ou forcée.


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{{"Comment utiliser la commande docker desktop stop pour gérer Docker Desktop"}} docker/ps -.-> lab-555150{{"Comment utiliser la commande docker desktop stop pour gérer Docker Desktop"}} docker/stop -.-> lab-555150{{"Comment utiliser la commande docker desktop stop pour gérer Docker Desktop"}} docker/pull -.-> lab-555150{{"Comment utiliser la commande docker desktop stop pour gérer Docker Desktop"}} end

Comprendre l'utilisation de base de docker stop

Dans cette étape, nous allons apprendre l'utilisation de base de la commande docker stop. La commande docker stop permet d'arrêter un ou plusieurs conteneurs en cours d'exécution. Par défaut, la commande envoie un signal SIGTERM au conteneur, puis après un délai de grâce, envoie un signal SIGKILL si le conteneur ne s'est pas arrêté.

Commençons par exécuter un conteneur simple qui restera actif. Nous utiliserons l'image ubuntu avec une commande qui maintient le conteneur en fonctionnement.

docker run -d ubuntu sleep infinity

L'option -d exécute le conteneur en mode détaché (en arrière-plan). La commande sleep infinity permet au conteneur de rester actif indéfiniment.

Listons maintenant les conteneurs en cours d'exécution pour obtenir l'ID du conteneur.

docker ps

Vous devriez voir une sortie similaire à ceci, montrant votre conteneur ubuntu en cours d'exécution :

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

Remplacez <container_id> par l'ID réel de votre conteneur issu de la sortie de docker ps. Maintenant, arrêtez le conteneur en utilisant la commande docker stop suivie de l'ID du conteneur.

docker stop <container_id>

Après avoir exécuté cette commande, le conteneur devrait s'arrêter. Vous pouvez le vérifier en listant à nouveau les conteneurs en cours d'exécution.

docker ps

Cette fois, la commande docker ps ne devrait plus afficher le conteneur que vous venez d'arrêter.

Pour voir tous les conteneurs, y compris ceux qui sont arrêtés, vous pouvez utiliser l'option -a avec docker ps.

docker ps -a

Cela affichera votre conteneur arrêté avec un statut Exited.

Arrêter Docker Desktop avec l'option detach

Dans cette étape, nous allons explorer l'arrêt d'un conteneur en utilisant le concept de détachement. Bien que docker stop ne possède pas d'option detach comme docker run, le principe de détachement est inhérent au fonctionnement de docker stop lorsqu'on l'exécute dans le terminal. La commande s'exécute et rend le contrôle au terminal une fois le signal d'arrêt envoyé, vous permettant ainsi de poursuivre d'autres tâches.

Commençons par exécuter un nouveau conteneur que nous arrêterons. Nous utiliserons cette fois l'image nginx. Tout d'abord, téléchargez l'image nginx si vous ne l'avez pas en local.

docker pull nginx

Maintenant, lancez le conteneur nginx en mode détaché.

docker run -d nginx

Récupérez l'ID du conteneur nginx en cours d'exécution.

docker ps

Vous verrez une sortie similaire à ceci, montrant à la fois l'ancien conteneur ubuntu (si vous ne l'avez pas supprimé) et le nouveau conteneur nginx :

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>

Maintenant, arrêtez le conteneur nginx en utilisant son ID.

docker stop <nginx_container_id>

Lorsque vous exécutez docker stop, la commande envoie le signal d'arrêt et rend immédiatement le contrôle à votre terminal. C'est le comportement "détaché" du point de vue de votre session terminal - vous n'avez pas besoin d'attendre que le conteneur s'arrête complètement avant de pouvoir saisir une autre commande.

Vérifiez que le conteneur nginx s'est bien arrêté.

docker ps

Le conteneur nginx ne devrait plus apparaître dans la liste des conteneurs en cours d'exécution.

Arrêt forcé de Docker Desktop

Dans cette étape, nous allons apprendre comment forcer l'arrêt d'un conteneur en utilisant la commande docker stop. Bien que docker stop envoie par défaut un signal d'arrêt gracieux (SIGTERM), il arrive qu'un conteneur ne réponde pas à ce signal et doive être arrêté de force. Ceci est réalisé par le comportement par défaut de docker stop qui envoie un SIGKILL après un délai d'attente.

Lançons un conteneur qui pourrait être difficile à arrêter gracieusement. Nous utiliserons à nouveau un simple conteneur ubuntu, mais cette fois nous simulerons un processus qui ignore le signal SIGTERM.

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

Dans cette commande :

  • trap "" SIGTERM indique au shell d'ignorer le signal SIGTERM
  • sleep infinity maintient le conteneur en fonctionnement

Récupérons l'ID de ce nouveau conteneur ubuntu.

docker ps

Vous devriez voir le nouveau conteneur ubuntu en cours d'exécution.

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>

Maintenant, essayons d'arrêter ce conteneur en utilisant la commande standard docker stop avec son ID.

docker stop <force_stop_container_id>

Comme le conteneur ignore le signal SIGTERM, docker stop attendra le délai de grâce par défaut (généralement 10 secondes) puis enverra un signal SIGKILL qui ne peut être ignoré. Cela forcera l'arrêt du conteneur. Vous pourriez remarquer un léger délai avant que la commande ne se termine.

Vérifions que le conteneur s'est bien arrêté.

docker ps

Le conteneur ne devrait plus apparaître dans la liste des conteneurs en cours d'exécution.

Vous pouvez également spécifier explicitement un délai de 0 secondes avec l'option -t pour envoyer immédiatement un signal SIGKILL, forçant ainsi l'arrêt sans attendre la période de grâce. Nous explorerons l'option -t dans l'étape suivante.

Arrêter Docker Desktop avec un délai d'attente

Dans cette étape, nous allons apprendre comment arrêter un conteneur avec un délai spécifique en utilisant l'option -t ou --time avec la commande docker stop. Cela vous permet de spécifier combien de temps Docker doit attendre que le conteneur s'arrête gracieusement après l'envoi du signal SIGTERM avant de l'arrêter de force avec SIGKILL.

Lançons un conteneur que nous arrêterons avec un délai. Nous utiliserons l'image ubuntu et un script qui attend un signal avant de s'arrêter.

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

Cette commande exécute un conteneur ubuntu en mode détaché. La partie trap "exit 0" SIGTERM configure un piège qui fera sortir le script gracieusement lorsqu'il recevra un signal SIGTERM. sleep infinity maintient le conteneur en fonctionnement jusqu'à ce qu'il reçoive le signal.

Récupérons l'ID de ce nouveau conteneur ubuntu.

docker ps

Vous devriez voir le nouveau conteneur ubuntu en cours d'exécution.

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>

Maintenant, arrêtons ce conteneur avec un délai de 5 secondes en utilisant l'option -t.

docker stop -t 5 <timeout_container_id>

Docker enverra le signal SIGTERM et attendra 5 secondes. Comme notre conteneur est configuré pour s'arrêter gracieusement sur SIGTERM, il devrait s'arrêter dans ce délai. S'il ne s'était pas arrêté dans les 5 secondes, Docker aurait alors envoyé un SIGKILL.

Vérifions que le conteneur s'est bien arrêté.

docker ps

Le conteneur ne devrait plus apparaître dans la liste des conteneurs en cours d'exécution.

L'utilisation de l'option -t est utile lorsque vous souhaitez donner à votre conteneur un temps spécifique pour effectuer des opérations de nettoyage avant d'être arrêté de force.

Résumé

Dans ce lab, nous avons appris les bases de l'utilisation de la commande docker stop pour gérer les conteneurs en cours d'exécution. Nous avons commencé par comprendre que docker stop envoie d'abord un signal SIGTERM suivi d'un SIGKILL après une période de grâce. Nous avons pratiqué l'arrêt d'un simple conteneur ubuntu fonctionnant en mode détaché en identifiant son ID via docker ps puis en exécutant docker stop <container_id>. Nous avons vérifié l'état d'arrêt du conteneur en listant à nouveau les conteneurs actifs et avons également appris à afficher tous les conteneurs, y compris ceux arrêtés, avec docker ps -a.