DOCKER - 6 1 Docker Compose Présentation

Docker Compose combine un outil CLI et un fichier de configuration YAML pour orchestrer plusieurs conteneurs. Alors que Docker gère des conteneurs individuels, les applications réelles rarement s'exécutent seules : elles ont besoin d'une base de données (PostgreSQL, MySQL), d'une cache (Redis), d'un proxy, d'un frontend web, etc. Sans Compose, vous taperiez plusieurs commandes docker run complexes à chaque fois. Avec Compose, tout cela se définit dans un seul fichier YAML.

Docker Compose se divise en deux parties. La première est le fichier YAML lui-même, qui spécifie tous les services, les réseaux, les volumes et les variables d'environnement. Ce fichier est hiérarchique et simple à lire (YAML est presque aussi simple qu'un fichier INI). La deuxième partie est l'outil CLI docker-compose, qui utilise ce fichier pour lancer, arrêter et gérer tous les conteneurs en une seule commande.

Les versions du fichier Compose ont évolué : initialement sans numéro de version (implicite v1), puis des versions 2, 3, et plus. À partir de 2017, la version 3.1+ peut être utilisée directement avec docker swarm en production. Pour un développement local classique, vous utiliserez l'outil CLI docker-compose. Le fichier par défaut s'appelle docker-compose.yml, mais vous pouvez en utiliser d'autres avec l'option -f.

Compose est particulièrement utile pour développement et tests locaux, où vous voulez reproduire facilement votre pile complète sans installer toutes les dépendances sur votre machine.

En résumé

Docker Compose combine deux composants : un fichier de configuration YAML et un outil CLI qui simplifient la gestion de multiples conteneurs. Plutôt que d'exécuter des commandes docker run complexes manuellement, Compose permet de spécifier tous les conteneurs, réseaux, volumes et variables d'environnement dans un seul fichier. Cet outil est conçu pour faciliter le développement local et les tests, bien que depuis la version 1.13 (2017), les fichiers Compose peuvent également être utilisés en production avec Docker Swarm.

Points clés

  • Docker Compose résout le problème courant des services multi-conteneurs qui doivent communiquer ensemble (bases de données, proxys, frontends, backends) sans avoir à mémoriser l'ensemble des options docker run
  • Le fichier docker-compose.yml (au format YAML) centralise la configuration de tous les conteneurs, réseaux, volumes et variables d'environnement de votre application
  • L'outil CLI docker-compose utilise ce fichier YAML pour orchestrer facilement le démarrage et l'arrêt de tous les services avec une seule commande
  • Docker Compose dispose d'un système de versioning ; la version est déclarée en première ligne du fichier et a évolué depuis ses origines en tant que 'fig' vers les versions 1.13+
  • Initialement destiné au développement local, Docker Compose peut depuis 2017 être utilisé directement avec la ligne de commande docker en production via Docker Swarm

Questions fréquentes

Pourquoi avez-vous besoin de Docker Compose plutôt que d'utiliser docker run directement ?

Peu de services logiciels sont autonomes. Les conteneurs devront souvent communiquer avec d'autres conteneurs (bases de données SQL, systèmes clés-valeurs, proxys, frontends, backends, etc.). Docker Compose permet de relier ensemble tous ces éléments et de les gérer avec une seule commande, au lieu de se rappeler toutes les options docker run, les réseaux virtuels et les expositions de ports pour chaque conteneur.

Quels sont les deux composants principaux de Docker Compose ?

Docker Compose se compose d'un fichier YAML (qui spécifie les conteneurs, réseaux, volumes, variables d'environnement et options de configuration) et d'un outil CLI docker-compose (utilisé pour développement et tests locaux afin de simplifier les commandes Docker).

Docker Compose peut-il être utilisé en production ?

Oui. À partir de 2017 (version 1.13+), les fichiers Docker Compose peuvent être utilisés directement avec la ligne de commande docker standard en production avec Docker Swarm, pas seulement en développement local.