Installation de docker avec un reverse-proxy Traefik sans aucune ligne de commande. Configuration rapide de Docker Desktop sous Windows 10 avec une stack Portainer, Traefik et Mailhog. C’est un setup de développement web minimal.

Installer docker Desktop : Documentation et téléchargement direct.

Installation Docker Desktop sous Windows

Commencer par installer le plugin Portainer, cela vous permettra de travailler proprement avec des docker-compose plutôt que de simple container. Il est évidemment possible de faire en ligne de commande, mais l’interface est plus convivial pour du développement.

Ajout de l'extension portainer sur Docker Desktop

Ouvrir Portainer :

ouvrir portainer

En configuration pour développement local utiliser Get Started :

démarrage rapide de portainer sous Docker Desktop

Nous pouvons expendre le menu pour se repérer plus facilement la première fois :

sélection de l’environnent local sous Portainer plus besoin des menu Docker Desktop

On sélectionne notre environnent local pour créer un réseau afin qu’il soit permanent pour être utilisé entre notre reverse proxy Traefik et nos apps. Je le nomme proxy-net :

création d'un réseau définitif sous Docker Desktop avec Portainer
donner un nom et un driver au réseau à créer

Notre réseau est présent avec un range IP attribué : 172.24.0.0/16. Si cela pose problème avec un réseau déjà existant dans l’entreprise, vous pouvez en attribuer un autre

liste des réseau Docker sous Portainer

On crée notre stack Traefik et un stack Mailhog comme exemple d’application web derrière Traefik. Cela peut être via un copier coller, mais aussi via un repository. Pratique pour mettre le docker-compose.yml dans notre projet directement

Création d'une stack sous Portainer
Création de la stack / docker-compose Traefik sous Portainer

Stack de traefik sous Docker Desktop

Voici la stack ou docker-compose pour Traefik :

version: "3.7"

services:
  proxy:
    image: "traefik:v2.8"
    container_name: proxy
    command:
      - --entrypoints.web.address=:80
      - --providers.docker
      - --api.insecure
    ports:
      - "80:80"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    networks:
      - proxy-net

    labels:
      - traefik.enable=true
      - traefik.http.services.mgt.loadbalancer.server.port=8080
      - traefik.http.routers.mgt.entrypoints=web
      - "traefik.http.routers.mgt.rule=Host(`mgt.localhost`)"

networks:
  proxy-net:
    external: true

On test via l’url http://mgt.localhost si on a bien l’interface traefik :

Interface de visualisation Traefik

Pas besoin d’ajouter quoi que ce soit dans son fichier hosts pour un sous domaine de localhost.

On y voit déjà notre première application qui passe par le reverse proxy qui n’est autre que l’interface de management de traefik. Dans un environnent accessible depuis l’extérieur nous devrions sécuriser l’accès via un login/password. Mais ici aucune nécessité en localhost sur notre pc si notre fw est bien configuré.

Pour le sécuriser, générer un mot de passe pour Apache via un container :

docker run --rm --name apache httpd:alpine htpasswd -nb user password

Les labels :

- "traefik.http.middlewares.auth-mgt.basicauth.users=MONUSER$xxxx$$STiVjGO4$ATj6up2mVZR7Jqk4YzD8h."
- traefik.http.routers.mgt.middlewares=auth-mgt

Stack de Mailhog sous Docker Desktop

Les points importants sont de déclarer ET d’utiliser le réseau proxy-net commun avec le reverse proxy pour que celui-ci puisse communiquer avec notre application en backend.
Quand un container de notre application expose plusieurs ports, bien définir à Traefik lequel utiliser via loadbalancer.server.port car il ne sera pas choisir à notre place… S’il n’y a qu’un seul port d’exposer, le label est facultatif.

version: "3.7"
networks:
  proxy-net:
    external: true

services:
  mailhog:
    image: mailhog/mailhog
    container_name: mailhog
    ports:
      - 25:25
    networks:
      - proxy-net
    user: root
    labels:
      - traefik.enable=true
      - traefik.http.services.mailhog.loadbalancer.server.port=8025
      - traefik.http.routers.mailhog.entrypoints=web
      - "traefik.http.routers.mailhog.rule=Host(`mailhog.localhost`)"

Une fois le stack lancé, on le voit sur la page de management de traefik et il est accessible via l’url http://mailhog.localhost :

interface Traefik avec l'ajout du service de l'application mailhog
interface mailhog accessible depuis une url simple

Summary
Minimal Docker Desktop stack de développement sous windows
Article Name
Minimal Docker Desktop stack de développement sous windows
Description
Configuration rapide de Docker Desktop sous Windows 10 avec une stack Portainer traefik et mailhog comme setup de développement web minimal
Author