Docker Software Unraid

Allumer/Éteindre des containers docker en fonction de leur utilisation

Bonjour, aujourd’hui un article pour économiser de la puissance de calcul et de l’électricité. Si comme moi vous avez un serveur chez-vous pour héberger tous vos services tels que Plex, sites web, Netxcloud et j’en passe, vous vous êtes sûrement déjà demandé si il était possible que vos containers soient éteints quand ils ne sont pas utilisés et qu’il se rallume quand vous les utilisez.

Sachez que c’est possible avec Traefik, si vous ne connaissez pas ce logiciel, il s’agit d’un reverse proxy comme Nginx (un reverse proxy permet aux personnes sur Internet d’avoir accès à vos services présent sur votre serveur.) et qui est très simple d’utilisation avec l’utilisation des labels docker.


Traefik depuis sa version 2.0 intègre des plugin et Adyanth en a créer un qui permet comme vous vous en doutez d’éteindre/allumé vos containers en analysant les raquettes envoyées a votre serveur, pour fonctionner, il va juste falloir installer le plugin dans traefik, puis d’ajouter un nouveau container docker a votre lab et c’est tout 😁

Installation du plugin Traefik

Avant de pouvoir installer le plugin dans Traefik vous devez enregistrer votre instance en lui ajoutant un token dans sa configuration, pour ce faire, il vous suffit d’aller sur le dashboard de Traefik qui se situe sur le pour 8080 du container, si vous ne l’avez pas fait un faut activer le dashboard dans votre fichier de config traefik. La méthode pour le faire est expliquée ici.

Une fois sur le dashboard, il suffit de cliquer en haut a droit et une nouvelle fenêtre apparait avec le bouton Register Current Traefik Instance :

Cliquez-dessus et il vous suffit d’ajouter le token générer dans votre fichier de config Traefik et de le redémarrer celui-ci.

Une fois redémarrer, vous retourner sur la même page et sur le menu de gauche, vous allez sur Plugins et vous rechercher Container Manager for Traefik, vous le sectionner et cliquer sur Install plugin. Dans la pop-in qui est apparue, il vous montre pour chaque type de config traefik (TOML, YAML, CLI ) comment installer le plugin :

Ne suivez pas le numéro 3, pour ce tuto nous allons tout gérer avec des labels docker et non avec le fichier de config Traefik. Une fois la config modifier redémarrer une nouvelle fois le container et vous aurez finis la config avec Traefik.

Ajout du container Manager

Maintenant que le plugin a été ajouté, il ne reste plus qu’à ajouter un nouveau container docker qui est le manager. Son rôle est d’intercepété les raquettes Traefik et d’allumé les containers appelé s’ils ne le sont pas et d’éteindre les containers après x temps.

Voici le docker-compose du manager :

version: "3.7"

  manager:
    image: adyanth/traefik-container-manager-service
    expose: 
      - 10000
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock'
    labels: 
      - traefik.enable=true
      - traefik.http.routers.manager.entrypoints=web
      - traefik.http.routers.manager.rule=HostRegexp(`{host:.+}`)
      - traefik.http.routers.manager.priority=1
      - traefik.http.middlewares.manager.errors.status=404
      - traefik.http.middlewares.manager.errors.service=manager
      - traefik.http.middlewares.manager.errors.query=/
      - traefik.http.routers.manager.middlewares=manager-timeout
      - traefik.http.services.manager.loadbalancer.server.port=80
      - traefik.http.middlewares.manager-timeout.plugin.traefik-container-manager.Name=generic-container-manager
      - traefik.http.middlewares.manager-timeout.plugin.traefik-container-manager.ServiceUrl=http://manager:10000/api

Le docker run pour ceux qui n’utilise pas docker-compose :

docker run --name manager \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 10000:10000 \
-l traefik.enable=true \
-l traefik.http.routers.manager.entrypoints=web \
-l traefik.http.routers.manager.rule=HostRegexp(`{host:.+}`) \
-l traefik.http.routers.manager.priority=1 \
-l traefik.http.middlewares.manager.errors.status=404 \
-l traefik.http.middlewares.manager.errors.service=manager \
-l traefik.http.middlewares.manager.errors.query=/ \
-l traefik.http.routers.manager.middlewares=manager-timeout \
-l traefik.http.services.manager.loadbalancer.server.port=80 \
-l traefik.http.middlewares.manager-timeout.plugin.traefik-container-manager.Name=generic-container-manager \
-l traefik.http.middlewares.manager-timeout.plugin.traefik-container-manager.ServiceUrl=http://manager:10000/api \
adyanth/traefik-container-manager-service

Une fois que vous avez créé et démarrer votre container manager. Il vous suffit d’ajouter les labels de configuration a chacun des containers que vous voulez éteindre et allumé en fonction de leur utilisation.

Ajout d’un container

Pour ce tuto, je vais utiliser l’image containous/whoami qui permet d’afficher sur une page web les informations de la raquette http, voici encore une fois le docker-compore, le docker run pour ce container :

Docker-compose :

version: "3.7"

  manager:
    image: containous/whoami
    expose: 
      - 80
    labels: 
      - traefik.enable=true
      - traefik.http.routers.whoami.entrypoints=entryhttp
      - traefik.http.routers.whoami.rule=Host(`whoami.adyanth.lan`) || PathPrefix(`/whoami`)
      - traefik.http.routers.whoami.middlewares=whoami-timeout
      - traefik.http.services.whoami.loadbalancer.server.port=80
      - traefik.http.middlewares.whoami-timeout.plugin.traefik-container-manager.timeout=5
      - traefik.http.middlewares.whoami-timeout.plugin.traefik-container-manager.name=whoami
      - traefik-container-manager.name=whoami
      - traefik-container-manager.path=/whoami # Prefix matched to the incoming path. To be used if using PathPrefix routing
      - traefik-container-manager.host=whoami # Prefix matched to the incoming hostname. Can provide the subdomain or the complete fqdn. To be used if using Host routing

Le docker run :

docker run --name manager \
-p 80:80 \
-l traefik.enable=true \
-l traefik.http.routers.whoami.entrypoints=entryhttp \
-l traefik.http.routers.whoami.rule=Host(`whoami.adyanth.lan`) || PathPrefix(`/whoami`) \
-l traefik.http.routers.whoami.middlewares=whoami-timeout \
-l traefik.http.services.whoami.loadbalancer.server.port=80 \
-l traefik.http.middlewares.whoami-timeout.plugin.traefik-container-manager.timeout=5 \
-l traefik.http.middlewares.whoami-timeout.plugin.traefik-container-manager.name=whoami \
-l traefik-container-manager.name=whoami \
-l traefik-container-manager.path=/whoami # Prefix matched to the incoming path. To be used if using PathPrefix routing \
-l traefik-container-manager.host=whoami # Prefix matched to the incoming hostname. Can provide the subdomain or the complete fqdn. To be used if using Host routing \
containous/whoami

Alors ici, on va analyser les labels que l’on a ajoutés, car c’est ce que vous devrez ajouter a chacun de vos containers.
Les 3 premiers labels, ce sont les ceux que vous utilisé déjà normalement avec votre config Traefik pour ajouté les noms de domaine a vos containers docker.

traefik.http.routers.whoami.middlewares=whoami-timeout
Est un nouveau middlewares que l’on créer qui va servir pour le timeout un peu plus bas,
traefik.http.services.whoami.loadbalancer.server.port
Rien de nouveau c’est un label classique non propre au plugin qui permet de spécifier le port du container sur lequel traefik va rediriger le trafic il n’est nécessaire de le mettre seulement si vous avez plusieurs ports configurer sur votre container.
traefik.http.middlewares.whoami-timeout.plugin.traefik-container-manager.timeout
C’est le temps en seconde après lequel le container va s’éteindre si aucune activité n’a été détectée.
traefik.http.middlewares.whoami-timeout.plugin.traefik-container-manager.name
C’est le nom de votre container.
traefik-container-manager.name
C’est le nom exact de votre container qui sera utilisé par le manager pour l’éteindre et l’allumé.
traefik-container-manager.path
À utilisé seulement si vous utiliser pathPrefix avec traefik, ça qui veut dire que votre container est accessible via une url comme ceci : http://domainename.com/VotreContainer
traefik-container-manager.host
À utilisé si vous avez une url comme ceci : http://VotreContainer.domaineName.com

Et voilà maintenant, il vous suffit d’aller consulter le container whoami sur l’url que vous lui avez configuré puis d’attendre le temps que vous avez configuré dans le timout et vous verrais que votre container, c’est éteint. 😁

Pour ceux qui comme moi ont des containers qui utilisent AUTH pour pouvoir y accéder, sachez que le middleware de votre AUTH doit impérativement être placé après les labels ci-dessus.

Si cet article vous a aidé n’hésiter pas à le partager et à laisser un retour 😁

About the author

james adams

Add Comment

Click here to post a comment

Résoudre : *
46 ⁄ 23 =