Présentation de Docker Compose

Problèmes du CLI Docker

La philosophie d'utilisation de Docker veut que l'on favorise la segmentation des différentes applications d'un système dans différents conteneurs, qui communiquent entre-eux, plutôt que la mise en place d'un conteneur qui ferait tourner tout les composants d'une application.

Au fur et à mesure des précédents exercices, de nombreuses options possibles sont venues s'ajouter à la commande docker run et on se rend vite compte que la manipulation de nombreux conteneurs de cette manière peut devenir fastidieuse pour plusieurs raisons :

  • tout les conteneurs sont créés manuellement, il faut donc se souvenir de la totalité des options si l'on souhaite recréer le conteneur (par exemple si l'image a été mise à jour)

  • lorsqu'il y a des dépendances entre les conteneurs (par exemple une application web qui nécessite une base de données) il est nécessaire de connaître le bon ordre de lancement de chaque conteneurs. Lorsque l'on parle d'application d'une dizaine de conteneurs cela devient compliqué relativement complexe.

Docker Compose

Docker Compose est un outil qui permet de résoudre cette problématique.

La base de Docker Compose est le fichier (généralement appelé docker-compose.yml) qui permet de décrire l'ensemble des conteneurs que l'on souhaite faire tourner sur le serveur. C'est un fichier écrit en YAML, une format de représentation de données.

À titre d'exemple, un fichier Docker Compose ressemble à ceci (il n'est pas nécessaire de le comprendre bien entendu) :

1
version: '3'
2
services:
3
  traefik:
4
    image: traefik:latest
5
    container_name: traefik
6
    ports:
7
      - "80:80"
8
      - "443:443"
9
    volumes:
10
      - /var/run/docker.sock:/var/run/docker.sock
11
      - /DOCKER/volumes/traefik/traefik.toml:/traefik.toml
12
      - /DOCKER/volumes/traefik/certs:/certs
13
  registry:
14
    image: registry:2
15
    container_name: registry
16
    environment:
17
      REGISTRY_AUTH: htpasswd
18
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
19
    volumes:
20
      - /DOCKER/volumes/registry/data:/var/lib/registry
21
      - /DOCKER/volumes/registry/auth:/auth
22
    labels:
23
      - "traefik.frontend.rule=Host:registry.picasoft.net"
24
      - "traefik.port=5000"
25
      - "traefik.enable=true"

Les fichiers Docker Compose permettent ainsi de décrire un groupe de conteneurs, qui pourront être manipulés (démarrés, arrêtés, etc.) en même temps.