22/04/2021

2. Supervisor

Lu 89 fois Licence Creative Commons

Conteneurs multi-processus

Recommandations

Par nature, un conteneur possède un point d'entrée (l'entrypoint) et doit donc avoir une tâche unique. Il est recommandé lorsque c'est possible de séparer les différents processus en plusieurs conteneurs.
Cela peut s'avérer difficile quand:

  • les processus ont besoin d'une coordination entre eux (directement liés)
  • ils partagent des fichiers communs (les volumes ne sont pas mis à jour durant un déploiement)

Solutions

Parmis les solutions recommandées par Docker se trouvent des "wrappers" Bash, comprennant:

  • 1 script par processus à exécuter
  • 1 script "wrapper" qui les exécute tous et surveille leur état

L'autre solution, considérée plus "lourde" est Supervisor.

Supervisor

Supervisor est un outil permettant la gestion de processus dans le cadre d'une application. Il est facilement installable par paquet:

apk add supervisor

Utiliser Supervisor

Supervisor n'a besoin que d'un fichier de configuration supervisord.conf qui peut se trouver à plusieurs emplacements ou spécifié par l'option -c.
Il deviendra le point d'entrée du conteneur:

...

CMD ["supervisord", "-c", "/etc/supervisord.conf"]

Configurer Supervisor

Dans le supervisord.conf, inscrire une section spécifique pour supervisord et un paramètre nodaemon afin qu'il s'exécute en premier plan et non pas en tâche de fond:

[supervisord]
nodaemon=true

Ajouter des programmes

Pour chaque processus que Supervisor doit gérer, ajouter une section avec l'en-tête [program:nom-du-programme]. Comme pour la section [supervisord], on peut y ajouter des paramètres dont au minimum command qui indique la commande du processus à garder actif:

...

[program:apache]
command=apache2ctl -DFOREGROUND