Comment utiliser la commande docker container restart pour gérer 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 à gérer efficacement les conteneurs Docker en utilisant la commande docker restart. Vous commencerez par comprendre le processus de base pour redémarrer un conteneur en cours d'exécution, une opération fondamentale pour appliquer des modifications ou résoudre des problèmes.

Ensuite, vous explorerez des options de redémarrage plus avancées. Cela inclut la spécification d'un délai personnalisé (timeout) pour le processus de redémarrage, vous permettant de contrôler combien de temps Docker attend qu'un conteneur s'arrête proprement avant de forcer son arrêt. Enfin, vous apprendrez comment redémarrer un conteneur en utilisant un signal spécifique, offrant ainsi un contrôle précis sur le comportement d'arrêt du conteneur lors d'un redémarrage.


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/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/restart("Restart Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555119{{"Comment utiliser la commande docker container restart pour gérer les conteneurs"}} docker/ps -.-> lab-555119{{"Comment utiliser la commande docker container restart pour gérer les conteneurs"}} docker/start -.-> lab-555119{{"Comment utiliser la commande docker container restart pour gérer les conteneurs"}} docker/stop -.-> lab-555119{{"Comment utiliser la commande docker container restart pour gérer les conteneurs"}} docker/restart -.-> lab-555119{{"Comment utiliser la commande docker container restart pour gérer les conteneurs"}} docker/pull -.-> lab-555119{{"Comment utiliser la commande docker container restart pour gérer les conteneurs"}} end

Redémarrer un conteneur en cours d'exécution

Dans cette étape, vous apprendrez comment redémarrer un conteneur Docker en cours d'exécution. Le redémarrage d'un conteneur est une opération courante lorsque vous devez appliquer des modifications de configuration, résoudre des problèmes ou simplement rafraîchir l'état du conteneur.

Commencez par télécharger une image Nginx simple pour nos exemples. Nous utiliserons l'image nginx:latest.

docker pull nginx:latest

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

Ensuite, nous allons exécuter un conteneur basé sur cette image. Nous le lancerons en mode détaché (-d) pour qu'il s'exécute en arrière-plan et lui attribuerons un nom (--name my-nginx).

docker run -d --name my-nginx nginx:latest

Cette commande démarrera le conteneur Nginx et affichera son ID de conteneur.

Pour vérifier que le conteneur est en cours d'exécution, vous pouvez utiliser la commande docker ps.

docker ps

Vous devriez voir le conteneur my-nginx listé avec un statut Up.

Maintenant, redémarrons le conteneur en cours d'exécution en utilisant la commande docker restart suivie du nom du conteneur.

docker restart my-nginx

Cette commande arrêtera le conteneur puis le redémarrera.

Pour confirmer que le conteneur a été redémarré et qu'il est à nouveau en cours d'exécution, utilisez à nouveau docker ps.

docker ps

Vous devriez voir le conteneur my-nginx listé à nouveau, et la colonne STATUS devrait afficher Up avec une heure indiquant qu'il a été récemment démarré.

Redémarrer un conteneur avec un délai spécifique

Dans cette étape, vous apprendrez comment redémarrer un conteneur Docker avec un délai (timeout) spécifique. Lorsque vous redémarrez un conteneur, Docker envoie un signal d'arrêt (par défaut SIGTERM) au processus principal du conteneur. Si le processus ne se termine pas dans un certain délai, Docker envoie un signal de terminaison forcée (SIGKILL). Le délai par défaut est de 10 secondes. Vous pouvez ajuster ce délai en utilisant l'option -t ou --time avec la commande docker restart.

Utilisons le conteneur my-nginx créé précédemment. D'abord, vérifiez qu'il est en cours d'exécution.

docker ps

Si le conteneur n'est pas en cours d'exécution, relancez-le :

docker start my-nginx

Maintenant, redémarrons le conteneur avec un délai de 5 secondes. Cela signifie que Docker attendra 5 secondes après l'envoi du signal d'arrêt avant d'envoyer le signal de terminaison forcée.

docker restart -t 5 my-nginx

Vous devriez voir le nom du conteneur s'afficher, indiquant que la commande de redémarrage a été exécutée.

Pour observer l'effet du délai, vous auriez normalement besoin d'un conteneur qui met plus de 10 secondes (le délai par défaut) à s'arrêter proprement. Cependant, pour cet exercice, nous nous concentrons sur la syntaxe de la commande.

Essayons maintenant un redémarrage avec un délai plus long, par exemple 20 secondes.

docker restart --time 20 my-nginx

Là encore, vous verrez le nom du conteneur s'afficher.

L'option -t ou --time est utile lorsque vous avez des applications dans des conteneurs qui nécessitent plus de temps pour effectuer des opérations de nettoyage avant de s'arrêter.

Pour confirmer que le conteneur est toujours en cours d'exécution après le redémarrage, utilisez docker ps.

docker ps

Vous devriez voir my-nginx listé avec un statut Up.

Redémarrer un conteneur avec un signal spécifique

Dans cette étape, vous apprendrez comment redémarrer un conteneur Docker en envoyant un signal spécifique à son processus principal. Bien que docker restart envoie par défaut un signal d'arrêt (SIGTERM) suivi d'un signal de terminaison forcée (SIGKILL) après un délai, vous pourriez avoir besoin d'envoyer un signal différent selon l'application exécutée dans le conteneur. Pour ce faire, vous pouvez d'abord arrêter le conteneur avec un signal spécifique via docker stop, puis le relancer avec docker start.

Utilisons à nouveau le conteneur my-nginx. Vérifiez qu'il est en cours d'exécution.

docker ps

S'il ne l'est pas, démarrez-le :

docker start my-nginx

Maintenant, arrêtons le conteneur en envoyant le signal SIGKILL. Ce signal termine immédiatement le processus sans lui permettre d'effectuer aucune opération de nettoyage.

docker stop -s SIGKILL my-nginx

Vous devriez voir le nom du conteneur s'afficher, et si vous exécutez docker ps, le conteneur ne devrait plus apparaître.

docker ps

Le conteneur est maintenant arrêté. Pour le redémarrer, il suffit de le relancer.

docker start my-nginx

Le conteneur devrait maintenant être à nouveau en cours d'exécution. Vérifiez avec docker ps.

docker ps

Vous devriez voir my-nginx listé avec un statut Up.

Bien que SIGKILL soit un arrêt forcé, vous pouvez également envoyer d'autres signaux comme SIGHUP ou SIGINT, si votre application est configurée pour les gérer afin d'effectuer des arrêts gracieux ou des rechargements. Cependant, la configuration par défaut du conteneur nginx gère correctement SIGTERM.

Arrêtons à nouveau le conteneur, cette fois en utilisant le signal par défaut SIGTERM (qui est celui utilisé par docker stop si aucun signal n'est spécifié).

docker stop my-nginx

Vérifiez qu'il est arrêté :

docker ps

Maintenant, redémarrez-le une dernière fois.

docker start my-nginx

Vérifiez qu'il est en cours d'exécution :

docker ps

En combinant docker stop -s <signal> et docker start, vous obtenez un contrôle plus précis sur la manière dont un conteneur est arrêté avant d'être redémarré.

Résumé

Dans ce lab, vous avez appris le processus fondamental pour redémarrer un conteneur Docker en cours d'exécution en utilisant la commande docker restart. Vous avez pratiqué le téléchargement d'une image Docker, l'exécution d'un conteneur en mode détaché, la vérification de son statut, puis son redémarrage avec succès.

De plus, vous avez exploré comment contrôler le processus de redémarrage en spécifiant une durée d'attente à l'aide du flag -t ou --time, vous permettant d'ajuster le temps que Docker attend pour qu'un conteneur s'arrête proprement avant de le terminer de force.