Donc depuis hier soir j'ai progressé et j'ai donc maintenant deux solutions qui fonctionnent :)
Solution 1 - celle que j'avais déjà
La solution "avoir un Traefik en face de chaque conteneur final" fonctionne.
Pour ce faire je dois juste jouer avec le paramètre --providers.docker.constraints de Traefik pour que les configurations dynamiques soient interceptées par la bonne instance de Traefik.
Dans les grandes lignes :
Traefik expose un port : exemple 6000
l'application finale écoute sur son port interne (non exposé) : 5000
Jupyter écoute sur son port interne (non exposé) : 8888
Traefik redirige :
les requêtes de /jupyter-notebook vers le port 8888
les autres requêtes vers le port 5000
Les avantages :
un seul fichier docker-compose.yml à gérer par application : on est plutôt aligné avec la philosophie
c'est relativement simple et efficace à mettre en œuvre : aucune bidouille de DNS, peu de fichiers de configuration à manipuler, etc
peu de changement du côté de l'application :
seule les commandes docker exécutées sont à remplacer
nous pouvons requêter sur 127.0.0.1: comme aujourd'hui
s'il devait y avoir un autre besoin un peu "tordu" ce serait assez flexible (vu que le Traefik est décié à une application en backend) pour gérer d'autres backends
Les inconvénients :
ça fait démarrer un Traefik par conteneur (donc potentiellement une consommation de ressources inutiles bien qu'au repos ça doit être faible)
Solution 2 - un Traefik commun + un FQDN qui résout 127.0.0.1
Ici l'idée est d'avoir un domain (app-container.local) qui, quelque soit l'entrée, réponds toujours 127.0.0.1 :
exemple1.app-container.local -> 127.0.0.1
exemple2.app-container.local -> 127.0.0.1
etc
Pour ce faire j'ai utilisé dnsmasq :
j'ai désactivé systemd-resolved
j'ai supprimé le lien symbolique /etc/resolv.conf qui pointait sur ../run/systemd/resolve/stub-resolv.conf
j'ai installé + configuré dnsmasq :
address=/app-container.local/127.0.0.1
J'ai créé un fichier docker-compose dédié à Traefik + j'ai démarré une instance de Traefik.
Ensuite j'ai démarré mon application avec docker-compose :
en settant une variable COMPOSE_PROJECT_NAME qui me sert à :
forcer un peu le destin du nom du conteneur
avoir un nom "unique" (à condition que la valeur passée soit unique) dans Traefik :
# Un petit état des lieux
Posté par kortex . En réponse au message Docker + Traefik: besoin d'avis extérieurs pour un besoin un peu spécifique. Évalué à 3.
Donc depuis hier soir j'ai progressé et j'ai donc maintenant deux solutions qui fonctionnent :)
Solution 1 - celle que j'avais déjà
La solution "avoir un Traefik en face de chaque conteneur final" fonctionne.
Pour ce faire je dois juste jouer avec le paramètre --providers.docker.constraints de Traefik pour que les configurations dynamiques soient interceptées par la bonne instance de Traefik.
Dans les grandes lignes :
Traefik redirige :
Les avantages :
peu de changement du côté de l'application :
s'il devait y avoir un autre besoin un peu "tordu" ce serait assez flexible (vu que le Traefik est décié à une application en backend) pour gérer d'autres backends
Les inconvénients :
Solution 2 - un Traefik commun + un FQDN qui résout 127.0.0.1
Ici l'idée est d'avoir un domain (app-container.local) qui, quelque soit l'entrée, réponds toujours 127.0.0.1 :
Pour ce faire j'ai utilisé dnsmasq :
J'ai créé un fichier docker-compose dédié à Traefik + j'ai démarré une instance de Traefik.
Ensuite j'ai démarré mon application avec docker-compose :
en settant une variable COMPOSE_PROJECT_NAME qui me sert à :
Les avantages :
Les inconvénients :
nous ajoutons 2 dépendances majeurs à notre écosystème logiciel :
peut-être que côté développeur c'est plus lourd / compliqué que ce que j'imagine