Sommaire

Jongler avec les Docker Compose

Introduction

Dans mon précédant article, On voit que j’utilise deux versions du fichier docker-compose.yml.
En réalité, j’ai utilisé trois fichiers dans le but de pouvoir revenir facilement en arrière si besoin.

Dans cet article, je vais donc vous expliquer ma méthode afin d’avoir de multiples compositions. Dans mon cas, une d’administration et une de production.

Concept

Par défaut, Docker Compose lit deux fichiers, le docker-compose.yml ainsi qu’un docker-compose.override.yml qui lui est optionnel. On peut vérifier la configuration lancée via un docker compose config.
Avec l’option -f, on peut préciser des fichiers supplémentaires que l’on veut utiliser.

J’ai donc utiliser ce système en précisant la partie commune de ma composition dans le fichier docker-compose.yml, ce qui s’ajoute pour la production dans docker-compose.override.yml et ce qui sert pour l’administration dans un fichier que j’ai nommé docker-compose.admin.yml.

De ce fait, la commande docker compose up -d va charger le fichier normal et celui optionnel. S’il y a des informations en double dans ces fichiers, le fichier optionnel prendra le dessus.
Si je veux charger celle d’administration, je dois plutôt faire docker compose -f docker-compose.yml -f docker-compose.admin.yml up -d.

Exemple

Voyons mon cas d’application pour Uptime Kuma.

Fichier docker-compose.yml :

1
2
3
4
5
6
7
8
version: '3.8'
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: always
    volumes:
      - /var/lib/uptime-kuma:/app/data

Fichier docker-compose.admin.yml :

1
2
3
4
5
version: '3.8'
services:
  uptime-kuma:
    ports:
      - 127.0.0.1:3001:3001

Fichier docker-compose.override.yml :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
version: '3.8'
services:
  uptime-kuma:
    labels:
        - "traefik.enable=true"
        - "traefik.http.routers.uptime-kuma.rule=Host(`uptimekuma.example.com`)"
        - "traefik.http.routers.uptime-kuma.tls=true"
        - "traefik.http.routers.uptime-kuma.tls.certresolver=mycertresolver"
        - "traefik.http.services.uptime-kuma.loadBalancer.server.port=3001"
    networks:
      - kuma-net

networks:
  kuma-net:
    external: true
    name: traefik-net

Lors du premier lancement, je fais donc un docker compose -f docker-compose.yml -f docker-compose.admin.yml up -d afin d’utiliser le mappage de port définis dans le fichier admin.
Une fois le paramétrage pour le reverse proxy effectué, je détruis ma composition avec un docker compose down.

Ainsi, en faisant un simple docker compose up -d, je charge la définition de mon service ainsi que celle qui est nécessaire pour mon reverse proxy.

Conclusion

J’ai donc trouvé un moyen d’étendre mes définitions Docker Compose.
Mon cas d’application le plus important est de pouvoir créer un fichier de base le plus générique possible et ajouté les choses spécifiques à mon serveur.

J’ai voulu faire ainsi dans le but secret que le rôle Ansible que je crée (pour installé tout cela) soit utilisable sur un autre serveur sans avoir plusieurs versions de configuration pour chaque serveur.
On verra cela dans un autre article ! 😉