Une problématique classique sur docker est le lancement des services au démarrage du container, qui nécessite l'écriture d'un script complet et avancé ....

Aujourd'hui j'ai réfléchi à une solution simple basée sur Ansible. Sur un container créé à partir d'une ubuntu/latest, j'ai exécuté (dans un docker exec -t -i <container> bash) les commandes suivantes :

apt update
apt install openssh-server python
cd /root
mkdir .ssh
cat > .ssh/authorized_keys

et j'ai copié la clef ssh du compte administrateur. Je démarre ensuite openssh comme suit :

docker exec <container> -t -i "bash" /etc/init.d/ssh start

Puis à l'aide du playbook suivant et du fichier hosts contenant l'ip du container :


- hosts: all

 tasks:
 - name: ensure apache is running (and enable it at boot)
   service: name=apache2 state=started enabled=yes


Nous pouvons démarrer apache2 avec un simple

ansible-playbook ensure.yml -i hosts

Et voila !

Nous pouvons donc écrire un script de démarrage de hote qui lancerait ssh pour chaque container, et exécuterai le playbook dans la foulée.

Ce n'est qu'une idée de base artisanale. Il serait préférable que le serveur ssh soit lancé automatiquement, puis que le playbook soit lancé régulièrement pour s'assurer que le reste des services sont up ....

Pour des container de type apache + mysql, c'est une solution fonctionnelle et suffisante, mais bien sur inférieure à la véritable écriture d'un script de démarrage.

Elle à cependant l'avantage de faire en sorte que si le service interne au container meurt sans entrainer un restart du container, alors ansible pourras essayer de le relancer !

Du pour et du contre, donc ...

Cependant, la solution que tous les packagers de container utilisent c'est supervisor ! Un prochain post à venir donc ;)