Utiliser Ansible au lieu d'un Dockerfile pour créer vos images Docker

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.

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 :

2 J'aimes

J’ai édité mon post parce qu’il existe un module Ansible Container qui fait ça proprement !

il y a aussi https://dockersl.im/ ou buildkit. je tiens aussi à dire que ansible-container et archived (donc certainement plus maintenu) ansible-container. Red Hat travail aussi sur des truc dans le genre podman et builda article

2 J'aimes

Pour les basheux j’ai trouvé ça aussi : https://buildpacks.io/docs/buildpack-author-guide/create-buildpack/build-app/

Merci pour les liens ! J’ai corrigé le post initial pour remplacer Ansible Container par Ansible Blender, son successeur.