Docker Compose - basics

Nous utiliserons l'application Example Voting App pour l'exercice. Elle se trouve dans le dossier ~/example-voting-app.

Le fichier docker-compose.yml décrit l'ensemble des services définissant notre stack Docker Compose:

  • Vote: permet de voter pour Chien ou Chat
  • Result: permet de voir les résultats des votes
  • Worker: Traite les votes pour les insérer en base de données
  • Redis: gère les votes en cours via un système de queue
  • DB (Postgres): stocke les résultats

Nous utiliserons cette application pour illustrer nos exemples et exercices.

Documentation de référence:

🔖 Conseil: Ajoutez des liens à vos favoris, ils seront utiles !

Note: la CLI docker-compose standalone a été dépréciée en faveur de docker compose


Exercices

Lancement d'une stack Docker Compose

  • Utiliser la CLI docker compose pour lancer la stack en mode détaché
    docker compose --help
    

Les services Vote et Result expose une interface web accessible depuis la machine locale une fois lancés. Trouver dans le fichier docker-compose.yml les bindings de ports utilisés pour y accéder via votre navigateur.


Configuration de services Docker Compose

Modifier le service Redis pour:

  • Utiliser l'image redis:8.8.0
  • Nommer le container my_redis au démarrage
  • Ajouter une variable d'environnement SKIP_FIX_PERMS=1
    • Cette variable change le comportement de Redis au démarrage pour du setup de permissions.
    • Vérifier que le container a bien pris en compte ce changement. Plusieurs méthodes sont possibles

Fichier .env et variables d'environnement

Il est possible d'interpoler des variables d'environnements dans notre fichier docker-compose.yml à l'aide de fichiers .env. Par exemple:

# .env example
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "postgres"

Créer un fichier .env et modifier le service db pour passer les variables d'environnement depuis celui-ci. Plusieurs méthodes possibles:

  • Interpolation de variable
  • Configuration du service db pour utiliser directement un ou plusieurs fichiers .env et passer les variables dans le container

Healthcheck & depends on

Faisons en sorte de démarrer le service Worker après nous être assuré que la base de données Postgres soit disponible:

Ajouter une instruction healthcheck au service db:

  • Faire un bind mount du script resources/healthchecks/postgres.sh dans le container
  • Configurer healthcheck pour lancer le script toutes les 5s afin de vérifier la "healthiness" du service