Docker Compose
Docker Compose est un outil qui permet de définir et de gérer des applications multi-conteneurs avec Docker. Avec Compose, vous utilisez un fichier YAML pour configurer les services de votre application. Cela permet de démarrer tous les services d'une application avec une seule commande.
Docker Compose est installé avec Docker Desktop, mais il peut s'installer en ligne de commande si jamais vous avez opté pour cette pratique :
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Création d'un fichier Compose
Un fichier Compose est un fichier YAML qui définit les services, les réseaux et les volumes pour votre application.
Exemple :
version: '3'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
db:
image: postgres:alpine
environment:
POSTGRES_PASSWORD: examplepassword
Dans cet exemple, deux services sont définis : web
et db
. Le service web utilise l'image nginx:alpine
et mappe le port 8080
de l'hôte au port 80
du conteneur. Le service db
utilise l'image postgres:alpine
et définit un mot de passe pour la base de données.
Le port
80
est déjà utilisé par votre machine pour naviguer sur le Web, vous ne pouvez donc pas le réutiliser. Voilà pourquoi on utilise un port tel que8080
. Cette numérotation est libre, vous pouvez utiliser1234
si vous voulez.
Dépendances
Il est possible de définir des dépendances entre services dans Docker Compose avec l'option depends_on
.
L'option depends_on
dans un fichier Compose permet de contrôler l'ordre de démarrage et d'arrêt des services. Docker Compose lance et arrête toujours les conteneurs dans l'ordre des dépendances. Les dépendances sont déterminées par les options depends_on
, links
, volumes_from
, et network_mode
. L'option depends_on
ne fonctionne qu'avec des services dans le même projet Compose. Si vous souhaitez utiliser depends_on
avec des services dans des fichiers différents, vous pouvez fusionner ces fichiers dans le même projet. Si vous voulez utiliser depends_on
avec des services dans des projets différents, vous pouvez utiliser un script personnalisé wait-for-it
.
Lorsque vous utilisez docker-compose up
, les services sont démarrés dans l'ordre des dépendances. Par exemple, si un service web dépend d'une base de données, la base de données sera lancée avant le service web.
Bien que les deux options expriment des dépendances, elles ont des significations différentes. depends_on
indique l'ordre dans lequel les services doivent démarrer et s'arrêter, tandis que links
gère la communication des conteneurs sur un réseau. depends_on
est un mot-clé Docker Compose, tandis que links
peut être utilisés de manière similaire comme un mot-clé Docker Compose.
Docker Compose permet de définir les services qui composent votre pile d'applications, de spécifier leurs dépendances et de configurer leurs paramètres de manière déclarative. Docker Compose utilise ensuite cette configuration pour créer et gérer les conteneurs comme une seule unité, facilitant ainsi la gestion des dépendances entre services.
Exemple :
version: '3'
services:
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
web:
image: nginx:latest
depends_on:
- db
ports:
- "8080:80"
Dans cet exemple :
- Service de base de données (
db
) :- L'image
postgres:latest
est utilisée pour le service de base de données. - Des variables d'environnement sont définis pour configurer le service de base de données.
- L'image
- Service web (
web
) :- L'image
nginx:latest
est utilisée pour le service web. - L'option
depends_on
est utilisée pour indiquer que le service web dépend du service de base de données (db
). - Les ports sont mappés pour que le port
8080
de la machine hôte soit mappé au port80
du conteneur.
- L'image
Lorsque vous exécutez la commande docker-compose up
avec ce fichier, Docker Compose démarrera d'abord le service de base de données, puis le service web, car le service web dépend du service de base de données comme indiqué par l'option depends_on
.
Gestion des Services avec Compose
Démarrage des Services
Utilisez la commande docker-compose up
pour démarrer tous les services définis dans votre fichier Compose.
docker-compose up
La commande docker-compose up
peut être utilisée avec ou sans l'option -d
, mode détaché, pour contrôler si les services sont lancés en mode détaché ou en mode interactif.
L'option -d
est souvent utilisée dans des situations où les services doivent s'exécuter en continu sans interaction utilisateur, comme dans les environnements de production ou de développement où plusieurs services doivent s'exécuter simultanément , mais sans bloquer le terminal.
Arrêt des Services
Utilisez la commande docker-compose down
pour arrêter tous les services et supprimer les ressources associées.
docker-compose down
Échelle des Services
Vous pouvez changer l'échelle des services en utilisant l'option --scale
.
docker-compose up --scale web=3