Infrastructure – Actualités

Utiliser des scripts d’entrypoint Docker flexible

22 mars 2016

Lorsqu’un container Docker démarre, il appelle son script d’entrypoint. La plupart du temps, il s’agit du chemin vers le service qui doit tourner dans ce container. Il est cependant très courant de lancer des scripts de wrapping afin de configurer le container avant de démarrer le service :

Bien souvent, cette tâche est effectuée à l’aide d’un script d’entrypoint monolithique contenant toutes les options de paramétrisation nécessaires au container. Cette approache a plusieurs inconvénients:

  • les images héritées doivent faire une copie du script pour ajouter des paramètres
  • le script est complexe à maintenir
  • le script est écrit dans un seul langage (généralement en script shell)

Chez Camptocamp, en travaillant sur la dockerisation de Puppet sous Rancher, nous avons fait le choix d’une approche plus flexible des scripts d’entrypoint en utilisant un script standard et statique faisant appel à la commande  run-parts sur un répertoire :

Cela procure plusieurs avantages :

  • le script d’entrypoint est standard dans tous nos containers
  • les scripts d’entrypoint sont des plugins qui peuvent être écrits dans d’importe quel langage
  • les images héritées peuvent ajouter de nouveaux scripts d’entrypoint dans le répertoire /docker-entrypoint.d/

Nos Dockerfiles contiennent généralement des appels à ONBUILD COPY pour faciliter le déploiement de scripts d’entrypoint additionnels. Nous pouvons ensuite régler l’entrypoint pour appeler le script générique avec le chemin vers le service à démarrer, par exemple :

Plusieurs exemples de scripts d’entrypoint peuvent être trouvés dans nos projets Docker.