Voici un article en anglais qui propose d’utiliser Ansible pour créer des images Docker plus légères et maintenables qu’avec un Dockerfile.
Pourquoi Ansible plutôt qu’un Dockerfile ?
Dans un Dockerfile, chaque ligne d’exécution crée un “layer” intermédiaire. Malgré le fait que ces layers semblent ne contenir que le delta entre le résultat de l’instruction et le layer précédent, l’auteur affirme que réduire le nombre d’instruction dans le Dockerfile allège l’image finale.
https://medium.com/@jessgreb01/digging-into-docker-layers-c22f948ed612
Second avantage, utiliser une recette ou un rôle Ansible versionné est plus pratique et lisible qu’un Dockerfile. Apprendre Ansible n’est pas du temps perdu et s’ajoute à votre CV, c’est plus valorisant que de dépenser du temps sur le pseudo langage du Dockerfile.
Un seul Dockerfile pour les gouverner tous
L’astuce consiste à installer Ansible via un Dockerfile générique et à lancer la recette/rôle de l’image dans ce même Dockerfile. Celui-ci contient peu d’instruction donc de layers. A la fin du build, on supprime Ansible et les fichiers temporaire de l’image. Ni vu ni connu.
On peut appeler ça un hack, mais si au final cela permet d’intégrer la création de ses images Docker proprement dans ses recettes Ansible, alors cela vaut le coup.
Finis le hack, place à Ansible Bender
L’idée a fait son chemin visiblement et il existe maintenant un module Ansible Bender pour builder des images Docker :
Pour bien comprendre le principe :