La technologie des conteneurs, avec Docker en fer de lance, s’est déjà imposée dans le monde du Cloud et de l’hébergement. Cependant, elle est encore peu utilisée en entreprise. Démystifions alors avec VeryFrog la notion conteneur, la différence avec Docker avant de nous pencher sur le monde des orchestrateurs.

Docker et containers (conteneurs)

Qu’est-ce qu’un conteneur ?

Issu du monde Linux, le conteneur est basiquement un mécanisme d’isolation de processus. Qu’est-ce que cela signifie ? Tout simplement, un conteneur est une environnement qui permet à un programme de s’exécuter en toute autonomie. Cet environnement est classiquement constitué des librairies nécessaires au programme, d’un bout de système de fichiers permettant au processus d’interagir avec des fichiers (journaux, fichiers temporaires, …) et du programme lui-même. Cet environnement est classiquement nommé “image“.

Notez que le système d’exploitation ne fait pas partie de l’environnement. En effet, le conteneur n’est qu’une enveloppe servant d'isolation à un processus. C’est donc toujours le système d’exploitation sous-jacent qui nativement exécute le conteneur. Ainsi, on peut transporter une image de conteneur d’un système à un autre – tant que ces derniers fournissent les mêmes interfaces noyau – à l’image de toutes les distributions Linux. On obtient donc au final un format portable, à l’image des conteneurs maritimes, qui ont donné leur nom à cette technologie.

La première implémentation réellement complète de la conteneurisation est apparue en 2008 avec LXC. Néanmoins, le format et son utilisation étaient un peu austère. Du coup, quelques années plus tard, un développeur a décidé de simplifier l’usage de LXC en fournissant une surcouche plus facile à manipuler: Docker. Grâce à cela, l’usage des conteneurs a explosé. Docker a désormais évolué en un écosystème complet: cloud pour stocker des images venues du monde entier, interfaçage réseau complexe, orchestration, … Sa renommée est telle qu’on confond maintenant le terme “docker” et “conteneur”.

Quelle différence avec la virtualisation ?

Docker permet donc d'isoler des programmes les rendant ainsi portables. De ce fait, on entend parfois le terme de “virtualisation légère” pour qualifier la conteneurisation. Pourtant, il y a une différence nette entre la virtualisation et la notion de conteneur.

La virtualisation permet de mutualiser les ressources système d’un serveur physique (CPU, Mémoire, …) pour les distribuer de manière optimale à des entités virtuelles : les machines virtuelles (VM). On peut alors construire plusieurs VM sur un même serveur physique, ce qui réduit le TCO et l’impact écologique entre autres. Mais on parle bien de serveurs et de machines ici. On virtualise du matériel, afin d’exécuter des système d’exploitation de manière isolée.

Docker quant à lui n’isole que des applications. Il s’appuie sur un système d’exploitation existant. Il ne virtualise rien en soi car un conteneur accède aux ressources de l’OS sans passer par une couche d’abstraction. C’est pour cela d’ailleurs que les performances d'applications sous Docker sont a peu de chose près les mêmes qu’une exécution native.

Même si ce sont 2 choses différentes, il est habituel de voir docker et la virtualisation fonctionner de paire. En effet, on va classiquement utiliser la virtualisation pour s’abstraire du matériel physique et construire des VM qui exécuteront des systèmes d’exploitation. On pourra alors isoler nos applications et les transporter entre ces systèmes grâce à Docker. Votre entreprise bénéficie alors des avantages des 2 technologies.

Docker Virtualisation

Docker et les Orchestrateurs

La section précédente mentionne le fait de pouvoir transporter nos applications sous Docker entre différents systèmes d’exploitation. C’est là tout l’intérêt des conteneurs: pouvoir fournir de la haute disponibilité ainsi que d’offrir une montée en charge facile des applications en les multipliant sur tout un ensemble d’OS.

Cependant, on se rencontre immédiatement que cette possibilité n’est pas si aisée à implémenter dès que le nombre d’applications grandit. Si vous avez plusieurs dizaines d’images docker de votre serveur Web, comment assurer la redirection du trafic vers toutes ces instances ? Comment inclure une nouvelle instance et y rediriger aussi le trafic Web ? Comment détecter une image en erreur et la relancer sur un autre système ?

Pour effectuer toutes ces tâches sans effort, sont apparus les orchestrateurs. Ces derniers permettent de garantir l’exécution de vos conteneurs sur un ensemble de serveurs. Ils prennent en charge la répartition de vos images sur vos machines. Ils assurent le maillage réseau entre vos instances applicatives (interne et externe). Aussi, ils offrent des mécanismes de mise à jour sans coupure, avec rollback en cas d’erreur. Vous le constatez, si docker fournit un moyen séduisant d’isoler et de déployer vos applications, ce sont bien les orchestrateurs qui vont vous offrir une puissance de feu et une gestion facile de votre infrastructure conteneurisée.

Un certain nombre d’orchestrateur existe sur le marché. Mais il semble que le grand gagnant soit Kubernetes. Ce dernier est issu de Google, chez qui tout est conteneur. Il se cache derrière bon nombre de Cloud. Il est d’ailleurs fort probable que, si vous possédez des serveur privé virtuels (VPS), ces derniers soient en réalité des conteneurs vides, sans applications autres que celles du système (terminal, gestionnaire de paquets, …), orchestrés par Kubernetes !

Docker dans le monde Windows

Docker est né dans le monde Linux et est taillé pour ce système d’exploitation. Néanmoins, Microsoft ne pouvait rester en marge de ce mouvement. C’est pourquoi, le géant de Redmond a beaucoup travaillé ces dernières années sur l’intégration entre Windows et Docker.

Grâce à cela, Docker peut désormais nativement s’exécuter sur les versions Windows Server 2016 et ultérieures. Sur les versions clientes comme Windows 10, il faut passer par une couche de virtualisation pour bénéficier de Docker. Depuis Windows Server 2019, un système Windows peut même s’intégrer à Kubernetes. Vous pouvez donc gérer depuis cet orchestrateur un parc applicatif hétérogène de manière centralisé !

Attention cependant, l’implémentation docker de Windows n’est pas encore au niveau de celle sous Linux. De plus, le noyau de Windows fonctionne différemment de celui de Linux. La conséquence première est que pour isoler un processus, il faut embarquer beaucoup plus de composants système dans une image docker Windows que Linux. A titre d’exemple, l’image docker officielle du serveur web IIS de Microsoft pèse près de 2Go, alors que l’image docker du serveur web Nginx sous Linux se contente de 17Mo.

La conteneurisation est donc une technologie séduisante car elle apporte, à travers les orchestrateurs, haute disponibilité et montée en charge aisée. Couplée avec la virtualisation, elle apporte une indépendance matérielle et logicielle aux entreprises, ce qui leur permet de réduit drastiquement leur TCO et leur dépendance aux constructeurs. Cependant, la technologie a du mal à sortir du monde Web et le retard pris par Microsoft, très présent en entreprise, explique la faible adoption par ces dernières. N’hésitez alors pas à nous contacter pour mettre fin à cet état de fait et déployer vos applications grâce à Docker.