Agence web » Actualités du digital » Comment (et pourquoi) ajouter des contrôles de santé à vos conteneurs Docker –

Comment (et pourquoi) ajouter des contrôles de santé à vos conteneurs Docker –

Logo Docker bleu sur fond violet

Vous avez créé votre image Docker, l’avez transférée dans votre registre et lancé un nouveau conteneur en production. Tout fonctionne pendant que vous rentrez chez vous pour la journée, mais vous recevez des rapports de panne lorsque vous revenez le lendemain matin. Votre conteneur est toujours en cours d’exécution, mais il ne traite pas les demandes.

Ce scénario peut être inconfortablement familier aux équipes opérationnelles qui travaillent avec Docker. Voici comment utiliser la fonction de vérification de l’état de Docker pour obtenir des données précises sur la disponibilité de vos services.

Comment fonctionnent les bilans de santé

Les vérifications d’état permettent à un conteneur d’exposer la disponibilité de sa charge de travail. Ceci est différent du fait que le conteneur soit fonctionnement. Si votre base de données tombe en panne, votre serveur API ne pourra pas gérer les requêtes, même si son conteneur Docker est toujours en cours d’exécution.

Cela crée des expériences inutiles lors du dépannage. Un simple docker ps signalerait le conteneur comme disponible. L’ajout d’un bilan de santé étend la docker ps sortie pour inclure le véritable état du conteneur.

Vous configurez les vérifications de l’état des conteneurs dans votre Dockerfile. Cela accepte une commande que le démon Docker exécutera toutes les 30 secondes. Docker utilise le code de sortie de la commande pour déterminer l’intégrité de votre conteneur :

  • 0 – Le conteneur est sain et fonctionne normalement.
  • 1 – Le conteneur n’est pas sain ; la charge de travail peut ne pas fonctionner.
  • 2 – Ce code d’état est réservé par Docker et ne doit pas être utilisé.

Lorsque HEALTHCHECK est présent dans un Dockerfile, vous verrez l’intégrité du conteneur dans le STATUS colonne lorsque vous exécutez docker ps.

La salubrité n’est pas vérifiée immédiatement lors de la création des conteneurs. Le statut s’affichera comme starting avant le premier contrôle. Cela donne au conteneur le temps d’exécuter toutes les tâches de démarrage. Un conteneur avec un contrôle de santé réussi s’affichera comme healthy; un conteneur défectueux s’affiche unhealthy.

Écriture de commandes de vérification de l’état

Les vérifications de l’état des conteneurs sont configurées avec le HEALTHCHECK instructions dans votre Dockerfile. Vous devez utiliser une commande de vérification d’état appropriée à votre conteneur. Pour les serveurs Web, curl vous offre un moyen simple d’effectuer un contrôle de préparation de base. Pingez un point de terminaison connu qui devrait être disponible chaque fois que votre service est opérationnel.

FROM nginx:latest
HEALTHCHECK CMD curl --fail http://localhost/api/healthcheck || exit 1

Cet exemple marquerait le conteneur comme non sain si votre serveur /api/healthcheck le point de terminaison a émis un état d’erreur.

Vous pouvez utiliser docker inspect pour voir la sortie des commandes de contrôle d’intégrité. Ceci est utile lorsque vous déboguez votre HEALTHCHECK instruction.

docker inspect --format="{{json .State.Health}}" my-container

Remplacer my-container avec l’ID ou le nom du conteneur que vous souhaitez inspecter. Ces détails sont affichés dans docker ps production.

Personnalisation des bilans de santé

Docker vous permet de personnaliser la fréquence des contrôles de santé. Vous pouvez également modifier les critères qui marquent un conteneur comme non sain.

Quatre options sont disponibles :

  • --interval – Réglez l’intervalle entre les vérifications de l’état. Cela vous permet de remplacer la valeur par défaut de 30 secondes. Utilisez un intervalle plus élevé pour augmenter le temps entre les vérifications. Cela est utile si vous disposez d’un service de faible priorité où des vérifications d’état régulières peuvent avoir un impact sur les performances. Utilisez une fréquence plus régulière pour les services critiques.
  • --start-period – Définissez la durée après le démarrage d’un conteneur lorsque les vérifications de l’état doivent être ignorées. La commande sera toujours exécutée mais un état défectueux ne sera pas comptabilisé. Cela donne aux conteneurs le temps de terminer les procédures de démarrage.
  • --retries – Cela vous permet d’exiger plusieurs échecs successifs avant qu’un conteneur soit marqué comme unhealthy. La valeur par défaut est 3. Si une vérification de l’état échoue mais que la suivante réussit, le conteneur ne passera pas à unhealthy. Il deviendra malsain après trois vérifications infructueuses consécutives.
  • --timeout – Définissez le délai d’expiration des commandes de contrôle d’intégrité. Docker traitera la vérification comme un échec si la commande ne se termine pas dans ce laps de temps.

Les options sont transmises sous forme d’indicateurs au HEALTHCHECK instruction. Fournissez-les avant la commande de vérification de l’état :

HEALTHCHECK --interval=60s --retries=5 CMD curl --fail http://localhost || exit 1

Cette configuration demande à Docker d’exécuter curl toutes les 60 secondes. Le conteneur sera marqué comme non sain si cinq tests consécutifs ont un code de sortie différent de zéro.

Format de commande

le HEALTHCHECK la syntaxe de commande prend en charge soit un simple CMD ou un style de point d’entrée exec déployer. Vous pouvez également passer NONE à la place de CMD pour désactiver les vérifications d’état :

HEALTHCHECK NONE

Cela vous permet d’inhiber les vérifications de l’état de votre image de base. Chaque HEALTHCHECK L’instruction remplace toutes les instructions précédentes dans les calques de votre image.

Qu’en est-il de Docker Compose ?

Docker Compose prend également en charge les définitions de vérification de l’état. Ajouter un healthcheck rubrique à votre service :.

version: "3"
services:
  app:
    image: nginx:latest
    ports:
      - 80:80
    healthcheck:
      test: curl --fail http://localhost || exit 1
      interval: 10s
      retries: 5
      start_period: 5s
      timeout: 10s

le test key définit la commande à exécuter. Les autres clés correspondent aux paramètres acceptés par le Dockerfile HEALTHCHECK instruction.

Résumé

Réglage d’un HEALTHCHECK L’instruction facilite le diagnostic d’un conteneur qui se comporte mal. Vous pouvez suivre l’état de préparation de votre charge de travail indépendamment de l’état « en cours d’exécution » du conteneur.

Les vérifications de l’état sont compatibles avec toute commande qui émet un 0 ou alors 1 code de sortie. Vous pouvez utiliser des commandes courantes comme curl et ping pour inspecter les services Web et les bases de données. Pour un contrôle plus avancé, écrivez un script dédié et incluez-le dans vos images.

★★★★★