Supervisor est un service pour lancer automatiquement et surveiller d'autres services. Il est donc très utile pour les containers ne disposant pas d'un boot complet et donc de scripts de démarrage des services.

Nous allons donc faire une image qui utiliser supervisor comme point d'entrée du container.

Pour commencer, créons un container avec le Dockerfile suivant :

FROM ubuntu:latest
RUN apt-get update && apt-get install -y supervisor
RUN apt-get install -y apache2
RUN mkdir -p /var/log/supervisor
COPY apache2.conf /etc/supervisor/conf.d/apache2.conf
COPY entry-point.sh /entry-point.sh
RUN chmod -R 755 /entry-point.sh
CMD ["/entry-point.sh"]

Dans le fichier apache2.conf, nous avons mis la configuration de lancement d'apache suivante :

[program:apache2]
command=/usr/sbin/apache2ctl -DFOREGROUND
autostart=true
autorestart=true
startretries=3

Enfin le script entry-point.sh lance simplement supervisor en mode no-deamon :

#!/bin/sh

/usr/bin/supervisord -n

Compilons l'image :

docker build -t pepiniere .

Créons notre container :

docker create --name testdrive pepiniere

Puis nous pouvons constater que le container testdrive (qui a ici l'ip 172.17.0.3) fait bien tourner apache !!

curl -I http://172.17.0.3

Voila, nous avons un container docker testdrive qui fait tourner un apache2 !

L'entry-point et supervisor étant fonctionnels, il reste maintenant à faire des container de bases, pour industrialiser les déploiements, par exemple :

  • une image wordpress
  • une image apache+php+mysql
  • une image elastiksearch+kibana+logstash
  • une image ubuntu de base

Bien sur chacune de ses images aura un prérequis : le fonctionnement d'ansible et la mise en place des clefs ssh initiales nécessaires ! Ansible pourra se charger de la mise en place et révocation des clefs ssh des utilisateurs additionnels.