Skip to content

Utiliser Traefik 2 en dev avec Docker

Auteur : Philippe Le Van - @plv@framapiaf.org

Date : 28 mars 2022

Introduction

Quand on est développeur web et qu'on utilise docker, c'est assez magique d'utiliser traefik2.

Traefik est un reverse proxy qui permet en dev de créer une URL automatiquement dès qu'un container est créé.

Ce tuto est séparé en 2 parties :

  • La première donne les étapes de l'installation de l'outil traefik 2 sur votre poste.
  • La 2e partie montre le lancement de 2 services docker (un très simple et un autre un peu plus avancé). On voit ainsi les services apparaître dans la console de traefik2. L'URL créée est fonctionnelle dans un navigateur.

Installation et lancement de traefik 2

On utilise docker-compose pour installer traefik 2.

Créer un répertoire traefik sur votre disque.

Dans ce répertoire, créer le fichier docker-compose.yml suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: "3.7"
services:
  traefik:
    image: "traefik:latest"
    # redémarre traefik automatiquement au démarrage du PC
    restart: unless-stopped
    # partage la couche réseau du host avec le container traefik
    network_mode: host
    command:
      # écoute sur le port 80
      - --entryPoints.web.address=:80
      - --providers.docker=true
      - --providers.docker.exposedbydefault=true
      # crée des URL du type : <nom_du_service>.<nom_du_répertoire>.localhost
      - --providers.docker.defaultRule=Host(`{{ index .Labels "com.docker.compose.service" }}.{{ index .Labels "com.docker.compose.project" }}.localhost`)
      - --api.dashboard=true
      - --api.insecure=true
      - --global.sendAnonymousUsage=false
      - --log.level=DEBUG
      - --log.format=common
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

Lancer traefik :

1
2
# lancer le reverse proxy en tâche de fond (c'est le -d)
docker-compose up -d

Voir si ça marche :

accès à la console traefik : http://localhost:8080

Note : dans le docker-compose.yml, la ligne restart: unless-stopped permet au service d'être relancé au redémarrage de votre PC.

Lancer un service docker et voir l'URL générée

En général on n'a rien à configurer.

cas d'un nginx simple

Créer un répertoire mytest et un fichier docker-compose.yml à l'intérieur

1
2
3
4
version: "3.7"
services:
  app:
    image: nginx

le lancer avec docker-compose up -d

Aller sur http://localhost:8080. Le service a dû apparaître dans la console traefik :

img/traefik_console.png

L'URL créée est du type : http://nom_du_service.nom_du_repertoire.localhost

Vous pouvez aller voir le site nginx qu'on vient de créer sur http://app.mytest.localhost

cas un peu plus complexe

Parfois le cas est un peu plus complexe, et on doit indiquer pour un container donné quelques configurations supplémentaires. Ca peut concerner les cas suivants :

  • le port du container lancé n'est pas exposé par le Dockerfile ou bien plusieurs ports sont exposés et traefik ne choisit pas le bon
  • on veut choisir le nom de domaine créé ou bien on veut plusieurs domaines qui répondent
  • ...

Pour ajouter ces confs, on peut utiliser les labels docker.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
version: '3.7'
services:
  rabbitmq:
    image: rabbitmq:3.7-management
    labels:
      # indiquer l'URL que l'on veut utiliser
      - "traefik.http.routers.my_rabbitmq.rule=Host(`rabbitmq.cliiink.dev.com`)"
      # indiquer le port concerné dans le container
      - "traefik.http.services.my_rabbitmq.loadbalancer.server.port=15672"

  web:
    image: xxx
    labels:
      # ici le site va répondre à plusieurs URL : mysite.dev.com ou myadmin.dev.com
      - "traefik.http.routers.my_web.rule=Host(`mysite.dev.com`) || Host(`myadmin.dev.com`)"

Références

La doc officielle du proxy traefik 2 est ici : https://doc.traefik.io/traefik/

Versions

  • 28 mars 2022 : quelques corrections dans la rédaction.
  • 30 mars 2021 : création