DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesDocker Compose et optimisation pour la production02 - Gérer les dépendances entre services

Détails

  • 20 minutes
  • Avancé

Objectifs

  • Utiliser depends_on pour ordonner le démarrage des services
  • Configurer un healthcheck pour sécuriser les dépendances
  • Appliquer des politiques de redémarrage adaptées à la production
Module Docker Compose et optimisation pour la production

Exercice 02 : Gérer les dépendances entre services

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Déclarer depends_on pour imposer un ordre de démarrage
  • ✅ Ajouter un healthcheck sur un service base de données
  • ✅ Utiliser condition: service_healthy pour attendre qu'un service soit prêt
  • ✅ Configurer une politique restart adaptée à chaque service
  • ✅ Démarrer la stack avec docker compose up --wait

Durée estimée : 20 min | Difficulté : ⭐⭐⭐⭐☆


📖 Contexte

depends_on sans condition garantit uniquement que le conteneur dépendant est démarré avant l'autre, pas qu'il est prêt à accepter des connexions. Un service PostgreSQL peut prendre plusieurs secondes avant d'accepter des requêtes SQL. condition: service_healthy couplé à un healthcheck résout ce problème.


📋 Énoncé

Déployez une API Node.js qui se connecte à PostgreSQL. L'API ne doit démarrer qu'une fois la base de données réellement prête. En cas de crash, l'API doit redémarrer automatiquement.


🧭 Déroulement

Tâche 1 : Ajouter un healthcheck à PostgreSQL

Déclarez le service db (image postgres:16-alpine) avec un healthcheck qui exécute pg_isready toutes les 5 secondes, avec un timeout de 5 secondes et 5 tentatives avant de passer en état unhealthy.

Indice : La commande de test doit être fournie sous forme de liste : ["CMD-SHELL", "pg_isready -U postgres"].

Vérification : docker compose ps affiche (healthy) dans la colonne STATUS après le démarrage.


Tâche 2 : Conditionner le démarrage de l'API

Ajoutez un service api (image node:20-alpine) avec depends_on configuré pour attendre que db soit service_healthy avant de démarrer.

Indice :

`yaml

depends_on:

db:

condition: service_healthy

`

Vérification : Dans les logs, l'API démarre après que PostgreSQL affiche database system is ready to accept connections.


Tâche 3 : Configurer les politiques de redémarrage

Ajoutez restart: unless-stopped sur le service api et restart: always sur le service db.

Indice : unless-stopped redémarre le conteneur sauf s'il a été arrêté manuellement. always redémarre y compris après un reboot du daemon Docker.

Vérification : Arrêtez manuellement le conteneur api avec docker stop - il redémarre automatiquement après quelques secondes.


Tâche 4 : Démarrer avec --wait

Lancez la stack avec docker compose up --wait pour que la commande ne rende la main qu'une fois tous les services healthy.

Indice : Sans --wait, docker compose up -d rend la main immédiatement sans attendre les healthchecks.

Vérification : La commande se termine uniquement quand docker compose ps indique healthy pour db.


🗂️ Mini-Projet

Complétez les points suivants :

  • Le healthcheck de db est visible dans docker inspect <container_db>
  • docker compose ps affiche (healthy) pour le service db
  • Supprimer et recréer la stack - l'API ne démarre jamais avant que db soit healthy
  • Tuer le processus api manuellement - il redémarre grâce à restart: unless-stopped
  • docker compose up --wait bloque jusqu'à ce que tous les services soient prêts

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement
  • Tâche 1 : Ajouter un healthcheck à PostgreSQL
  • Tâche 2 : Conditionner le démarrage de l'API
  • Tâche 3 : Configurer les politiques de redémarrage
  • Tâche 4 : Démarrer avec --wait
  • 🗂️ Mini-Projet