Bonjour à tous ! 👋

Nous allons aujourd'hui voir comment utiliser Docker et Traefik afin d'avoir des noms de domaines personnalisés pour nos applications en développement. Pour se faire, nous allons utiliser traefik.

Traefik est un reverse proxy / load balancer. Il dispose de plein de fonctionnalités cool comme l'auto discovery, une configuration simplifiée pour des metrics ou encore une gestion facilité des certificats SSL ( let's encrypt, ACME etc..) ce qui en fait un allié de choix pour pas mal de services d'orchestration de container ( Kubernetes, Mesos ... ).

Nous allons aujourd'hui voir comment on peut faire fonctionner tout ça ensemble.

Installation et configuration de dnsmasq

Dnsmasq est un soft qui permet de fournir des services DNS. Nous allons le configurer pour qu'il redirige toutes les requêtes HTTP de la forme *.test vers le localhost.

Installation sur mac ( via brew ) :

brew install dnsmasq

Ajout de la configuration de redirection :

sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/test'sudo echo 'address=/.test/127.0.0.1' > $(brew --prefix)/etc/dnsmasq.conf

Redémarrer le service :

sudo launchctl unload -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plistsudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

Installation et configuration de traefik

Voici deux fichiers de configuration nécessaire pour faire fonctionner traefik. J'utilise ici un fichier docker-compose mais il est tout à fait possible de lancer ce container en ligne de commande. Le deuxième fichier inclut la configuration minimale pour faire fonctionner traefik.

Comme vous pouvez le voir, les configurations de routing se fait grace aux labels. Vous retrouverez la liste des directives sur la documentations de traefik ( https://docs.traefik.io/configuration/backends/docker/#on-containers )

docker-compose-traefik.yml

version: "3"services:  proxy:    image: traefik    networks:      - traefik    ports:      - "80:80"      - "8080:8080"      - "443:443"    volumes:      - "/var/run/docker.sock:/var/run/docker.sock"      - "./traefik.toml:/traefik.toml"    restart: unless-stopped    labels:      - "traefik.frontend.rule=Host:traefik.test"      - "traefik.port=8080"      - "traefik.backend=traefik"      - "traefik.frontend.entryPoints=http"networks:  traefik:    external:      name: traefik

traefik.toml

defaultEntryPoints = ["http"][entryPoints]  [entryPoints.http]  address = ":80"[web]address = ":8080"[web.auth.basic]  users = ["admin:$apr1$o1HmXW0i$wWgVewL1kLu9gaqmMDh6u/"][docker]endpoint = "unix:///var/run/docker.sock"domain = "test"watch = trueexposedbydefault = true

Vous pouvez dès a présent lancer la commande docker-compose -f docker-compose-traefik.yml up pour démarrer le container. Une fois l'opération terminée, rendez-vous sur votre navigateur à l'adresse suivante : http://traefik.test.

Dans le fichier de configuration traefik.toml un auth basic est configuré ( login: admin, mdp: admin ).

Vous devriez voir après ça le superbe dashboard de traefik ! 🎉🎊

Utilisation de traefik

Vous allez pouvoir maintenant tester traefik. Pour cela, nous allons utiliser l'image tutum/hello-world.

docker run --network=traefik --label="traefik.enable=true" --label="traefik.frontend.rule=Host:hello-world.test" --label="traefik.backend=hello-world" --label="traefik.port:26000" --label="traefik.frontend.entryPoints=http" -p 26000:80 tutum/hello-world

A présent, à l'aide de votre navigateur, rendez-vous sur sur http://hello-world.test/

Et voilà ! 👏

What's next ?

Pour le prochain article, nous verrons comment générer un certificat SSL afin d'utiliser le HTTPS pour votre environnement de développement.

Resources et liens utiles