Docker Compose

Docker Compose

21 October 2023

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 que 8080. Cette numérotation est libre, vous pouvez utiliser 1234 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 :

  1. 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.
  2. 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 port 80 du conteneur.

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