25/12/2022

1. Docker-in-Docker (DinD) & Traefik

Lu 301 fois Licence Creative Commons

Pour réaliser un déploiement dans un cluster Swarm en local, nous allons utiliser Docker-in-Docker et Traefik.

Docker-in-Docker

Docker-in-Docker, souvent abrégé DinD, consiste à faire tourner Docker dans... Docker !
Concrètement, il s'agit d'utiliser des images Docker de docker: on pourra démarrer un conteneur et exécuter des commandes docker à l'intérieur.

« Pourquoi vouloir utiliser du DinD pour créer un cluster local ? »

L'ancienne technique proposée dans les documentations de Docker était d'utiliser Docker Machine pour créer les noeuds du cluster sous la forme de VM sur la machine locale. Mais cet outil n'est plus maintenu.
Afin d'éviter d'éventuels frais durant cette introduction, nous allons les remplacer par de simples conteneurs.

« Et ça peut servir à d'autres choses de faire du DinD ? »

Oui ! Principalement en CI (intégration continue), lorsque vos pipelines s'exécutent dans des conteneurs Docker mais que vous avez besoin de commandes docker.
Attention toutefois à ne pas abuser inutilement de cette technique, qui devrait être évitée autant que possible: voir l'article de Jérôme Petazzoni.

Traefik

Traefik est un reverse proxy orienté cloud. Utilisé dans une stack, il va permettre de déclarer des règles pour accéder à différents services en restant le seul exposé. Il devient alors un point d'entrée unique.

Source: Traefik - Concepts

C'est un reverse proxy très intéressant pour une application utilisant Docker.

« Pourquoi utiliser un reverse proxy pour créer notre cluster Swarm ? »

Puisque Traefik gère lui-même le routing vers les services sans avoir à ouvrir explicitement les ports des conteneurs, cela va nous permettre de répliquer un service utilisant le port 80 (HTTP). Sans ça, nous aurions très vite des erreurs indiquant que le port est déjà utilisé.