**Ceci est une ancienne révision du document !**
C'est quoi Docker Compose ?
On l’a vu, Docker est assez simple d’utilisation : un docker build
, un docker run
, et notre conteneur est lancé.
Cependant, sur une activité d’hébergement de services, il y a parfois plusieurs dizaines de services à lancer.
Or, la configuration des volumes, des ports, des réseaux, etc, se fait au démarrage de chaque conteneur et n’est pas référencé dans l’image.
Ceci veut dire qu’à chaque démarrage de conteneur, il faudrait écrire des commandes à rallonge du type :
- snippet.bash
docker run -v <volume>:<destination> -p <port source>:<port conteneur> --network <nom du réseau> <image>
C’est inimaginable.
C’est pourquoi Docker Compose a vu le jour : c’est un système d’orchestration de conteneurs.
Compose se base sur des fichiers écrits au format YAML
, qui décrivent comment lancer les différents conteneurs.
Pour donner une intuition, voici un fichier docker-compose.yml
fictif qui vise à faciliter l’administration d’un service et de sa base de données :
- snippet.yaml
version: '3.7' volumes: db: networks: app: services: app: image: mattermost_app depends_on: mattermost_db ports: - 80:8080 networks: - app environment: ADMIN_PASSWORD: admin db: image: postgres networks: - app environment: POSTGRES_PASSWORD: password volumes: - db:/var/lib/postgresql
Sans comprendre tous les éléments de syntaxe, on comprend que :
app
utilise l’imagemattermost
, la met dans un réseau dédié, se relie au port 80 de la machine hôte, et dépend du servicedb
.db
utilise l’imagepostgres
, la met dans le même réseau que Mattermost, indique qu’il faut conserver le contenu du dossier/var/lib/postgresql
, etc.
Note:
Ce fichier peut être distribué à n’importe qui, qui pourra alors lancer le service et sa base de données avec une simple commande qui se charge de configurer et de démarrer tous les services :
- snippet.bash
docker-compose up