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:
- Compose file specs
- Docker Compose CLI
- Par ex,
serviceet les sous-éléments sont documentés dans Services top-level elements
- Par ex,
🔖 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 composepour 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_redisau 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
dbpour utiliser directement un ou plusieurs fichiers.envet 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.shdans le container - Configurer
healthcheckpour lancer le script toutes les 5s afin de vérifier la "healthiness" du service