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’image mattermost, la met dans un réseau dédié, se relie au port 80 de la machine hôte, et dépend du service db.
  • db utilise l’image postgres, 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

  • technique/tech_team/pres_compose.1634407487.txt.gz
  • de qduchemi