Article présentant ma méthode d’administration pour des services ayant plusieurs configurations possible.
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
:
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
:
version: '3.8'
services:
uptime-kuma:
ports:
- 127.0.0.1:3001:3001
Fichier docker-compose.override.yml
:
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 ! 😉