Faire fonctionner plusieurs applications sur une seule machine n'a jamais été aussi simple! Dans ce tutoriel, je vais vous montrer comment exécuter 3 applications sur un serveur en utilisant Docker et Traefik (promis après j'arrête avec Traefik !)

Par ailleurs la release 1.7 "maroilles" de Traefik est sortie ;)

1_DbTmBNj7OA_NmlW7ZJ45cw

Cas d'utilisation

Supposons que vous ayez peu d’argent et que vous ne pouvez louer qu’un seul serveur, vous pouvez exécuter votre site Web, votre blog et votre application SaaS sur le même ordinateur (ce que nous ferons dans ce didacticiel). Ou vous pouvez exécuter une API (back-end) et un SPA (front-end). Vous pouvez même exécuter deux sites Web différents (example1.com et example2.com) si vous le souhaitez.

Besoin de :

  • Docker
  • Docker-compose
  • Traefik

Configuration du projet

Les trois applications que nous allons exécuter sont un site Web (site statique), un blog et une application SaaS (dasboard-ish). Par souci de démonstration, je viens de télécharger des modèles HTML en ligne. J'ai donc un modèle de page de destination, un modèle de blog et un modèle de tableau de bord. Ils seront tous servis avec Nginx 😉.

Capture-d-e-cran-2018-09-20-a--08.14.05

Capture-d-e-cran-2018-09-20-a--17.51.30

Chaque application est placée dans son propre dossier, avec son propre fichier Dockerfile. Les fichiers Docker sont identiques, car nous ne faisons essentiellement que servir des fichiers statiques dans toutes les applications.

# Dockerfile
FROM nginx:alpine
COPY . /usr/share/nginx/html

Le fichier de composition de docker rassemble tout sous un même toit. Voici à quoi cela ressemble:

# docker-compose.yml
version: "3"
services:
  traefik:
    image: traefik
    command: --web --docker --docker.domain=docker.localhost --logLevel=DEBUG
    ports:
      - "80:80"
      - "8080:8080"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /dev/null:/traefik.toml
  app:
    build: ./app
    volumes:
      - ./app:/usr/share/nginx/html
    labels:
      - "traefik.backend=app-be"
      - "traefik.frontend.rule=Host:app.localhost"
  blog:
    build: ./blog
    volumes:
      - ./blog:/usr/share/nginx/html
    labels:
      - "traefik.backend=blog-be"
      - "traefik.frontend.rule=Host:blog.localhost"
  website:
    build: ./website
    volumes:
      - ./website:/usr/share/nginx/html
    labels:
      - "traefik.backend=website-be"
      - "traefik.frontend.rule=Host:localhost"

Comme on peut le voir, traefik lui-même est exécuté dans un conteneur. Le domaine est défini sur localhost et les ports 80, 8080 et 443 sont publiés. Le paramètre web (--web) sous le paramètre de commande, indique à traefik d'exécuter son tableau de bord API qui sera exposé sur le port 8080.

Traefik peut être configuré à l'aide d'un fichier traefik.toml. Il peut également sélectionner des configurations à partir de labels de service. En tant que tel, nous avons spécifié les configurations traefik.backend et traefik.frontend.rule à l'aide de labels. traefik.backend spécifie le service pour gérer les requêtes de traefik.frontend.rule. Donc, si nous allons à app.localhost, nous recevrons un contenu du service d'application. Même chose avec localhost et site web, blog.localhost et blog.

Essayez-le: clonez Jack, exécutez docker-composez et visitez localhost, app.localhost et blog.localhost.

Scaling et load balancing

Traefik Load équilibre automatiquement plusieurs instances d'un service donné. Vous pouvez utiliser le scale flag dans docker compose pour exécuter plusieurs instances de vos conteneurs.

Plus d'infos ici :