← Docker — livraison et exploitation des applications

Module 6 / 8 · 90 min

Compose, dépendances, santé et configuration

Distinguer ordre de lancement et disponibilité réelle.

Votre progression apparaîtra ici lorsque JavaScript est actif.

La progression et le meilleur score sont enregistrés uniquement dans ce navigateur. Aucun compte n’est nécessaire ; effacer les données du navigateur les supprime. Les durées de modules sont indicatives et incluent les exercices.

Comprendre le mécanisme

Compose décrit plusieurs services, leurs réseaux, volumes et configuration. Une dépendance ordonne le démarrage mais le simple état running ne prouve pas qu’une base accepte déjà des requêtes. Un healthcheck et une condition de dépendance adaptée peuvent aider au démarrage. L’application doit néanmoins gérer les indisponibilités ultérieures : le succès initial ne garantit pas la disponibilité permanente d’une dépendance.

Raisonner et vérifier

Les variables d’environnement et les fichiers dotenv de Compose participent à l’interpolation et à la configuration selon leurs règles propres. Ne confondez pas leur traitement avec celui de Symfony. Pour un secret, choisissez un montage ou gestionnaire adapté et évitez l’exposition dans les images et logs. Vérifiez le rendu de configuration sans diffuser de valeurs sensibles.

Une déclaration décrit des intentions

Compose organise des services et ressources selon un fichier et un environnement donnés. Un YAML syntaxiquement valide ne prouve pas la disponibilité réelle d’une API ou de sa base. Les images, variables, volumes et réseaux doivent aussi être corrects. Lisez la configuration effective puis lancez le parcours utile ; la présence des bons noms de sections n’est pas une observation du comportement déployé.

Erreur fréquente à comprendre

Un YAML valide prouve toute disponibilité métier.

La syntaxe ne démontre pas l’exécution réelle.

Démarrer n’est pas être prêt

Une dépendance peut être en exécution alors que son initialisation n’est pas terminée. Un ordre de démarrage simple ne garantit donc pas que la base accepte déjà la première requête métier. Définissez le critère de disponibilité et les conditions que l’application peut attendre. Un délai fixe choisi au hasard peut masquer le problème sur une machine rapide sans le résoudre sur une autre.

Erreur fréquente à comprendre

depends_on sans analyse garantit toute base prête à requêter.

Le processus peut être démarré mais pas opérationnel.

Observer une santé pertinente

Un health check doit correspondre à une propriété clairement définie. Vérifier seulement qu’un processus existe ne démontre pas l’accès aux données nécessaires au parcours. À l’inverse, un contrôle trop lourd ou mutateur peut perturber le service. Choisissez une observation bornée et interprétable, avec un diagnostic minimisé. Le succès doit rester limité aux dépendances et conditions réellement exercées.

Erreur fréquente à comprendre

Tout processus existant garantit une route fonctionnelle.

Le contrôle doit correspondre au contrat du service.

Comprendre la condition de démarrage

Une condition comme service_healthy peut organiser le démarrage d’un service consommateur selon la santé déclarée de sa dépendance. Cette coordination ne garantit pas sa disponibilité éternelle. Vérifiez la définition du health check et le comportement du mode de déploiement ciblé. Une configuration porte des règles ; les tests doivent montrer ce qu’elles font lors d’un démarrage lent et d’un refus persistant.

Erreur fréquente à comprendre

healthy constitue une preuve universelle de toute dépendance future.

La santé est une observation limitée dans le temps.

Les pannes peuvent arriver après le démarrage

Une dépendance initialement saine peut tomber en panne pendant le service. L’application doit donc conserver des délais, erreurs et reprises adaptées indépendamment de l’ordre initial. Tester uniquement docker compose up ne couvre pas cette phase. Simulez une indisponibilité après un parcours réussi et vérifiez le refus borné, la récupération et l’absence de répétition incontrôlée d’un effet métier sensible.

Erreur fréquente à comprendre

Un démarrage ordonné empêche toute panne ultérieure.

Les dépendances peuvent tomber en panne ensuite.

Deux usages différents des fichiers dotenv

L’interpolation de variables par Compose et la lecture de configuration par Symfony ne sont pas nécessairement le même mécanisme ni le même moment. Une valeur disponible pour construire le YAML ne se retrouve pas automatiquement dans tout processus. Définissez la chaîne d’injection attendue et contrôlez les variables effectives sans publier les secrets. Un nom de fichier identique ne rend pas deux contrats de configuration interchangeables.

Erreur fréquente à comprendre

Une valeur absente produit toujours la bonne configuration.

Les valeurs par défaut et erreurs doivent être maîtrisées.

Un nom de service n’exige pas un port public

Sur le réseau prévu, les services peuvent utiliser leur résolution interne pour communiquer. La dépendance db n’a pas toujours besoin d’une publication vers Internet. Cette possibilité de connexion ne remplace ni authentification ni disponibilité SQL. Testez depuis le consommateur réel afin de distinguer erreur de nom, refus réseau et erreur de credentials sans élargir inutilement la surface exposée.

Erreur fréquente à comprendre

Tout port hôte est obligatoire pour une communication interne.

Les réseaux de services peuvent suffire.

La politique de redémarrage a des limites

Relancer un processus peut aider après certains échecs, mais ne répare pas une donnée invalide ou une mauvaise configuration permanente. Une boucle de redémarrages peut consommer des ressources et masquer la cause. Définissez les conditions et l’observation de reprise. Un test doit inclure un défaut persistant et montrer que l’exploitation peut le diagnostiquer, au lieu d’interpréter toute nouvelle tentative comme un progrès.

Erreur fréquente à comprendre

Une politique restart corrige tout défaut de données.

Elle relance un processus sans réparer nécessairement la cause.

Vérifier les ressources dans le runtime choisi

Les options de limite doivent être effectivement prises en compte par le moteur et le mode de déploiement utilisés. Leur présence dans un exemple ne prouve pas la même application partout. Mesurez consommation, refus et comportement sous pression dans l’environnement cible. Un budget mémoire borne certaines conséquences mais ne corrige pas la fuite qui les provoque ; il peut conduire à un arrêt qu’il faut aussi gérer.

Erreur fréquente à comprendre

Tout champ YAML est appliqué identiquement par tout runtime.

Le moteur et le mode de déploiement comptent.

Construire des scénarios dégradés

Un démarrage nominal ne couvre pas dépendance silencieuse, réponse lente et erreur durable. Utilisez des services simulés ou un laboratoire pour provoquer ces états sans toucher les données réelles. Pour chaque scénario, écrivez durée maximale et effet interdit. Cette matrice permet de vérifier la résilience comme un contrat observable, plutôt que l’attribuer au seul fait d’utiliser un orchestrateur ou une politique de restart.

Erreur fréquente à comprendre

Un seul démarrage nominal prouve toute résilience.

Les scénarios dégradés vérifient d’autres propriétés.

Atelier guidé : lire, expliquer et vérifier le code

services:
  api:
    image: example/lab-api:1
    depends_on:
      - db
  db:
    image: postgres:18

L’extrait déclare une dépendance de démarrage entre api et db. Il ne présente ni condition de santé ni preuve que PostgreSQL accepte une requête lorsque l’application effectue son premier appel. Il faut donc distinguer la relation déclarée, bien présente, de la disponibilité métier qui reste à définir et observer.

Dans un laboratoire, ralentissez l’initialisation de la base et relevez le comportement de l’API. Ajoutez une coordination adaptée si elle répond au besoin, puis provoquez une panne après un démarrage réussi. L’application doit encore respecter ses budgets et sa politique de reprise. Le test montre ainsi ce que l’organisation initiale apporte, et quelles responsabilités restent dans le consommateur pendant la durée du service.

Exemple commenté

services:
  app:
    image: lab-app:release
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres:18
    environment:
      POSTGRES_PASSWORD_FILE: /run/secrets/lab_password
    secrets: [lab_password]
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      retries: 10
secrets:
  lab_password:
    file: ./lab-password.txt

Le fragment attend une santé définie de db au démarrage de app. Le fichier de secret de laboratoire est fourni séparément et ne doit pas être committé. Complétez avec le volume et les paramètres propres à votre projet.

Exercice de mise en pratique

Simulez une base qui devient indisponible après le démarrage correct de l’application.

Voir une proposition de correction

Vérifiez la stratégie de reconnexion, délais et erreurs applicatives. Le healthcheck ne remplace pas cette gestion. Documentez le comportement observable lors d’une reprise.

Points de vérification

  • Tester aussi la panne après démarrage.
  • Vérifier le sens du healthcheck.
  • Distinguer interpolation Compose et configuration applicative.

Contrôle de connaissances

Cours associé : Compose, dépendances, santé et configuration ↗
Un conteneur running garantit-il que sa base accepte déjà les requêtes ?

Documentation de référence ↗

Validation du module

101 questions, objectif pédagogique de 75 %. Durée conseillée de 150 minutes, sans limite imposée. Les questions et les choix sont mélangés ; le corrigé apparaît après validation. Le contrôle rapide de la leçon et l’examen final du cours restent des exercices distincts.

Commencer ou reprendre les 101 questions →