Mon docker-compose.yml par défaut

2 juil. 2022

Depuis que j'ai mon serveur, j'utilise docker. Alors oui tu vas me dire c'est pas le top du container. Rassure toi public, au taf c'est du podman ou du kube, mais j'ai mon serveur sous Debian, et mon playbook ansible post install n'a pas été vraiment refait. Un jour je migrerai mon installation en kube, mais c'est un peu surfait pour l'utilisation que j'en ai. Du coup c'est du full docker, et tout fait avec du docker-compose.

Pour m'organiser un peu j'utilise toujours le même modèle de docker-compose.yml. Je vais l'appeler le fichier docker-compose de référence. Et je l'utilise avec son fichier d'environnement, un fichier .env à la racine du docker-compose

$ ls .
-rw-r--r--  1 sckyzo sckyzo 1174 Feb 26 01:33 .env
-rw-r--r--  1 sckyzo sckyzo 5392 Jun 28 12:39 docker-compose.yml

Je vous partage simplement cet exemple, si cela peut servir à quelqu'un pourquoi pas :)

version: "3"

############
# NETWORKS #
############

networks:
  traefik_proxy:
    external: true
  network:
    driver: bridge

###########
# VOLUMES #
###########

volumes:
  volume-data: {}

############
# SERVICES #
############

services:

# APPLICATION #
#=============#

  apps:
    image:
    container_name:
    hostname:
    restart: unless-stopped
    networks:
      - traefik_proxy
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - volume-data:/data
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:XXXX"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 1m
    labels:
      traefik.enable: true
      traefik.docker.network: traefik_proxy
      traefik.http.routers.apps.entrypoints: websecure
      traefik.http.routers.apps.rule: Host(`XXX.${DOMAINNAME}`)
      traefik.http.routers.apps.service: apps
      traefik.http.services.apps.loadbalancer.server.port: XXXX
      com.centurylinklabs.watchtower.enable: true

Il ne me reste plus qu'a modifier le nom de l'apps, les networks, les volumes, le healthcheck et les labels.

Avec j'ai un fichier .env auquel j'ajoute mes variables plutôt que de les mettre dans mon docker-compose. C'est personnel cette utilisation, mais elle me convient. D'ici quelques temps je migrerai toutes les variables dans du docker-secret ce sera plus simple. Mais en attendant cela fonctionne.

##########################
# DOCKER GENERAL SETTING #
##########################
PUID="1000"
PGID="997"
TZ="Europe/Paris"
USERDIR="/home/user"
DEFAULT_EMAIL="mon@mail.com"
IPADDRESS="XXX.XXX.XXX.XXX"
################################
# DOMAIN NAME AND OTHERS INFOS #
################################
DOMAINNAME="domain.com"