GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Guide du débutant sur la politique de redémarrage de Docker

Docker fournit une option de stratégie de redémarrage pour permettre à vos conteneurs de redémarrer automatiquement en cas de certains événements ou échecs.

Ceci est extrêmement utile dans les scénarios où vous devez redémarrer l'hôte Docker (votre serveur Linux) ou si le service exécuté dans le conteneur échoue.

Les politiques de redémarrage de Docker sont appliquées par conteneur. Il existe deux façons d'attribuer une stratégie de redémarrage à un conteneur. Vous pouvez le définir dans le fichier YAML si vous comptez utiliser Docker Compose, Swarm ou Kubernetes.

Vous pouvez également définir la politique de redémarrage directement dans la ligne de commande lorsque vous exécutez un conteneur :

docker container run --restart <policy>

Parlons du type de politique de redémarrage que vous pouvez utiliser.

Politiques de redémarrage de Docker

Il existe les politiques de redémarrage suivantes pour les conteneurs Docker :

  • non :le comportement par défaut est de ne pas démarrer automatiquement les conteneurs
  • toujours :toujours redémarrer un conteneur arrêté, sauf si le conteneur a été arrêté explicitement
  • sauf si arrêté :Redémarrez le conteneur à moins qu'il ne soit à l'état d'arrêt avant l'arrêt du démon Docker (expliqué plus loin)
  • on-failure :Redémarrez le conteneur s'il s'est terminé avec un code de sortie différent de zéro ou si le démon docker redémarre

Comme je l'ai mentionné, si vous n'ajoutez pas explicitement de stratégie de redémarrage, cela signifie "non", ce qui signifie que les conteneurs ne seront pas redémarrés automatiquement.

Expliquer les politiques de redémarrage de Docker avec des exemples

Permettez-moi de montrer ces politiques en action afin que vous puissiez réellement les visualiser. Ceci est particulièrement utile pour comprendre la différence entre  always et unless-stopped politiques.

Toujours redémarrer la politique

Commençons par le always politique de redémarrage. Avec cette stratégie définie, le conteneur sera toujours redémarré à moins qu'il n'ait été arrêté explicitement.

Je vais exécuter un conteneur Alpine Linux avec always politique de redémarrage. Je l'appelle toujours politique.

Le conteneur a une tâche. Il exécute la commande bash sleep pendant 10 secondes, puis se termine.

docker container run --name always-policy --restart always alpine sleep 10

Sans le always stratégie de redémarrage, le conteneur se serait arrêté au bout de 10 secondes. Mais ici, il redémarrera automatiquement et exécutera la commande sleep pendant encore 10 secondes et cela continuera comme ça.

[email protected]:~$ docker ps
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS         PORTS     NAMES
1171dcfb7e06   alpine    "sleep 10"   25 seconds ago   Up 4 seconds             always-policy

Vous pouvez voir dans la commande ci-dessus que bien que le conteneur ait été créé il y a 25 secondes, il n'a été activé que pendant 4 secondes. Veuillez garder à l'esprit que le même conteneur est redémarré, un nouveau n'est pas créé.

Vous pouvez utiliser la commande docker inspect pour voir combien de fois le conteneur a été redémarré jusqu'à présent.

[email protected]:~$ docker inspect always-policy | grep -i restartcount
        "RestartCount": 4,

Si vous arrêtez le conteneur avec la commande stop, il ne redémarrera pas automatiquement par la suite. Vous pouvez voir dans l'exemple ci-dessous que le conteneur a maintenant le statut "Exited" au lieu de Up.

[email protected]:~$ docker stop always-policy 
always-policy
[email protected]:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS                     PORTS     NAMES
1171dcfb7e06   alpine    "sleep 10"   58 seconds ago   Exited (0) 6 seconds ago             always-policy

J'ai utilisé le -it option pour exécuter le conteneur avec terminal interactif dans la capture d'écran ci-dessus. C'était par habitude et inutile ici.

politique sauf arrêt vs toujours redémarrage

Le unless-stopped est similaire à always politique de redémarrage. Les deux redémarrent les conteneurs automatiquement et si vous arrêtez les conteneurs explicitement, ils ne redémarrent pas.

Mais la principale différence entre les deux est que si vous arrêtez les conteneurs avec la commande docker stop, puis redémarrez le démon docker, le conteneur avec always la politique de redémarrage démarrera le conteneur automatiquement mais le conteneur avec unless-stopped la stratégie ne sera pas redémarrée.

Permettez-moi de le montrer avec des exemples. J'ai déjà un conteneur arrêté avec toujours la politique de redémarrage. Laissez-moi créer un nouveau conteneur nommé unless-stopped-policy avec unless-stopped politique.

docker container run --name unless-stopped-policy --restart always alpine sleep 10

Arrêtez le conteneur :

docker stop unless-stopped-policy

J'ai maintenant deux conteneurs qui ont été explicitement arrêtés :

[email protected]:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS                          PORTS     NAMES
d244b6e08899   alpine    "sleep 10"   2 minutes ago    Exited (0) About a minute ago             unless-stopped-policy
1171dcfb7e06   alpine    "sleep 10"   22 minutes ago   Exited (0) 21 minutes ago                 always-policy

Redémarrez le démon Docker :

sudo systemctl restart docker

Maintenant, si vous vérifiez les conteneurs en cours d'exécution, vous pouvez voir que le conteneur nommé always-policy est en cours d'exécution car il a été défini avec always politique de redémarrage.

[email protected]:~$ docker ps
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS         PORTS     NAMES
1171dcfb7e06   alpine    "sleep 10"   30 minutes ago   Up 8 seconds             always-policy

L'intégralité des étapes peut être vue dans cette capture d'écran :

politique de redémarrage en cas d'échec

Le on-failure la stratégie de redémarrage redémarre un conteneur s'il a été quitté avec un code de sortie différent de zéro (indiquant une erreur/un échec). Il redémarre également les conteneurs si le démon docker redémarre, y compris ceux qui étaient à l'état arrêté auparavant.

Si vous arrêtez manuellement un conteneur avec la commande docker stop, il existe avec le code zéro indiquant que tout était normal.

Définition de la politique de redémarrage dans le fichier Docker Compose

À présent, vous avez une assez bonne idée de l'exécution d'un conteneur avec une politique de redémarrage.

Si vous utilisez quelque chose comme Docker Compose pour déployer des conteneurs, vous pouvez mentionner la politique de redémarrage de l'objet de service dans le fichier YAML.

Voici un exemple :

version: "3.3"      
services:
    NginxProxy:
        image: "jwilder/nginx-proxy:latest"
        restart: "on-failure"
        networks: ["net"]
        ports:
            - "80:80"
            - "443:443"

Quelle politique de redémarrage Docker utiliser ?

Honnêtement, il n'y a pas de réponse simple à cette question. Cela dépend de votre cas d'utilisation et de ce que vous voulez.

J'espère que cet article a été utile pour comprendre la politique de redémarrage de Docker. Si vous avez des questions ou des suggestions, n'hésitez pas à me le faire savoir dans la section des commentaires.


Docker
  1. Comment exécuter Nginx dans un conteneur Docker :un guide étape par étape

  2. Quelques commandes DOCKER

  3. Comment se connecter en SSH à un conteneur Docker

  4. Comment installer Vim dans un conteneur Docker

  5. Guide complet du débutant sur la journalisation Docker

Apprendre Docker :comment créer un conteneur Docker

Comment utiliser les politiques de redémarrage de Docker pour maintenir les conteneurs en cours d'exécution

Comment exécuter PHPMyAdmin dans un conteneur Docker

Comment exécuter Grafana dans un conteneur Docker

Comment configurer un conteneur Apache Docker

Commandes Docker pour la gestion du cycle de vie des conteneurs (Guide définitif)