Comment utiliser la commande docker container stop pour arrêter proprement les conteneurs

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 à arrêter proprement des conteneurs Docker en utilisant la commande docker container stop. Nous commencerons par créer et exécuter un conteneur simple. Ensuite, vous explorerez comment arrêter des conteneurs en utilisant le signal et le timeout par défaut, puis vous apprendrez à personnaliser le timeout et le signal utilisés pour arrêter les conteneurs. Cette expérience pratique vous fournira des compétences concrètes pour gérer efficacement le cycle de vie de vos conteneurs Docker.


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-555124{{"Comment utiliser la commande docker container stop pour arrêter proprement les conteneurs"}} docker/ps -.-> lab-555124{{"Comment utiliser la commande docker container stop pour arrêter proprement les conteneurs"}} docker/stop -.-> lab-555124{{"Comment utiliser la commande docker container stop pour arrêter proprement les conteneurs"}} docker/pull -.-> lab-555124{{"Comment utiliser la commande docker container stop pour arrêter proprement les conteneurs"}} end

Créer et exécuter un conteneur simple

Dans cette étape, vous apprendrez à créer et exécuter un conteneur Docker simple. Un conteneur est une unité logicielle standard qui empaquette du code et toutes ses dépendances afin que l'application s'exécute rapidement et de manière fiable d'un environnement informatique à un autre.

Commencez par télécharger une image simple depuis Docker Hub. Nous utiliserons l'image hello-world, une image très légère qui se contente d'afficher un message avant de se terminer.

docker pull hello-world

Vous devriez voir une sortie indiquant que l'image est en cours de téléchargement.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Maintenant que nous avons l'image, nous pouvons exécuter un conteneur basé sur celle-ci. Utilisez la commande docker run :

docker run hello-world

Lorsque vous exécutez cette commande, Docker crée un nouveau conteneur à partir de l'image hello-world. Le conteneur exécute la commande définie dans l'image, qui dans ce cas consiste à afficher un message dans la console.

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Cette sortie confirme que votre installation Docker fonctionne et que vous avez exécuté avec succès votre premier conteneur. Le conteneur a exécuté le programme hello-world puis s'est terminé.

Pour voir les conteneurs qui ont été exécutés, y compris ceux qui se sont terminés, utilisez la commande docker ps -a :

docker ps -a

Vous devriez voir le conteneur hello-world listé avec un statut Exited.

CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                      PORTS     NAMES
<container_id>   hello-world   "/hello"   About a minute ago   Exited (0) About a minute ago             <container_name>

La sortie affiche l'ID du conteneur, l'image utilisée, la commande exécutée, sa date de création, son statut actuel et le nom qui lui a été attribué.

Arrêter un conteneur avec le signal et le timeout par défaut

Dans cette étape, vous apprendrez à arrêter un conteneur Docker en cours d'exécution en utilisant le signal et le timeout par défaut. Lorsque vous arrêtez un conteneur, Docker envoie un signal au processus principal s'exécutant à l'intérieur du conteneur. Par défaut, Docker envoie le signal SIGTERM, qui demande au processus de s'arrêter proprement. Si le processus ne se termine pas dans le délai par défaut (généralement 10 secondes), Docker envoie un signal SIGKILL pour forcer la terminaison du processus.

D'abord, lançons un conteneur qui restera actif. Nous utiliserons l'image ubuntu avec une commande simple pour maintenir le conteneur en fonctionnement.

docker pull ubuntu

Vous devriez voir une sortie indiquant que l'image ubuntu est en cours de téléchargement.

Using default tag: latest
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

Maintenant, exécutez le conteneur ubuntu en mode détaché (-d) pour qu'il tourne en arrière-plan, avec une commande qui le maintient actif indéfiniment (par exemple tail -f /dev/null).

docker run -d ubuntu tail -f /dev/null

Cette commande affichera l'ID du conteneur.

<container_id>

Vous pouvez vérifier que le conteneur est en cours d'exécution avec la commande docker ps :

docker ps

Vous devriez voir le conteneur ubuntu listé avec le statut Up.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Up About a minute ago             <container_name>

Maintenant, arrêtons ce conteneur en utilisant la commande docker stop. Vous pouvez utiliser soit l'ID du conteneur soit son nom. Remplacez <container_id> par l'ID réel de votre conteneur.

docker stop <container_id>

La commande affichera l'ID du conteneur arrêté.

<container_id>

Après l'exécution de docker stop, le conteneur recevra le signal SIGTERM. Docker attendra le timeout par défaut (10 secondes) pour que le conteneur s'arrête proprement. S'il ne s'arrête pas dans ce délai, il enverra un SIGKILL.

Vérifiez que le conteneur est arrêté en relançant docker ps.

docker ps

Le conteneur ubuntu ne devrait plus apparaître dans la sortie de docker ps (qui n'affiche que les conteneurs actifs). Pour voir tous les conteneurs, y compris ceux arrêtés, utilisez docker ps -a.

docker ps -a

Vous devriez voir le conteneur ubuntu listé avec le statut Exited.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Exited (0) About a minute ago             <container_name>

Ceci confirme que le conteneur a bien été arrêté en utilisant le signal et le timeout par défaut.

Arrêter un conteneur avec un timeout personnalisé

Dans cette étape, vous apprendrez à arrêter un conteneur Docker en cours d'exécution en spécifiant une durée de timeout personnalisée pour la période d'arrêt gracieux. Ceci est utile lorsque vous avez besoin d'accorder plus ou moins de temps à votre application pour s'arrêter proprement avant que Docker ne la termine de force.

Nous utiliserons la même image ubuntu et la même commande que dans l'étape précédente pour exécuter un conteneur qui reste actif.

D'abord, lancez le conteneur ubuntu en mode détaché (-d) avec la commande tail -f /dev/null :

docker run -d ubuntu tail -f /dev/null

Cette commande affichera l'ID du conteneur.

<container_id>

Vérifiez que le conteneur est en cours d'exécution avec docker ps :

docker ps

Vous devriez voir le conteneur ubuntu listé avec le statut Up.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Up About a minute ago             <container_name>

Maintenant, arrêtez le conteneur en utilisant la commande docker stop, mais cette fois-ci en spécifiant un timeout avec l'option -t ou --time. Définissons le timeout à 5 secondes. Remplacez <container_id> par l'ID réel de votre conteneur en cours d'exécution.

docker stop -t 5 <container_id>

La commande affichera l'ID du conteneur arrêté.

<container_id>

Lorsque vous utilisez docker stop -t 5, Docker envoie le signal SIGTERM et attend 5 secondes que le conteneur s'arrête. Si le conteneur est toujours en cours d'exécution après 5 secondes, Docker enverra le signal SIGKILL.

Vérifiez que le conteneur s'est arrêté en exécutant docker ps -a :

docker ps -a

Vous devriez voir le conteneur ubuntu listé avec le statut Exited.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Exited (0) About a minute ago             <container_name>

Vous avez réussi à arrêter le conteneur avec un timeout personnalisé de 5 secondes.

Arrêter un conteneur avec un signal personnalisé

Dans cette étape, vous apprendrez à arrêter un conteneur Docker en cours d'exécution en envoyant un signal spécifique autre que le SIGTERM par défaut. Cela peut être utile pour les applications configurées pour répondre à différents signaux lors d'un arrêt gracieux ou pour d'autres actions.

Nous utiliserons à nouveau l'image ubuntu et la commande tail -f /dev/null pour maintenir un conteneur en fonctionnement.

Exécutez le conteneur ubuntu en mode détaché (-d) :

docker run -d ubuntu tail -f /dev/null

Cette commande affichera l'ID du conteneur.

<container_id>

Vérifiez que le conteneur est en cours d'exécution avec docker ps :

docker ps

Vous devriez voir le conteneur ubuntu listé avec le statut Up.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Up About a minute ago             <container_name>

Maintenant, arrêtez le conteneur en utilisant la commande docker stop et spécifiez un signal personnalisé avec l'option --signal. Par exemple, envoyons directement le signal SIGKILL. Remplacez <container_id> par l'ID réel de votre conteneur en cours d'exécution.

docker stop --signal SIGKILL <container_id>

La commande affichera l'ID du conteneur arrêté.

<container_id>

Lorsque vous utilisez docker stop --signal SIGKILL, Docker envoie immédiatement le signal SIGKILL au processus principal du conteneur. Ce signal ne peut pas être intercepté ou ignoré par le processus, qui se terminera donc de force sans période d'arrêt gracieux.

Vérifiez que le conteneur s'est arrêté en exécutant docker ps -a :

docker ps -a

Vous devriez voir le conteneur ubuntu listé avec le statut Exited.

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu    "tail -f /dev/null"   About a minute ago   Exited (137) About a minute ago             <container_name>

Notez que le code de sortie peut être différent (par exemple 137) lorsqu'un conteneur est arrêté avec SIGKILL, car cela indique une terminaison non gracieuse.

Vous avez réussi à arrêter le conteneur en envoyant un signal personnalisé.

Résumé

Dans ce lab, vous avez appris les étapes fondamentales pour travailler avec des conteneurs Docker. Vous avez commencé par télécharger une image simple (hello-world) depuis Docker Hub, puis vous avez exécuté un conteneur basé sur cette image. Cela a démontré le processus de base pour créer et exécuter un conteneur, et vous avez vérifié son bon fonctionnement en contrôlant son statut avec la commande docker ps -a.

Les étapes suivantes, bien que non détaillées dans le contenu fourni, vous auraient guidé à travers le processus d'arrêt des conteneurs en cours d'exécution en utilisant la commande docker container stop. Cela aurait inclus la compréhension du signal et du timeout par défaut utilisés pour l'arrêt, puis l'exploration de la manière de personnaliser à la fois la durée du timeout et le signal envoyé au conteneur pour réaliser un arrêt gracieux.