La technologie des conteneurs connaît depuis 2 ans un rythme d’adoption exponentiel poussé par le succès de Docker. Les levées de fonds spectaculaires enchaînées par la société Docker illustrent le potentiel attendu de cette technologie, elle fait partie des fameuses « Licornes » valorisées à 1 milliard de dollars pour un chiffre d’affaires encore modeste (de l’ordre de 10 millions de dollars en 2015).
Son rythme d’adoption serait l’un des plus rapide de toutes les technologies récentes, elle est déjà largement répandue chez les acteurs leaders des nouvelles technologies.
Docker est annoncée comme le prochain bouleversement de l’IT comme VMware a pu l’être il y a 15 ans avec la virtualisation d’applications.
Mais au delà des « early adopters » qu’en est-il pour la grande majorité des entreprises ou acteurs publics ?
En rendant plus simple et plus rapide le déploiement et le monitoring d’applications, l’hébergement sous conteneur Docker devrait accompagner et favoriser le développement de l’hébergement Cloud et permettre à chaque acteur d’apporter plus rapidement à ses clients des fonctionnalités et services nouveaux.
Spécialisées dans l’hébergement d’applications web critique et très orientées DevOps, nos équipes possède une expertise Docker complète. L’objectif de cet article est de vous présenter le fonctionnement et les principaux avantages de cette technologie.
La technologie du conteneur et Docker
La technologie du conteneur n’est pas nouvelle, elle date des années 2000, notamment avec les Linux Containers ou « LCX ». Docker est une surcouche qui rend le développement et le déploiement des conteneurs beaucoup plus simple tout en les standardisant. La première version de Docker 1.0 est très récente mais son adoption par les plus grands comptes de l’informatique en fait déjà un outil de référence.
Qu’est-ce qu’un conteneur ?
Un conteneur est une enveloppe virtuelle qui permet de packager une application avec tous les éléments dont elle a besoin pour fonctionner : fichiers source, runtime, librairies, outils et fichiers. Ils sont packagés en un ensemble cohérent et prêt à être déployé sur un serveur et son OS.
Contrairement à la virtualisation de serveurs et à une machine virtuelle, le conteneur n’intègre pas d’OS, il s’appuie directement sur le système d’exploitation du serveur sur lequel il est déployé.
Cette technologie a été développée sur une base Linux, mais devrait être rapidement disponible sous Windows Server.
Qu’est-ce que Docker ?
Docker est un projet Open Source proposant une surcouche qui automatise et simplifie le déploiement d’applications dans des conteneurs virtuels.
A l’origine basée sur le format de Conteneurs Linux LXC, la société Docker a élargi le projet en proposant notamment une API qui permet d’exécuter des conteurs standards et portables d’un serveur Linux à l’autre.
Conteneur et virtualisation
La virtualisation de serveurs permet, au travers d’une couche logicielle appelée Hyperviseur, de créer sur un serveur physique des machines virtuelles qui utiliseront les ressources physiques du serveur avec leur propre OS. L’Hyperviseur assure l’allocation des ressources physiques entre les VMs, et chacune d’elle se comporte comme un serveur autonome intégrant son propre OS sur lequel les applications seront déployées et exécutées.
Contrairement à la virtualisation, un conteneur n’embarque pas d’OS, il s’appuie directement sur celui du serveur sur lequel il est déployé. Un conteneur est donc beaucoup plus léger qu’une VM qui intégrera un OS. Une VM se mesure en Go quand le volume d’un conteneur se chiffrera en Mo.
Le schéma ci-dessous illustre les différences entre conteneurs et virtualisation :
Isolation
Dans le cas de la virtualisation de serveurs (Vmware, Xen) l’isolation entre VMs est intrinsèque à la technologie, et l’on partage le serveur physique (CPU/RAM/Disque) en serveurs virtuels (VMs), ce sont des éléments très bas niveau que l’on virtualise.
Dans le cas des conteneurs, l’isolation se fait au niveau du système d’exploitation, nous mettons à disposition des éléments de plus haut niveau (pile réseau, dossier, zone mémoire, process namespace, etc.). Ce niveau d’isolation est aussi efficace du point de vue d’une application, car toutes les ressources sont utilisées à travers des éléments virtualisés.
Le fonctionnement de Docker
Cgroups
Sous Linux il existe deux systèmes de gestion des conteneurs : OpenVz et cgroups (LXC). OpenVz est développé par une entreprise et n’est pas directement inclus dans les distributions Linux. Le mode cgroups/LXC est lié maintenant à Linux et incorporé dans le noyau, il est proposé dans toutes les distributions récentes. Même si openVz possède des fonctionnalités non présentes dans les cgroups (déplacement d’un conteneur à chaud entre deux serveurs), c’est sur ce LXC qu’est basé Docker.
Grâce aux cgroups, Docker possède la couche de virtualisation de serveurs nécessaire au fonctionnement des environnements virtuels, il va apporter la couche de gestion, d’outils et des méthodes qui vont faciliter et même révolutionner l’usage de cette technologie de virtualisation.
Docker Registry
Une des premières briques de Docker est son registre (registry). C’est une bibliothèque d’images d’applications qui peut être publique, privée ou locale. Il met à disposition les images, s’occupe du versionning de celles-ci, permet de très facilement récupérer un conteneur en HTTP.
Docker demon client :
Il crée les environnements LXC sur le serveur, et s’occupe de paramétrer et d’instancier le conteneur. On le pilote via une API RestFULL, qui offre une grande souplesse dans la gestion des opérations (via un client local, un serveur gestion de tous les conteneurs, etc.). C’est ce pilotage qui décuple la puissance des conteneurs.
Dockerfile
C’est un fichier texte qui décrit la création d’un conteneur. Il permet d’avoir des modèles de conteneur très personnalisables.
Les avantages de la solution de conteneurs/Docker
Nous voyons plusieurs avantages à l’utilisation de Docker dans les domaines du Web mais aussi de l’IT. Les services IT proposent de plus en plus de services orientés web, les conteneurs pourraient être un élément clef pour accélérer leurs transitions vers le cloud.
Légèreté des conteneurs
Contrairement à un serveur virtuel sous Linux, le conteneur n’a besoin que de quelques centaines Mo de disques. L’empreinte mémoire est aussi réduite, car nous n’avons que de la mémoire utilisée pour l’application (pas de couche OS). Il est ainsi plus rapide à démarrer mais aussi à déplacer d’une machine à une autre.
Rapidité et facilité de déploiement des applications
Après la récupération d’un template, qui se fait en une commande, il suffit d’une autre commande pour exécuter le conteneur, celui-ci démarre en quelques secondes. On peut ajouter des paramètres lors du démarrage qui seront transmis au conteneur. On va par exemple spécifier l’accès à la base de données ou d’autres paramètres d’automatisation.
L’idéal reste la mise en place d’une gestion de configuration, grâce à elle, vos conteneurs seront autonomes. On gère ses conteneurs comme on gère un package logiciel, cette facilité permet au développeur de pouvoir provisionner les environnements qui sont déployés en production par exemple sans connaissance particulière d’infrastructures ou d’administration système.
Portabilité et multi cloud
Il y a peu de formats d’enveloppes virtuelles qui soient nativement multi-cloud. Il est toujours compliqué de récupérer sur sa ferme VMware son POC fait sur AWS, ou encore migrer sa machine virtuelle Openstack sur une Ressource Group Azure…
Avec Docker, vous pouvez, en quelques secondes, déployer votre test fait en local sur votre poste, en production sur la très grande majorité des Clouds (pour ne pas dire tous).
Orientation micro-services
Les nouvelles applications métiers, sites Web et nouvelles applications IT se composent maintenant de micro-services, à l’inverse d’une application contenue dans un seul serveur et une seule application.
On va trouver des serveurs HTTP, des serveurs de cache, des répartiteurs de charge, des bases de données clés/valeurs, moteur d’API en nodejs….
Cette tendance répond à plusieurs objectifs :
- Améliorer l’élasticité d’une application,
- Augmenter la performance, chaque brique a un usage précis, dans laquelle elle est optimisée,
- L’architecture logicielle est aussi orientée microservices, le déploiement en continu est facilité car on n’impacte pas tout le code de l’application lors d’une modification, mais un seul module par exemple.
Bref on fonctionne de manière modulaire, l’application n’est plus monolithique et cela apporte de la flexibilité et réduit les risques.
Docker facilite grandement ce mode de fonctionnement, que cela soit dans le déploiement et le maintien en condition opérationnelle des briques de l’application, que pour le déploiement et le développement. Chaque microservice de l’application pourra être packagé dans un conteneur.
Conclusion sur Docker – pour aller plus loin
Plus d’autonomie en développement
Avec une prise en main rapide et une efficacité redoutable, nombreux sont ceux qui développent et testent à l’intérieur d’un conteneur Docker. Le développeur peut rapidement et facilement disposer des environnements de développement sans demander le déploiement de VM à son prestataire ou son équipe d’infrastructures. Il est plus autonome.
Les limites et le besoin d’accompagnement sur les conteneurs
Même si Docker apporte beaucoup d’autonomie, les situations sont nombreuses dans lesquelles le besoin d’accompagnement par un prestataire d’infrastructures spécialisé se fera sentir :
- Dans le cas où le développeur n’a pas d’équipe infrastructures, il doit se débrouiller seul pour déployer sur une plateforme publique, et cela peut être moins simple que cela ne semble.
- Passé le cap du développement, on doit souvent sortir de l’environnement de conteneur pour revenir dans un environnement plus classique de production (IaaS, machine virtuelle, etc…).
- Enfin, les équipes infrastructures internes d’une entreprise peuvent proposer ce type de service à leurs développeurs, mais rechercheront un accompagnement externe pour la phase de production.
L’accompagnement par un hébergeur web ou une société d’infogérance
L’intervention et la valeur ajouté d’un prestataire en hébergement, en infogérance se situera à plusieurs niveaux :
- Bien sûr, la fourniture des ressources de capacité serveur (quote-part CPU, RAM, stockage,…), sur cette “partition serveur “ le conteneur pourra être déployé et le développeur en sera “administrateur”.
- L’accompagnement à la mise en production, pour déployer les outils de monitoring d’application en production (supervision, sauvegarde, gestion des évolutions…) et s’assurer des paramètres de configuration (ex : base de données).
- Enfin, le conseil en méthode de déploiement et d’architecture pour bien calibrer les dimensionnements et l’organisation de l’application.
Les technologies comme Docker vont changer les habitudes de travail et déplacer les frontières des rôles. Elles accélèreront certainement l’adoption du Cloud.
Cela doit aller de pair avec un rapprochement entre développeurs et équipes infrastructures dans un esprit du DevOps pour permettre de gagner en efficacité et agilité sur une chaîne continue de développement-intégration-production.