Retour au glossaire

Conteneur

Qu’est-ce qu’un conteneur ?

Un conteneur est une virtualisation d’une application capable de s’exécuter sur n’importe quel environnement indépendamment de son système d’exploitation. C’est un package léger, portable et scalable de toutes les ressources nécessaires dont les dépendances, fichiers de configuration, librairies et le code nécessaires au fonctionnement d’une application.

 L’histoire du conteneur

En 1979, l’appel système chroot fut créé lors du développement de la version 7 d’Unix. En tant qu’ancêtre des conteneurs il permettait d’isoler les processus dans une arborescence de fichier requis pour son fonctionnement sur un système hôte. Ce système fut étendu en 2000 BSD jails intégré au système d’exploitation open source FreeBSD basé sur Unix. Les BSD jails permettaient à l’aide de la commande jail de compartimenter des processus et leurs descendants. C’est en 2008 que fut réellement introduite la notion de conteneur avec Linux Containers (LXC).

Linux Container est un système de virtualisation qui incorpore les technologies développées dans les années précédentes telles que la fonction du noyau cGroups (groupes de contrôle) pour limiter et isoler l’utilisation des ressources. Cette isolation s’appuie sur l’utilisation des espaces de nommages du noyau afin que les conteneurs ne puissent pas voir les ressources utilisées par le système hôte ni les autres conteneurs.

Avec cette approche les conteneurs interagissent avec directement le noyau et non plus la machine à l’instar des machines virtuelles qui possèdent leur propre noyau. En sage apprenti, les Conteneurs Linux ont appris des BSD jails, du chroot et de ses précurseurs. C’est cette technologie qui sera utilisée par Docker lancé en 2013 qui est l’outil de conteneurisation multi-plateforme le plus utilisé.

 Avantages des conteneurs

La grande particularité des conteneurs est qu’ils ne fournissent pas de système d’exploitation mais définissent un système de fichiers, un nom d’hôte, des limites d’accès du processus à la mémoire et ses limites d’utilisation du processeur. Tout cela sans que les conteneurs ne sachent rien sur les autres conteneurs qui s’exécutent sur le même système.

Les conteneurs contiennent toutes les ressources nécessaires au bon fonctionnement d’une application. Un conteneur est défini à partir d’une image qui est un code informatique léger composé d’instructions qui renseignent les dépendances de l’application et ses instructions de lancement. Ce fichier appelé image peut être partagé et utilisé pour lancer un conteneur.

Du fait que le conteneur se connecte et exploite le noyau (kernel) du système d’exploitation hôte, il peut être lancé sur différents systèmes d’exploitation tant que ceux-ci possèdent les outils requis. Leur portabilité résout le fameux problème des développeurs et des équipes opérationnelles “ça fonctionne sur ma machine”. Ils sont également efficaces et légers car ils partagent le système d’exploitation hôte et n’’exécutent en général qu’un seul processus. D’autre part, ils n’embarquent pas de système d’exploitation (OS) comme les machines virtuelles ce qui allège les utilisateurs de la maintenance des OS.

Avec tous ces avantages d’utilisation, les conteneurs ouvrent la voix et s’incorpore aisément dans de nombreuses approches. La portabilité des conteneurs assure la facilité de les déplacer dans des environnements cloud. De même, de nombreuses solutions cloud telles que Amazon Elastic Container Service (ECS) ou Azure Container Instance (ACI) permettent la mise à disposition des applications conteneurisées sans administration de serveur.

Les conteneurs s’intègrent également très bien avec les architectures en microservice qui favorisent le découplage des fonctionnalités et leur interopérabilité. Avec tous ces avantages, les conteneurs facilitent la mise en place de CI/CD (Continuous Integration/Continuous Deployment). Autour des conteneurs ont été créées de nombreuses solutions telles que les orchestrateurs de conteneurs afin de gérer le déploiement, la mise à l’échelle et la mise en réseau des conteneurs.

En outre, les conteneurs révolutionnent la manière dont nous concevons, développons et déployons nos applications. Ils solutionnent de nombreux problèmes rencontrés lors de ces processus et s’intègrent avec les pratiques devops d’automatisation. En réduisant certaines problématiques d’environnement de développement, et en améliorant les processus de déploiement, les conteneurs s’alignent avec les méthodes agiles et réduisent le time to market. Raison pour laquelle nos équipes utilisent cette technologie pour la plus grande satisfaction de nos clients, avec Docker que nous vous ferons découvrir .

Sources :
How Do Containers Work?
Que sont les conteneurs ?
Qu’est-ce qu’un conteneur ?
FreeBSD
BSD Jail
Cgroups
chroot
Comprendre les conteneurs

conteneur