De Dockerfile à Ansible Containers

De Dockerfile à Ansible Containers

By BEREZOWSKI César

25 oct. 2017

Cette présentation était une introduction au format Dockerfile et à l’outil Ansible Containers puis une comparaison des deux produits. Elle fut réalisée par Tomas Tomecek, membre de l’équipe containerization de Red Hat.

Le Dockerfile

Il s’agit d’un fichier sans spécifications formelles qui permet de décrire les étapes de créations d’une image Docker en utilisant une séquence d’instructions.

Le fichier commence par une instruction FROM qui définit l’image de base à utiliser pour créer votre image, puis on prépare le container et l’application qui va y tourner et enfin l’instruction CMD clôt le fichier et définit l’instruction shell à exécuter pour lancer l’application.

Les bonnes pratiques encouragent à définir le plus tard possible dans le fichier les arguments et instructions susceptibles de changer, comme par exemple un dossier de configuration à monter dans le container, afin que Docker ne reconstruise pas l’intégralité de l’image à chaque fois qu’il y a une modification, mais seulement les étapes modifiées.

Écosystème

Le Docker Hub est un registre publique listant des images accessibles par tous, cependant 60% de ces images ne sont pas maintenues ou plus à jour, il faut donc faire attention à l’image sur laquelle on se base et par exemple aller regarder si le dépôt Github lié est toujours actif.

Docker Compose permet d’orchestrer des services ou applications lancées dans différents containers afin qu’elles interagissent à l’aide d’un fichier de configuration écrit en YAML.

Avantages et inconvénients

Étant le fichier de spécification par défaut pour créer des images Docker, le dockerfile est très largement utilisé et possède une bonne documentation, et le Docker Hub est une plateforme très bien fournie. Il s’agit également d’une technologie relativement facile à prendre en main et soutenue par une équipe active.

Cependant le Dockerfile n’est pas un format facile à parser car il ne bénéficie pas de spécifications formelles, et les instructions peuvent rapidement devenir très complexes (dockerfile de Go en est un très bon exemple) bien qu’il ne s’agisse finalement que d’un script shell avec des métadonnées. Également, les images sur lesquelles on se base du Docker Hub doivent provenir de sources sûres pour assurer la pérennité de votre travail et la technologie Dockerfile est spécifique aux containers Docker et aux podes Kubernetes.

Ansible

Ansible est une plateforme d’automatisation Open Source acquise en 2015 par Red Hat qui la package dans ses releases depuis. Ansible tourne sur un serveur Linux sans service actif et permet de gérer des serveurs à l’aide de fichiers d’instruction écrits en YAML et parsé avec Python. Le projet profite également d’un écosystème riche de centaines de modules à utiliser.

Glossaire

Les termes techniques de l’environnement Ansible :

  • Task : une commande à exécuter
  • Playbook : une suite de tâches
  • Play : l’exécution d’un Playbook
  • Role : un moyen d’exporter des playbooks et de les réutiliser (comme un module Node.js)

Containers

L’outil Ansible Container permet de décrire et créer des images Docker en utilisant des Playbooks Ansible en se débarrassant du format Dockerfile. C’est un projet lancé il y a un an et demi sur Github avec un petit peu moins de 1000 commits à l’écriture de ces lignes et une petite équipe de développeurs principaux.

L’outil s’installe avec pip :

sudo pip install ansible-container

et propose cinq actions de base :

  • ansible-container init pour initialiser un projet container
  • ansible-container installs pour télécharger et installer les roles Ansible indiqués en dépendances
  • ansible-container build pour créer l’image Docker à partir de votre playbook
  • ansible-container run pour exécuter le container
  • ansible-container deploy pour pousser l’image dans un registre et générer les playbooks permettant de déployer le projet

Vous trouverez dans un projet container :

  • un fichier container.yml, équivalent du docker-compose.yml, qui définit les services de votre application, les roles à exécuter pour ce service et les paramètres d’intercommunication (ports à exposer, …)
  • des rôles Ansible contenant :

    • les playbooks de préparation des containers
    • les métadonnées indiquant l’image de base du container, les variables d’environnement et la commande à lancer au démarrage du container

Et si vous avez un projet Docker existant avec un Docker compose ou un simple Dockerfile, vous pouvez l’importer et le convertir avec la commande ansible-container import . L’outil va parser la configuration existante et générer un projet Ansible correspondant avec les rôles et le container.yml.

Vous trouverez sur Github une démo très complète de l’outil.

Avantages et inconvénients

L’utilisation de l’outil container d’ Ansible permet d’inclure dans une architecture Ansible existante les containers que vous utilIsez, tout en bénéficiant d’un énorme écosystème de rôles très fourni.

Cependant, le format descriptif des tâches Ansible peut rendre très complexe la mise en place d’instructions simples d’un Dockerfile. Il faut également prendre en compte la courbe d’apprentissage de la technologie.

Conclusion

Avec un module container proche de la release 1.0, Ansible offre une réelle alternative au format Dockerfile et sa complexité, et retire un outil dont on peut se passer si vous avez déjà un setup Ansible pour gérer votre architecture.

Cependant, si vous n’utilisez pas encore Ansible et que vous avez des connaissances Dockerfile ou des projets existants, il est probablement plus intéressant de les garder tel quel plutôt que de migrer. Vous devriez utiliser l’outil qui vous convient le mieux.

Canada - Morocco - France

International locations

10 rue de la Kasbah
2393 Rabbat
Canada

Nous sommes une équipe passionnées par l'Open Source, le Big Data et les technologies associées telles que le Cloud, le Data Engineering, la Data Science le DevOps…

Nous fournissons à nos clients un savoir faire reconnu sur la manière d'utiliser les technologies pour convertir leurs cas d'usage en projets exploités en production, sur la façon de réduire les coûts et d'accélérer les livraisons de nouvelles fonctionnalités.

Si vous appréciez la qualité de nos publications, nous vous invitons à nous contacter en vue de coopérer ensemble.