Docker : des conteneurs de la cale au pont


Ce mardi 20 Octobre, le YaJUG proposait une soirée sur le sujet hype du moment : Docker. Elle était présenté par Nicolas Muller, qui travaille pour Treeptik sur le développement de la plateforme CloudUnit, un PaaS Java, qui profite justement de Docker dans son architecture. Il est également un des formateur officiel de Docker et donc un intervenant de choix pour présenter cette technologie révolutionnaire.

Docker : Les origines

Nicolas durant une présentation DockerPour débuter, Nicolas nous rassure sur la pérennité de Docker : bien que jeune, la société « Docker Inc » a déjà bénéficié de plusieurs levées de fonds depuis son lancement, le projet possède une excellente communauté de développeurs, complètement indépendante de Docker Inc. et a le soutient de tous les acteurs majeurs de l’industrie.

Pour comprendre l’origine et l’intérêt de Docker, Nicolas nous propose une comparaison avec le monde de la logistique . Par le passé, le transit de biens était complexe. Selon le moyen de transport utilisé mais aussi le type de bien, la manière de packager (emballer) un produit était très différente. Au final le cout de transport pouvait exploser et prendre une part importante (25%) sur le prix de l’importation d’un bien alors qu’il ne représente aujourd’hui plus que quelques pourcents.

La raison ? C’est l’arrivée des conteneurs : des « boites » de taille standardisée, avec les mêmes points d’accroches, adaptés aussi bien aux bateaux, qu’aux avions en passant par les trains ou les camions. En conséquence, la société de transport ne gère que le transfert de biens, et ne doit gérer qu’un seul type de package. De son coté, le client est responsable de placer les produits dans ce conteneur, et de le mettre à disposition du transporteur.

Revenons dans le monde IT : de nos jours, on développe sur Mac ou Linux (si on a de la chance), sur Windows (si on a pas le choix ), et on déploie (souvent) sur des serveurs Linux, qu’ils soient physiques, virtuels ou dans le cloud.
Et les applications sont réalisées en divers langages : Java, PHP, Ruby, Python, etc. On se retrouve donc avec une matrice de déploiement relativement complexe à gérer.

Docker se place en sauveur, et propose une solution qui suit totalement le concept des conteneurs physiques dont il emprunte le nom, en séparant les responsabilités :

  • Le Dev package son application dans un conteneur, avec sa configuration.
  • Les Ops n’ont plus qu’a gérer des conteneurs, tous identiques quelle que soit la technologie ou l’application.

Interactions Docker

Au final, si ça marche sur le poste du développeur, cela marchera à coup sûr lors de la mise en production !

Docker Inside

Assemblée présente lors d'une présentation Docker au YaJUG Nicolas, avec un mix de slides et de démonstrations, nous a présenté le fonctionnement et les concepts inhérents à Docker : image, container, volume… Il a ensuite évoqué l’installation de Docker, facilité par Docker Toolbox ou Docker-Machine.
Il nous a ensuite fait découvrir plusieurs outils de l’écosystème : Docker-Compose, qui permet de gérer une application comprenant plusieurs containers, et Swarm, pour gérer un cluster de Docker Engine et la répartition des containers.

Fort de son expérience personnelle, il nous a fait profiter d’un retour d’expérience sur les bonnes pratiques. Parmi celle-ci, éviter de déployer des images non officielle du Docker Hub. Pourquoi ? Car le risque d’importer dans l’entreprise des conteneurs vérolés est bien présent. Bien évidement, c’est à relativiser, il existe des contributeurs de confiance, mais c’est une idée générale. Il a par ailleurs dit énormément de bien des images Tutum. Pour l’anecdotes, le lendemain de la présentation, Tutum annonçait son acquisition par… Docker Inc !

Un second conseil concernait la manière de structurer les conteneurs. Une bonne approche est d’avoir une image contenant les binaires de l’application, qui sera placée dans un premier conteneur. Ce dernier sera accompagné par deux conteneurs spéciaux qui n’auront qu’une utilité : la persistance. Le premier pour la configuration de l’application, le second pour les données.

Cette approche est conseillée pour gérer le cycle de mise à jour en toute sécurité.

CloudUnit

La dernière partie de la conférence était une présentation de CloudUnit, la solution de PaaS développée par Treektik.

Logo ClouUnit

Contrairement à d’autres PaaS qui sont génériques et multi-langages, CloudUnit ne supporte que le runtime Java (Scala, Grovvy et autres sont donc également supporté). En contrepartie, celui-ci envisage de proposer à termes des fonctionnalités plus poussées mais spécifiques à Java (Monitoring JXM par exemple). La création d’une application dans CloudUnit implique la création d’un certains nombres de conteneurs :

  • Un conteneur Git, qui pourra servir à faire du Push/Deploy de l’application.
  • Un conteneur Maven, qui sera utilisé lors d’un commit pour générer le
    package.
  • Un conteneur Tomcat ou JBoss, lié à deux conteneurs “volume” pour la
    persistance de la configuration et les données.
  • Un conteneur ElasticSearch utilisé pour indexer les logs, et effectuer des 
recherches dans ceux-ci.

Présentation Docker, lors du YaJUGMais tout cela est interne, caché aux utilisateurs par une interface d’administration graphique en Angular plutôt sympa. Une interface en ligne de commande est également disponible et permet de scripter toutes les commandes. Il existe une symétrie totale entre la WebUI et le CLI. Le CLI prenant en entrée un fichier texte, on peut donc automatiser via Jenkins la création des environnements (tomcat + mysql par exemple) .

Et pour ne rien gâcher, CloudUnit est disponible sous licence GPL et une image Vagrant permet de tester cela très facilement. Vous savez ce qu’il vous reste à faire !

(Pour les plus curieux, voici les slides de la présentation.)

Vous aimerez aussi...