Conteneurs

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

Un conteneur Linux® est un processus ou un ensemble de processus isolés du reste du système. Tous les fichiers nécessaires à leur exécution sont fournis par une image distincte, ce qui signifie que les conteneurs Linux sont portables et fonctionnent de la même manière dans les environnements de développement, de test et de production. Ainsi, ils sont bien plus rapides que les pipelines de développement qui s'appuient sur la réplication d'environnements de test traditionnels.

Qu'est-ce qu'un conteneur

Imaginons que vous développez 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 aux configurations légèrement différentes. L'application que vous développez s'appuie sur cette configuration et utilise des bibliothèques, des dépendances et des fichiers spécifiques. En parallèle, votre entreprise exploite des environnements de développement 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 tous les fichiers, bibliothèques et dépendances nécessaires. Vous pouvez ainsi le déplacer jusqu'en production sans aucun effet secondaire. Les éléments qui composent l'image d'un conteneur sont analogues à ceux de l'installation d'une distribution Linux, car cette image est fournie avec tous ses paquets RPM, fichiers de configuration, etc. Cependant, il est bien plus simple de distribuer des images de conteneurs que d'installer une nouvelle version d'un système d'exploitation. La crise est évitée, le travail peut continuer.

C'est un exemple simple, 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. Les conteneurs Linux permettent de développer plus rapidement des applications et de répondre aux besoins métier dès leur émergence. 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 ?

Pas tout à fait. Les conteneurs et la virtualisation sont plutôt complémentaires. Voici deux définitions simples pour y voir plus clair :

  • La virtualisation permet à vos systèmes d'exploitation (Windows ou Linux) de s'exécuter simultanément sur un seul système matériel.
  • Les conteneurs partagent le même noyau de système d'exploitation et isolent les processus de l'application du reste du système. Par exemple : les systèmes Linux ARM exécutent des conteneurs Linux ARM, les systèmes Linux x86 exécutent des conteneurs Linux x86 et les systèmes Windows x86 exécutent des conteneurs Windows x86. Les conteneurs Linux sont extrêmement portables, mais ils doivent être compatibles avec le système sous-jacent.

virtualisation et conteneurs

Qu'est-ce que cela signifie ? En premier lieu, la virtualisation utilise un hyperviseur pour émuler le matériel, ce qui permet d'exécuter plusieurs systèmes d'exploitation en parallèle. C'est une solution moins légère que les conteneurs. Lorsque vous disposez de ressources et de 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 en natif sur leur 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.

Les conteneurs Linux représentent une nouvelle évolution de la manière dont 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. Un conteneur Linux mobilise moins de ressources qu'une machine virtuelle. Il propose une interface standard (démarrage, arrêt, variables d'environnement, etc.), assure l'isolation des applications et peut être géré plus facilement en tant que module d'une application plus importante (plusieurs conteneurs). En outre, ces applications à plusieurs conteneurs peuvent être orchestrées dans différents clouds.


Petite histoire des conteneurs

Évolution des conteneurs - télécharger

Même si les conteneurs ne sont pas nés sous Linux, dans l'univers Open Source, les meilleures idées ne demandent qu'à être reprises, adaptées et améliorées. Les conteneurs ne font pas exception à la règle.

La technologie que nous appelons aujourd'hui « conteneurs » est apparue en 2000 sous le nom de FreeBSD Jails 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 du noyau ont ensuite permis de faire avancer la technologie des conteneurs. Grâce à ces espaces de noms, un grand nombre d'identifiants, des ID de processus aux noms de réseaux, pouvaient dès lors être virtualisés au sein du noyau Linux. Parmi les plus récents, 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 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. Avec LXC, il est facile de démarrer des conteneurs via une simple interface en ligne de commande.

L'avènement de Docker

En 2008, la technologie de conteneurs Docker a fait son apparition (via dotCloud). Cette technologie a apporté de nombreux nouveaux concepts et outils : une interface en ligne de commande simple pour l'exécution et la création de nouvelles images à couches, un démon de serveur, une bibliothèque d'images de conteneurs prédéfinies et le principe d'un serveur de registre. Ensemble, toutes ces technologies ont permis aux utilisateurs de créer rapidement de nouveaux conteneurs à couches et de les partager facilement entre eux.

Chez Red Hat, nous avons compris l'importance de la collaboration dans ce nouvel écosystème, et nous avons utilisé la technologie sous-jacente pour notre solution OpenShift Container Platform. Pour éviter le risque de monopole sur une technologie de cette importance, l'entreprise Docker Inc. a offert un grand nombre de ses composants sous-jacents à des projets Open Source développés par des communautés (runC fait partie de l'Open Containers Initiative ou OCI, et containerd a été intégré à la Cloud Native Computing Foundation).

Trois normes majeures assurent l'interopérabilité des technologies de conteneurs : les spécifications OCI Image, Distribution et Runtime. Ensemble, ces spécifications permettent aux projets communautaires, aux produits commerciaux et aux fournisseurs de cloud de développer des technologies de conteneurs interopérables (qui vous permettent, par exemple, de faire fonctionner vos images créées sur mesure sur le serveur de registre d'un fournisseur de cloud). Aujourd'hui, Red Hat et Docker font partie des nombreux membres de l'OCI et contribuent à la création de normes ouvertes pour les technologies de conteneurs à l'échelle du secteur.


Qu'en est-il de la sécurité des conteneurs ?

Les conteneurs ont du succès, mais sont-ils sécurisés ? La sécurité des conteneurs est un sujet complexe, puisqu'il est nécessaire de protéger le pipeline et l'application du conteneur, ainsi que les environnements et l'infrastructure de déploiement, sans compter l'intégration à prévoir avec les outils et politiques de sécurité propres à chaque entreprise. Il est donc indispensable d'avoir un plan. Et nous pouvons vous aider.


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...