ContainerNursery - Mettez vos conteneurs Docker en veille et réveillez-les sur demande
Voilà un outil qui va faire plaisir aux possesseurs de homelabs qui surveillent leur consommation de ressources comme le lait sur le feu !
Car si vous êtes comme moi, vous avez probablement une ribambelle de conteneurs qui tournent H24 sur votre bécane. Et je vous raconte pas tous ceux qui tournent alors que je m'en sers qu'une fois par an... breeeef...
Car même si un processus en "idle" ne consomme pas forcément grand-chose, c'est quand même un peu moisi de laisser tourner des services pour rien, non ? (oui, j'ai une âme d'écologiste de la ressource système).
C'est là qu'intervient ContainerNursery , un petit utilitaire écrit en Node.js qui se comporte comme un reverse proxy intelligent qui va tout simplement stopper vos instances Docker quand aucune requête HTTP ou connexion WebSocket n'est détectée pendant un certain temps, et les redémarrer d'un coup de baguette magique dès qu'une nouvelle requête pointe le bout de son nez.
Pour ceux qui se demandent s'il est possible de mettre en pause un conteneur proprement, sachez que ContainerNursery va plus loin que le simple docker pause. Il arrête carrément le conteneur pour libérer la RAM et éviter les réveils CPU inutiles. Et il ne fait pas ça à la sauvage puisqu'il vérifie par exemple s'il n'y a pas de connexions WebSocket actives proxifiées avant de tout couper.
Hé oui, quand on n'est pas un connard, on évite de déconnecter un utilisateur en plein milieu de sa session.
D'ailleurs, pour ne pas faire fuir vos visiteurs pendant que le conteneur sort de sa sieste, l'outil affiche une page de chargement sympa qui se rafraîchit toute seule dès que votre serveur est prêt à envoyer la sauce.
Côté bidouille, on reste sur du classique. Tout se règle dans un fichier config.yml.
En plus des domaines et des noms de conteneurs, vous devrez spécifier le proxyHost et le proxyPort pour que l'aiguillage se fasse correctement. Vous définissez ensuite le timeout au bout duquel tout le monde doit aller au dodo. Vous pouvez même lui dire de ne pas couper si l'utilisation moyenne du CPU dépasse un certain seuil (exprimé en pourcentage de 0 à 100 × le nombre de cœurs), histoire de ne pas flinguer un calcul lourd en cours.
Pour le lancer, rien de plus simple :
docker run \
--name='ContainerNursery' \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /mnt/ContainerNursery/config:/usr/src/app/config \
ghcr.io/itsecholot/containernursery:latest
Petit rappel de sécurité quand même... Essayez de placer un autre reverse proxy (genre Nginx ou Traefik) devant ContainerNursery pour gérer le HTTPS proprement, car ce dernier écoute en HTTP par défaut.
Quant au gain sur votre facture d'électricité, il dépendra évidemment de la charge réelle évitée, mais sur une grosse machine avec des dizaines de services, ça finit par compter.
Bref, c'est le genre de petit outil qui ne paie pas de mine mais qui permet de gagner pas mal de temps et surtout d'optimiser ses ressources sans se prendre la tête. On garde bien sûr la vieille carabine de pépé sous le lit pour les urgences, mais pour le reste, on laisse ContainerNursery gérer la crèche.
Un grand merci à Mickaël pour l'info !
