Conteneurs

Un conteneur Linux, qu'est-ce que c'est ?

Un conteneur Linux® est un ensemble de processus qui sont isolés du reste du système. Un conteneur s'exécute à partir d'une image distincte qui fournit tous les fichiers nécessaires à la prise en charge des processus qu'il contient. En fournissant une image qui contient toutes les dépendances d'une application, le conteneur assure la portabilité et la cohérence de l'application entre les divers environnements (développement, test puis production).

What is a container

Pour mieux comprendre ce qu'est un conteneur, imaginons que vous êtes en train de développer une application. Vous travaillez sur un ordinateur portable dont l'environnement présente une configuration spécifique. D'autres développeurs peuvent travailler sur des machines qui présentent des configurations légèrement différentes. L'application que vous développez repose sur cette configuration et dépend de fichiers spécifiques. En parallèle, votre entreprise exploite des environnements de test et de production qui sont standardisés sur la base de configurations qui leur sont propres et de l'ensemble des fichiers associés. Vous souhaitez émuler ces environnements autant que possible localement, mais sans avoir à payer les coûts liés à la recréation des environnements de serveur. Comment faire pour que votre application en développement puisse fonctionner dans ces environnements, passer l'assurance qualité et être déployée sans prise de tête, sans réécriture et sans correctifs ? La réponse est simple : il vous suffit d'utiliser des conteneurs. Le conteneur qui accueille votre application contient toutes les configurations (et les fichiers) nécessaires. Vous pouvez ainsi le déplacer entre les environnements de développement, de test et de production, sans aucun effet secondaire. La crise est évitée, le travail peut continuer.

C'est, bien entendu, un exemple simplifié, mais les conteneurs Linux peuvent aussi être utilisés pour résoudre des problèmes liés à des situations qui nécessitent un haut niveau de portabilité, de configurabilité et d'isolation. Quelle que soit l'infrastructure (sur site, dans le cloud ou hybride), les conteneurs répondent à la demande. Bien sûr, le choix de la plateforme de conteneurs est aussi important que les conteneurs eux-mêmes.

Ne s'agit-il pas tout simplement de virtualisation ?

Oui et non. Voyons pourquoi avec ces deux définitions simples :

  • La virtualisation permet à de nombreux systèmes d'exploitation de s'exécuter simultanément sur un seul système.
  • Les conteneurs partagent le même noyau de système d'exploitation et isolent les processus de l'application du reste du système.

virtualization vs containers

Qu'est-ce que cela signifie ? Tout d'abord, l'exécution de plusieurs systèmes d'exploitation sur un hyperviseur (le logiciel qui permet la virtualisation) n'est pas une solution aussi légère que les conteneurs. Lorsque vous disposez de ressources limitées, aux fonctionnalités limitées, il est nécessaire que vos applications soient légères et puissent être déployées de manière dense. Les conteneurs Linux s'exécutent sur cet unique système d'exploitation, qu'ils partagent entre eux. Vos applications et services restent ainsi légers et s'exécutent rapidement en parallèle.


Petite histoire des conteneurs

Evolution of containers download button

La technologie que nous appelons aujourd'hui « conteneurs » est apparue en 2000 sous le nom de jail FreeBSD et permettait à l'époque de partitionner un système FreeBSD en plusieurs sous-systèmes ou « jails » (prisons en français). Les systèmes jails étaient développés comme des environnements sécurisés qu'un administrateur système pouvait partager avec plusieurs utilisateurs opérant à l'intérieur ou à l'extérieur d'une entreprise. L'objectif était de créer des processus dans un environnement chrooted modifié (dans lequel l'accès au système de fichiers, au réseau et aux utilisateurs est virtualisé) et de les y « emprisonner » afin qu'ils ne compromettent pas l'ensemble du système. La mise en œuvre des environnements jails était cependant limitée et des méthodes ont finalement été trouvées pour en échapper.

Le concept restait très intéressant.

En 2001, Jacques Gélinas a créé le projet VServer, rendant possible la mise en œuvre d'un environnement isolé sur un serveur Linux. D'après M. Gélinas, ce projet visait à exécuter plusieurs serveurs Linux généralistes sur une seule machine avec un haut niveau d'indépendance et de sécurité. Une fois cette base posée pour l'exploitation de plusieurs espaces utilisateurs contrôlés, toutes les pièces se sont mises en place pour former les conteneurs Linux que l'on connaît aujourd'hui.

Des conteneurs bien pratiques

Très rapidement, d'autres technologies se sont greffées aux conteneurs pour concrétiser cette approche de l'isolement. La fonction du noyau cGroups (groupes de contrôle) permet de contrôler et de limiter l'utilisation des ressources pour un processus ou un groupe de processus. Le système d'initialisation systemd permet de définir l'espace utilisateur et de gérer les processus associés. Il est utilisé par la fonction cgroups pour offrir un niveau de contrôle plus élevé sur ces processus isolés. Ces deux technologies, qui permettent de mieux contrôler Linux, ont servi de base pour pouvoir exécuter des environnements bien qu'ils soient séparés.

Les progrès en matière d'espaces de noms utilisateur ont ensuite permis de faire avancer la technologie des conteneurs. Les espaces de noms utilisateur « permettent de mettre en correspondance des identifiants d'utilisateurs et de groupes au sein d'un espace de noms. Dans le contexte des conteneurs, cela signifie que des utilisateurs et des groupes peuvent avoir des privilèges pour effectuer certaines opérations au sein du conteneur, mais que ces privilèges ne leur sont pas accordés en dehors du conteneur ». Le concept est similaire à celui d'un environnement jail, mais avec un niveau de sécurité plus élevé, atteint grâce une isolation plus marquée des processus, au lieu d'un environnement modifié.

Le projet LXC a ensuite enrichi la technologie d'éléments indispensables (outils, modèles, bibliothèques et liaisons de langage) qui ont permis d'améliorer l'expérience des utilisateurs de conteneurs.

L'avènement de Docker

En 2008, la technologie de conteneurs Docker a fait son apparition (via dotCloud). Elle combine le travail du projet LXC à des outils améliorés pour les développeurs, qui augmentent le niveau de convivialité des conteneurs. La technologie Open Source Docker est actuellement le projet le plus connu et utilisé pour déployer et gérer des conteneurs Linux.

Aujourd'hui, Red Hat et Docker font partie des nombreux membres de l'OCI (Open Container Initiative), qui travaille à la création de normes ouvertes pour les technologies de conteneurs à l'échelle du secteur.


L'Open Container Initiative et la normalisation

Le projet OCI (Open Container Initiative), qui fait partie de la Linux Foundation, a été lancé en 2015 « dans le but de créer des normes sectorielles ouvertes autour des formats et de l'exécution des conteneurs ». Ce projet est axé sur la détermination et la définition de spécifications. Il en existe actuellement deux : runtime-spec et image-spec.

La spécification runtime définit des normes ouvertes relatives à un bundle de système de fichiers, à la structure des fichiers et artéfacts associés dans un conteneur et à la méthode de traitement du bundle par un fichier exécutable conforme. Pour faire simple, cette spécification existe pour garantir que les conteneurs fonctionnent comme prévu et que les ressources associées soient disponibles et stockées aux bons emplacements.

La spécification image définit la méthode de création des images de conteneurs, qui produit « un manifeste d'image, une sérialisation du système de fichiers et une configuration d'image ».

Ces spécifications sont combinées pour définir ce que contient une image de conteneur ainsi que ses dépendances, environnements, arguments, etc. nécessaires à sa bonne exécution.


Les conteneurs, une autre abstraction

Les conteneurs Linux représentent une nouvelle évolution de la manière selon laquelle nous développons, déployons et gérons des applications. Les images de conteneurs Linux permettent d'assurer la portabilité et le contrôle des versions des applications. Les développeurs ont ainsi la garantie que ce qui fonctionne sur leur ordinateur portable fonctionnera aussi dans l'environnement de production.

L'exécution d'un conteneur Linux nécessite moins de ressources qu'une machine virtuelle, mais il doit assurer la plus grande partie de l'isolation de l'application et se gère plus facilement en tant qu'élément d'une plus grande application.

Les conteneurs Linux permettent de développer plus rapidement des applications et de répondre aux besoins de l'entreprise au fur et à mesure de leur apparition, peu importe le logiciel utilisé. Ne vous y trompez pas, les conteneurs ne servent pas uniquement à accueillir une application complète : ils peuvent aussi contenir des éléments d'une application ou des services. Vous pouvez utiliser d'autres technologies, telles que Kubernetes, pour automatiser et orchestrer vos applications conteneurisées. Un conteneur peut héberger la logique de l'application, les fichiers d'exécution et les dépendances. Vous pouvez donc créer un conteneur qui inclut tous ces éléments, ou alors créer une application qui contient plusieurs conteneurs agissant comme des microservices.


Des conteneurs en production

Les conteneurs sont parfaits pour accélérer la distribution des logiciels et des applications chez vos clients. Mais cela signifie qu'il faut les utiliser dans des environnements de production, ce qui augmente l'importance des processus exécutés sur ces conteneurs.

Heureusement, nous pouvons vous aider. Nous collaborons depuis des années avec la communauté Open Source pour concevoir des technologies sécurisées, stables et fiables, telles que les conteneurs. C'est notre mission. Bien sûr, nous proposons des services d'assistance pour ces technologies. Donc si vous avez besoin d'aide, n'hésitez pas à faire appel à nous.

Choisissez les technologies Red Hat pour déployer des conteneurs correctement du premier coup. Les solutions Red Hat répondent à vos besoins, quel que soit votre projet : offrir à vos équipes de développement une plateforme compatible avec les conteneurs, exécuter votre infrastructure de conteneurs sur un système d'exploitation de pointe ou mettre en place des solutions de stockage pour les gros volumes de données générées par les conteneurs.

Vous ne savez pas encore tout sur les conteneurs...