Docker : définition, Docker Compose, Docker Hub, Docker Swarm...
Le point sur la techno de container logiciel Docker, ses avantages et ses limites. Tour d'horizon aussi des briques de l'offre commercialisée par la société californienne Docker.
C'est à l'occasion de son passage au sein du célèbre incubateur américain Y Combinator en 2010 que le franco-américain Solomon Hykes conceptualise la notion de container logiciel. Trois mois plus tard lors du Demo Day rituel, son équipe parvient à séduire plusieurs investisseurs. Dans la foulée, un premier tour de table de 800 000 dollars est bouclé, et la société Docker est officiellement lancée. Depuis, la start-up a levé un total de 272,9 millions de dollars, et sa valorisation se hisse à 1,3 milliard de dollars.
Qu'est-ce que Docker ?
Docker permet d'embarquer une application dans un ou plusieurs containers logiciels qui pourra s'exécuter sur n'importe quel serveur machine, qu'il soit physique ou virtuel. Docker fonctionne sous Linux comme Windows Server. C'est une technologie qui a pour but de faciliter les déploiements d'application, et la gestion du dimensionnement de l'infrastructure sous-jacente. Elle est proposée par la société Docker, en partie en open source (sous licence Apache 2.0).
Quelle différence avec la virtualisation ? La virtualisation permet, via un hyperviseur, de simuler une ou plusieurs machines physiques, et les exécuter sous forme de machines virtuelles (VM) sur un serveur ou un terminal. Ces VM intègrent elles-mêmes un OS sur lequel des applications sont exécutées. Ce n'est pas le cas du container logiciel. Le container fait en effet directement appel à l'OS de sa machine hôte pour réaliser ses appels système et exécuter ses applications, d'où son extrême légèreté. Dans le cas de Linux, les containers Docker exploitent un composant du noyau Linux baptisé LXC (ou Linux Container). Au format Windows Server, ils s'adossent à une brique équivalente, appelée Windows Server Container. Le moteur Docker normalise ces briques par le biais d'API dans l'optique d'exécuter les applications dans des containers standards, qui sont ensuite portables d'un serveur à l'autre.
Comment installer Docker sur Windows ou Mac
Docker propose une version pour poste de travail. Elle fait l'objet d'une déclinaison open source , baptisée le Docker Desktop, dessinée pour manipuler des containers et tester des architectures containérisées. Docker Desktop fait l'objet d'une version Enterprise, payante. Elle permet d'automatiser le déploiement d'environnements de développement Docker sur des dizaines de milliers de postes, puis d'assurer la gestion de leur maintenance et leur cohérence au regard des applications en production (lire l'article : Docker industrialise les développements Docker sur le poste de travail).
La vélocité des containers Docker se rapprocherait de celle
des serveurs machines nus
Installer Docker sur une station de travail est simple. Après avoir téléchargé Docker Desktop pour Windows ou Docker Desktop pour Mac, vous n'avez qu'à exécuter un fichier d'installation et le tour est jouer. Vous pouvez ensuite commencer à saisir des lignes de commandes pour lancer vos images de containers en vous connectant au Docker Hub (voir le tutoriel sur le site de Docker). Docker Desktop est livré avec tous les composants nécessaires à la configuration d'une architecture applicative containérisés : le moteur d'exécution Docker Engine, l'interface en ligne de commandes Docker CLI client, l'atelier Docker Compose, Docker Machine pour provisionner des clusters, sans oublier Kitematic. Ce dernier outil sera très utile aux débutants car il propose une interface graphique pour piloter une architecture Docker.
Quels sont les avantages de Docker ?
Comme le container n'embarque pas d'OS à la différence de la machine virtuelle, il est plus léger que cette dernière. Il n'a pas besoin d'activer un second système d'exploitation pour exécuter ses applications. Cela se traduit par un lancement beaucoup plus rapide. Pour parvenir au même résultat, les environnements de virtualisation ont besoin d'un pool de VM inactives provisionnées à l'avance. Avec Docker, nul besoin de pool, puisqu'un container est bootable en quelques secondes. IBM a publié en 2014 un comparatif de performance entre Docker et KVM. Sa conclusion est sans appel : Docker égale ou excède les performances de l'hyperviseur - et ce dans tous les cas testés. Pour Big Blue, la vélocité des containers Docker se rapproche même de celle des serveurs machines nus. En éliminant la couche de virtualisation, consommatrice en ressources, Docker permettrait de réduire la consommation de RAM de 4 à 30 fois. Publiée en août 2017 par le département de recherche informatique de l'université de Lund en Suède, une autre étude compare cette fois la performance des containers à celle des machines virtuelles VMware. Elle aboutit également à une conclusion en faveur de Docker.
Mais, la promesse de Docker va plus loin. Les containers Docker, et les applications qu'ils embarquent, sont portables de cloud en cloud. Seule condition : que les clouds en présence soient optimisés pour les accueillir. C'est le cas des principaux d'entre eux : Amazon Web Services, Microsoft Azure, Google Cloud Platform, OVH... Conclusion : il devient possible d'imaginer réaliser du mirroring d'application et de l'équilibrage de charge entre clouds, et pourquoi pas des plans de reprise ou continuité d'activité entre clouds... voire même décider de la reprise d'un projet sur un cloud tiers.
Le Graal des architectures
de microservices
De même grâce à leur légèreté, les containers Docker sont également déployables à la volée d'un environnement de développement ou de test à un environnement de production. Du fait de la disparition de l'OS intermédiaire des VM, les développeurs bénéficient aussi sur leur station de travail d'une pile applicative plus proche de celle de l'environnement de production, ce qui engendre mécaniquement moins de mauvaises surprises lors des déploiements. Docker pourra permettre dans le même temps de concevoir une architecture de test plus agile, chaque container de test pouvant intégrer une brique de l'application (base de données, langages, composants...). Pour tester une nouvelle version d'une brique, il suffit d'inter changer le container correspondant.
Côté déploiement, Docker présente un intérêt car il permet de limiter les mises à jour au delta du container nécessitant de l'être. Enfin en termes d'urbanisation applicative, Docker en isolant les composants fonctionnels d'une application dans des containers permet de les maintenir indépendamment tous en leur allouant à chacun les ressources machines voulues. C'est le concept d'architecture de microservices.
Quid des limites de Docker ?
Initialement limité à Linux, Docker a depuis été porté sur Windows Server. Il n'en reste pas moins que les containers créés sur Linux, ne pourront être portables "nativement" sur le serveur de Microsoft, et réciproquement. Il s'agit là de la limite majeure de Docker, et sa principale différence avec la virtualisation traditionnelle. Une machine virtuelle embarquant Linux peut, elle, tourner sur un serveur Windows, et inversement.
Quels sont les principaux services et technos Docker ?
1. Docker Hub
Docker met à la disposition des développeurs un service en ligne, baptisé le Docker Hub, conçu pour faciliter l'échange d'applications containérisées. Hébergeant plus de 100 000 images de containers, cet espace est aussi intégré à GitHub. Il recouvre de très nombreux domaines (analytics, bases de données, frameworks, monitoring, outils de DevOps, sécurité, stockage, systèmes d'exploitation....). Qualifiées d'officielles, certaines images sont directement maintenues par Docker. D'autres sont proposées par des contributeurs. Testées et éprouvées par Docker, une cinquantaine sont certifiées par ce dernier. La société de San Francisco commercialise par ailleurs une version du Docker Hub installable localement (le Docker Hub Enterprise). Enfin, Docker a lancé une boutique en ligne d'applications. Objectif : offrir aux éditeurs un canal commercial pour distribuer leurs applications sous forme de containers.
2. Docker Compose
Docker Compose est un outil développé par Docker pour créer les architectures logicielles containérisées. Dans cette logique, chaque brique de l'application (code, base de données, serveur web...) sera hébergée par un container. Cet outil repose sur le langage YAML (pour Yet Another Markup Language) pour décrire l'architecture. Une fois celle-ci codée dans un fichier YAML, l'ensemble des services applicatifs seront générés via une commande unique.
3. Docker Swarm et Kubernetes
Pour faciliter le management des architectures complexes, Docker à construit une plateforme de Containers-as-a-Service. Baptisée Docker Enterprise, elle a été cédé à Mirantis en novembre 2019. Elle comprend les principaux outils nécessaires pour gérer le déploiement, le pilotage, la sécurité et le monitoring de tels environnements. Côté gestion de cluster, Docker Entreprise intègre à la fois Swarm, son moteur d'orchestration maison, mais aussi Kubernetes, qui s'est imposé comme un standard dans la management de cluster. Désormais, la société de San Francisco entent proposer une plateforme capable de gérer de manière fédérée des applications qu'elles soient basées sur les grands services cloud de Kurbenetes managé ou sur des clouds Swarm.
Dans sa dernière version (Docker Enterprise 3.0), la plateforme Docker introduit une distribution Kubernetes certifiée (baptisée Docker Kubernetes Service) mais aussi des outils d'automatisation du cycle de vie des déploiements. Enfin, Docker Enterprise s'accompagne de Docker Application, un nouveau format visant à faciliter la création d'applications dockérisées et distribuées.
Quelle part de Docker est open source ?
Docker a publié une dizaine de composants sous licence Apache. Ils recouvrent les principales fonctionnalités nécessaires au pilotage d'une architecture containérisée : gestion du réseau, du stockage, de la sécurité... Parmi eux figure containerd : une brique centrale de la technologie Docker puisqu'elle gère l'exécution du container. Considérant la criticité de cette brique, Docker en a reversé les droits à une organisation indépendante (la Cloud Native Computing Foundation).
En avril 2017, l'éditeur est allé un peu plus loin dans la démarche en lançant Moby : un framework open source dessiné pour construire des systèmes de container. Il comprend 80 composants open source : ceux de Docker (containerd, LinuxKit, swarmkit...) mais aussi d'autres projets (Redis, Nginx...). Moby se veut être un projet participatif, à travers lequel tous les acteurs de la communauté Docker construisant des solutions à base de containers peuvent partager des briques.
L'unikernel est-ce la même chose qu'un container ?
Non. L'unikernel se situe à mi-chemin entre la virtualisation serveur classique et le container. Alors que la virtualisation traditionnelle reprend l'intégralité de l'OS serveur dans la machine virtuelle, l'unikernel n'embarque, lui, dans la VM que les librairies du système nécessaires à l'exécution de l'application qu'elle contient. Le noyau de l'OS restant lui en dehors de la machine. A la différence du container Docker, l'unikernel reprend donc une partie de l'OS dans la VM.
Parmi ses principaux avantages comparé au container, l'unikernel peut permettre d'optimiser la couche système embarquée dans la VM en fonction des spécificités de l'application à exécuter. En janvier 2016, Docker a acquis la société Unikernel Systems, une start-up spécialisée dans l'unikernel, dans l'optique de proposer une alternative à ses containers.