Les technologies de conteneurs permettent de décomposer l’application en plusieurs unités logicielles isolées, qui s’exécutent sur une machine hôte. Chaque unité est autosuffisante et embarque les différentes dépendances nécessaires à son exécution.
Quand on parle de conteneur, on pense souvent à Docker, leader du marché des technologies de conteneurisation. Il existe par ailleurs d’autres alternatives telles que l’environnement d’exécution rkt proposé par CoreOS, runC basés sur les standards OCI (Open Container Initiative) ou encore les projets Linux (LXC, LXD).
LÉGÈRETÉ ET PORTABILITÉ
N’intégrant pas la composante OS, les conteneurs sont considérés comme une entité prête à être déployée sur une machine hôte, qui fait appel à son tour aux ressources sous-jacentes comme l’OS. Ainsi, la conteneurisation offre un niveau d’abstraction plus important que la virtualisation : plusieurs conteneurs peuvent être exécutés sur une même machine hôte et partager le noyau de l’OS. Ce niveau d’abstraction garantit la légèreté des conteneurs et la rapidité de leur exécution. Il permet également de simplifier la migration des conteneurs d’un environnement à un autre, ce qui garantit une portabilité des modules applicatifs et donc facilite le déploiement des applications.
APPROCHE COMPLÉMENTAIRE À L’ARCHITECTURE EN MICROSERVICES
Légers, portables et autosuffisants, les conteneurs permettent par ailleurs d’appuyer une tendance vers laquelle les développeurs s’orientent de plus en plus : l’architecture applicative en microservices. En effet, déployer des microservices dans des conteneurs prend tout son sens lorsqu’on souhaite packager chaque service applicatif en tant qu’unité logicielle (ou module applicatif) autonome. Cette approche permet de se défaire des contraintes des applications monolithiques et de réduire les dépendances entre les composants applicatifs (principe de couplage faible).
Une gestion séparée du cycle de vie de ces unités devient possible et offre plus de flexibilité dans les tests et le déploiement continu des applications métiers : à titre d’exemple, les développeurs peuvent déployer séparément des conteneurs sans impacter tout le code de l’application ou les autres modules applicatifs.
ET SI ON CONTENEURISAIT SES APPLICATIONS À GRANDE ÉCHELLE ?
Comme décrit plus haut, les avantages de la conteneurisation sont nombreux. Cela dit, plusieurs questions se posent à partir du moment où l’on souhaite généraliser cette approche au sein d’une DSI. Le passage à l’échelle de plusieurs applications conteneurisées implique la nécessité de mettre en place une gestion centralisée de ses conteneurs et ses machines hôtes via les outils et les processus adaptés. En effet, plus on multiplie ses conteneurs et machines hôtes, plus on risque de faire face à des difficultés de monitoring ou encore de maintenabilité et de gestion des cycles de vie de ses conteneurs et modules applicatifs.
La mise en place d’une orchestration des conteneurs devient donc un prérequis essentiel à une démarche de conteneurisation à grande échelle.
Dans le second volet de cette trilogie, nous présenterons les cas d’usage autour des solutions d’orchestration des conteneurs avec un zoom sur les trois solutions Kubernetes, Docker Swarm et AWS.