docker-logo3

Depuis plusieurs mois, Docker fait régulièrement la une de l’actualité.

L’outil est apparu il y a environ deux ans et s’est rapidement propagé auprès des développeurs, pour s’imposer aujourd’hui comme un produit phare de la mouvance DevOps.

 

Pierre-Alexandre Bardina et Yann Cézard, experts Docker chez Objectif Libre, vous en disent plus sur la façon dont les développeurs analysent l’émergence de Docker.

 

 

Docker : de quoi parle-t-on ?

Commençons par rappeler ce qu’est Docker en quelques mots : Docker est un outil Open Source, développé en Go par l’entreprise Docker Inc. et qui facilite la gestion de conteneurs sous GNU/Linux.

 

Pour que l’explication soit complète, précisons également la notion de conteneur : un conteneur est une méthode de virtualisation légère, qui isole les applications et les rend indépendantes les unes des autres sur les plans des binaires, des bibliothèques et des environnements. Pourquoi légère ? Contrairement à une solution de virtualisation « classique » à base d’hyperviseurs, les conteneurs sont de simples processus exécutés sur leur hôte, hôte dont ils partagent le noyau.

 

L’idée principale est d’empaqueter une application et ses dépendances dans un conteneur virtuel qui pourra être exécuté sur n’importe quel serveur GNU/Linux – et prochainement sur Windows (qui disposera de ses propres images).

 

 

Docker : un outil pensé par et pour des développeurs

Les avantages des conteneurs logiciels pour faciliter le travail des développeurs sont nombreux et ont permis une adoption fulgurante de la technologie par cette communauté. En particulier, la portabilité et l’outillage améliorent la productivité des développeurs.

La portabilité des conteneurs est le principal attrait de la technologie : il est possible d’avoir le même environnement en local et en production. Finies les erreurs de déploiement dues à une mauvaise version de bibliothèque ou à une autre dépendance : tester ses applications sur différents OS devient un jeu d’enfant.

 

Côté outillage, Docker peut être considéré comme le GIT des conteneurs. Il propose un outil de gestion des images, versionnées, sur lequel les actions proposées reprendront la même terminologie que celle de GIT : une image se récupère en faisant un « pull », un conteneur se transforme en image en effectuant un « commit », l’image est étiquetée avec un « tag » et sera publiée à l’aide d’un « push ».

 

Dans la pratique, grâce à la gestion des versions d’images de Docker, il est facile de déployer une nouvelle image en production et il est tout aussi facile de revenir, si nécessaire, sur une image antérieure. Il est également possible d’utiliser les images officielles présentes sur le Hub de Docker telles que proposées, et d’ajouter ainsi des services à son application. Ces images sont pré-configurées de manière à permettre leur utilisation immédiate, tout en autorisant un paramétrage plus précis si besoin : l’ajout d’une base PostgreSQL ou d’un serveur Redis à sa stack se fait ainsi en seulement quelques minutes.

 

Chaque développeur peut ainsi très rapidement mettre en place un environnement de développement identique à celui de son équipe : grâce aux conteneurs, les développeurs deviennent beaucoup plus productifs.

 

Docker et l’intégration continue

Bien qu’antérieure à la technologie des conteneurs, l’intégration continue est indissociable de Docker et doit être prise en compte pour bien en comprendre l’intérêt. La mise en place de nouveaux environnements devient si évidente avec Docker que les applications d’intégration continue l’embarquent désormais dans leurs processus, à l’instar de Jenkins ou de la nouvelle application Drone entièrement construite autour de Docker.

 

Jenkins utilisera Docker pour lancer ses slaves, avec des images types pour effectuer les builds ou les tests. Et Docker pourra à son tour utiliser Jenkins afin de créer automatiquement des images qu’il mettra à disposition dans un registre (un dépôt d’images Docker) en cas de succès.

 

gears-1192912-1600x1200

 

L’approche micro-services : une nouvelle manière de développer

L’émergence de Docker va modifier les habitudes de développement car l’outil incite à la construction d’applications moins monolithiques. De plus en plus, les architectures sont construites à partir de micro-services : les applications, plus complexes, sont composées de services plus petits répondant chacun à un besoin précis et qui communiquent entre eux via leurs APIs.

 

L’intérêt de cette architecture est de pouvoir piloter, superviser et faire évoluer chaque micro-service indépendamment du reste de l’application. Si un des composants de l’application nécessite un peu plus de capacité de traitement, il suffit d’augmenter le nombre d’instances de ce composant.

L’utilisation de Docker dans un tel contexte pourrait se schématiser par des constructions de type « Lego », les briques étant des micros services (hébergés chacun dans son propre conteneur) pour lesquels les ressources allouées vont être gérées suivant les besoins.

 

Ce point est particulièrement intéressant pour créer des applications « élastiques », à capacité variable et adaptative. Sur une architecture virtuelle traditionnelle, la création de l’élasticité via l’isolation des services dans des machines virtuelles serait bien sûr possible, mais consommerait plus de ressources et serait donc plus coûteuse.

 

Ainsi, Docker apporte des changements dans les méthodes de développement, en privilégiant les micro-services et l’intégration continue, et les applications gagnent en qualité. Des équipes réduites peuvent, à moindre effort, maintenir des architectures de très grande complexité, proches de celles de géants comme Twitter.

lego-bricks-1479577-1280x960

 

Docker : une (r)évolution du métier de développeur

Si les méthodes de développement des applications changent, les méthodes de mise en production évoluent aussi et les métiers du développement et de l’administration système s’en trouvent modifiés.

Encore récemment, le développeur avait pour tâche essentielle de coder l’application, ou une partie de celle-ci, et avait peu de liberté d’intervention sur les applications en production, les serveurs de production restant la chasse gardée des administrateurs systèmes. Les développeurs devaient se lancer dans de longues négociations s’ils voulaient « toucher à la prod’ »… sans garantie de succès.

 

Docker facilite le travail du développeur pour concevoir une architecture ou mettre en œuvre un environnement d’exécution complet. La palette des outils à la disposition des développeurs s’élargit et ouvre la porte à une nouvelle répartition des responsabilités au sein des équipes. Les administrateurs systèmes vont être amenés à se spécialiser dans le déploiement, la supervision et le maintien en conditions opérationnelles de l’architecture et en particulier des composants hébergeant les conteneurs.

 

Est-ce la fin des accrochages entre développeurs et administrateurs systèmes pour des problèmes de versions de Python différentes en développement et en production ? Docker offre la possibilité d’une nouvelle forme de collaboration et d’un rapprochement des deux métiers… si toutefois les entreprises arrivent à accompagner ces changements organisationnels importants.

 

Perspectives : adoption massive, nouveaux acteurs et standardisation

Docker, malgré son jeune âge, est un outil déjà largement adopté par les développeurs et par les grands acteurs de l’hébergement en ligne : de nouveaux services spécifiques ont été créés chez Google Cloud Engine, AWS ou encore sur OpenStack pour l’hébergement des conteneurs.

 

Côté clients, de belles « user stories » avec de grands logos comme ebay, Uber, Spotify, BBC News montrent que l’outil est suffisamment mature pour une industrialisation des déploiements. Son adoption plus massive par les entreprises est sans doute une simple question de temps : le temps que les métiers et méthodes de travail s’adaptent et que les solutions clé-en-main d’industrialisation gagnent la maturité, à l’instar des projets Swarm ou Kubernetes qui visent à orchestrer des clusters de machines exécutant des conteneurs.

 

Mais l’outil n’est pas intéressant que pour les grandes entreprises. Les micro-entreprises et les développeurs freelance qui l’utilisent peuvent libérer le temps auparavant alloué à la configuration de serveurs ou à la mise à jour du code en production. Ce temps peut maintenant être intelligemment ré-investi dans de la gestion du projet, davantage de développement, ou de la veille technologique.

 

S’intéresser à Docker est incontournable. Des concurrents sérieux de Docker émergent, comme Rkt de CoreOs, confirmant que la technologie des conteneurs est bien en plein essor et pleine de perspectives.
Afin d’éviter l’écueil des exclusivités technologiques, le projet « Open Container Initiative » a vu le jour et compte standardiser le domaine. Les conteneurs de Docker deviendraient compatibles avec ceux de la concurrence, les outils pour les exploiter seraient eux-aussi modulaires et inter-changeables.

 

La révolution des conteneurs est en marche !

 

Article paru dans Programmez! n°190 le 30 octobre 2015

Co-écrit par Pierre-Alexande Bardina et Yann Cézard, experts Docker chez Objectif Libre