Accueil les sujets Qu'est-ce que la conteneurisation ? Qu'est-ce que la conteneurisation ?
Découvrez l'histoire de la technologie de conteneurisation, les avantages qu'elle apporte et son lien avec la virtualisation.
Arrière-plan noir et bleu
Qu'est-ce que la conteneurisation ?

La conteneurisation consiste à empaqueter du code logiciel avec uniquement les bibliothèques du système d'exploitation et les dépendances nécessaires à l'exécution du code, afin de créer un exécutable léger unique, appelé un conteneur, qui fonctionne de manière cohérente sur n'importe quelle infrastructure. Plus portables et plus économes en ressources que les machines virtuelles (VM), les conteneurs sont devenus les unités de traitement de facto des applications cloud natives modernes.

La conteneurisation permet aux développeurs de créer et de déployer des applications plus rapidement et de manière plus sûre. Avec les méthodes traditionnelles, le code est développé dans un environnement informatique spécifique, et son transfert vers un nouvel emplacement entraîne souvent des bogues et des erreurs, par exemple, lorsqu'un développeur transfère du code d'un ordinateur de bureau vers une VM ou d'un système Linux vers un système d'exploitation Windows. La conteneurisation élimine ce problème en regroupant le code d'application avec les fichiers de configuration, les bibliothèques et les dépendances connexes nécessaires à son exécution. Ce package unique de logiciels, ou « conteneur », est extrait du système d'exploitation hôte. Il est donc autonome et devient portable, c'est-à-dire qu'il peut s'exécuter sur n'importe quelle plateforme ou dans n'importe quel cloud sans problèmes.

Le concept de conteneurisation et d'isolation des processus est apparu il y a plusieurs dizaines d'années, mais l'émergence en 2013 du moteur open source Docker, une norme industrielle pour les conteneurs, avec des outils de développement simples et une approche universelle de l'empaquetage, a accéléré l'adoption de cette technologie. Aujourd'hui, les organisations utilisent de plus en plus la conteneurisation pour créer de nouvelles applications et moderniser les applications existantes pour le cloud. Selon une récente enquête d'IBM (PDF, 1,4 Mo), 61 % des utilisateurs de conteneurs indiquent qu'ils en utilisent dans au moins 50 % des nouvelles applications qu'ils ont créées au cours des deux années précédentes, et 64 % prévoient qu'au moins 50 % de leurs applications existantes soient conteneurisées au cours des deux prochaines années.

Les conteneurs sont souvent qualifiés de « légers », car ils partagent le noyau du système d'exploitation de la machine et ne nécessitent pas d'associer un système d'exploitation dans chaque application. Les conteneurs ont intrinsèquement une capacité moindre qu'une machine virtuelle et, comme ils démarrent plus rapidement, ils permettent d'en exécuter un bien plus grand nombre sur la même capacité de traitement qu'une machine virtuelle. Ainsi, ils améliorent l'efficience qui réduit les coûts liés aux serveurs et aux licences.

Mais le point le plus important peut-être est que la conteneurisation permet aux applications d'être « écrites une fois et exécutées partout ». Cette portabilité accélère le développement, évite d'être dépendant d'un fournisseur de cloud et apporte d'autres avantages notables tels que l'isolement des défaillances, la facilité de gestion, la simplification de la sécurité, entre autres (voir ci-dessous).

Conteneurisation des applications

Les conteneurs encapsulent une application dans un package exécutable unique de logiciels qui regroupe le code d'application et tous les fichiers de configuration, bibliothèques et dépendances connexes requis pour son exécution. Les applications conteneurisées sont « isolées » dans la mesure où elles ne sont pas regroupées dans une copie du système d'exploitation. En revanche, un moteur d'exécution open source (tel que Docker) est installé sur le système d'exploitation de l'hôte. Il devient le conduit qui permet aux conteneurs de partager un système d'exploitation avec d'autres conteneurs sur le même système informatique.

Les autres couches de conteneurs, comme les fichiers binaires et bibliothèques communs, peuvent également être partagées entre plusieurs conteneurs. Ainsi, il n'est pas nécessaire d'exécuter un système d'exploitation dans chaque application. La capacité de chaque conteneur est donc plus réduite et il peut démarrer plus rapidement, accroissant de ce fait l'efficience des serveurs. L'isolement des applications en tant que conteneurs réduit également le risque que du code malveillant présent dans un conteneur impacte d'autres conteneurs ou n'envahisse le système hôte.

La dissociation du système d'exploitation hôte rend les applications conteneurisées portables et capables de s'exécuter de manière uniforme et cohérente sur n'importe quelle plateforme ou dans n'importe quel cloud. Les conteneurs peuvent être facilement transportés à partir d'un ordinateur de bureau vers une machine virtuelle ou d'un système d'exploitation Linux vers un système d'exploitation Windows, et ils s'exécuteront de manière cohérente sur des infrastructures virtualisées ou sur des serveurs « bare metal » traditionnels, sur site  ou dans le cloud. Les développeurs de logiciels peuvent ainsi continuer à utiliser les outils et les processus qui leur sont les plus familiers.

On comprend pourquoi les entreprises adoptent rapidement la conteneurisation comme une approche supérieure du développement et de la gestion des applications. Grâce à la conteneurisation, les développeurs peuvent créer et déployer des applications plus rapidement et de manière plus sûre, qu'il s'agisse d'une application monolithique traditionnelle (application logicielle à un seul niveau) ou d'une application modulaire reposant sur une architecture de microservices.  Les nouvelles applications basées sur le cloud peuvent être créées complètement en tant que microservices conteneurisés qui divisent une application complexe en une série de petits services spécialisés et gérables. Les applications existantes peuvent être remodularisées dans des conteneurs (ou des microservices conteneurisés) qui utilisent plus efficacement les ressources de traitement.

Avantages détaillés de la conteneurisation

La conteneurisation offre des avantages significatifs aux développeurs et aux équipes de développement. Ces avantages sont les suivants :

Portabilité : comme un conteneur crée un package exécutable de logiciels qui est dissocié du système d'exploitation hôte (qui n'est pas lié à ce dernier et qui n'en dépend pas non plus), il est portable et peut fonctionner de façon uniforme et cohérente dans n'importe quel cloud ou sur n'importe quelle plateforme. 

Agilité : le moteur open source Docker utilisé pour exécuter les conteneurs est à l'origine de la norme industrielle pour les conteneurs. Il fait appel à des outils de développement simples et à une approche universelle de la modularisation qui fonctionne sur Linux et Windows. L'écosystème de conteneurs est passé à des moteurs gérés par OCI (Open Container Initiative). Les développeurs de logiciels peuvent continuer à utiliser des outils et des processus agiles ou DevOps qui leur permettent de développer et d'améliorer rapidement les applications.

Rapidité : les conteneurs sont souvent considérés comme « légers » car ils partagent le noyau du système d'exploitation de la machine et ne sont pas encombrés par cette surcharge supplémentaire. Ainsi, les serveurs sont plus efficaces, les coûts des serveurs et les licences moindres et les démarrages sont plus rapides, car aucun système d'exploitation ne doit être démarré.

Isolement des défaillances : chaque application conteneurisée est isolée et fonctionne indépendamment des autres. La défaillance d'un conteneur n'a pas d'incidence sur le fonctionnement continu des autres conteneurs. Les équipes de développement peuvent identifier et corriger les problèmes techniques qui apparaissent dans un conteneur sans entraîner d'indisponibilité dans les autres conteneurs. De plus, le moteur de conteneurs peut tirer parti de toutes les techniques d'isolement de sécurité des systèmes d'exploitation, telles que le contrôle d'accès SELinux, pour isoler les erreurs dans les conteneurs.

Efficacité : les logiciels qui s'exécutent dans des environnements conteneurisés partagent le noyau du système d'exploitation de la machine, et les couches d'application dans un conteneur peuvent être partagées entre tous les conteneurs. Les conteneurs requièrent intrinsèquement moins de capacité qu'une machine virtuelle et démarrent plus rapidement. Ainsi, un plus grand nombre de conteneurs peut s'exécuter avec la même capacité de traitement sous la forme d'une seule machine virtuelle. Les serveurs étant plus efficients, leurs coûts et ceux des licences diminuent.

Facilité de gestion : une plateforme d'orchestration de conteneurs automatise l'installation, la mise à l'échelle et la gestion des charges de travail et des services conteneurisés. Les plateformes d'orchestration de conteneurs peuvent faciliter des tâches de gestion, telles que la mise à l'échelle des applications conteneurisées et le déploiement des nouvelles versions d'applications. Elles fournissent aussi des fonctions de surveillance, de consignation et de débogage, entre autres. Kubernetes, qui est peut-être le système d'orchestration de conteneurs le plus utilisé, est une technologie open source (dont le code open source a été initialement ouvert par Google dans le cadre de son projet interne Borg) qui automatise dès le départ les fonctions de conteneurs Linux. Kubernetes fonctionne avec de nombreux moteurs de conteneurs, tels que Docker, mais également avec les systèmes de conteneurs conformes aux normes OCI (Open Container Initiative) pour les formats d'image de conteneur et d'environnements d'exécution.

Sécurité : l'isolement des applications en tant que conteneurs empêche par nature l'invasion de code malveillant d'affecter les autres conteneurs ou le système hôte. En outre, il est possible de définir des autorisations de sécurité pour empêcher automatiquement les composants indésirables d'entrer dans les conteneurs ou limiter les communications avec les ressources inutiles.

Types de conteneurisation

Du fait de l'engouement croissant pour les solutions basées sur des conteneurs et de leur utilisation accrue, il s'est avéré nécessaire d'établir des normes relatives à la technologie des conteneurs et à l'approche de la modularisation du code logiciel. L'initiative OCI (Open Container Initiative), créée en juin 2015 par Docker et d'autres leaders du secteur, vise à promouvoir des normes et des spécifications ouvertes communes et minimales concernant la technologie des conteneurs. C'est pourquoi l'OCI contribue à élargir les choix en matière de moteurs open source. Les utilisateurs ne dépendront pas de la technologie d'un fournisseur, mais ils pourront tirer parti des technologies certifiées par l'OCI qui leur permettent de créer des applications conteneurisées à l'aide d'un ensemble d'outils DevOps et de les exécuter de manière cohérente sur l'infrastructure de leur choix.

Aujourd'hui, Docker est l'une des technologies de moteur de conteneur les plus connues et les plus utilisées, mais il en existe d'autres. L'écosystème adopte la norme containerd, mais il existe d'autres alternatives telles que CoreOS rkt, Mesos Containerizer, LXC Linux Containers, OpenVZ et crio-d. Les fonctionnalités et les valeurs par défaut peuvent différer, mais l'adoption et l'exploitation des spécifications de l'OCI au fur et à mesure de leur évolution garantiront que les solutions sont indépendantes du fournisseur, certifiées pour fonctionner sur plusieurs systèmes d'exploitation et utilisables dans plusieurs environnements.

Microservices et conteneurisation

Les petits et grands éditeurs de logiciels adoptent les microservices qu'ils considèrent comme une approche optimale du développement et de la gestion des applications. Ce choix contraste avec le modèle monolithique antérieur, qui consistait à combiner une application logicielle avec l'interface utilisateur associée et une base de données sous-jacente dans une seule unité, sur une seule plateforme serveur. Avec les microservices, une application complexe est décomposée en une série de services plus petits et plus spécialisés, chacun disposant de sa propre base de données et de sa propre logique métier. Les microservices communiquent ensuite entre eux par le biais des interfaces communes (comme les API) et des interfaces REST (comme HTTP). Grâce aux microservices, les équipes de développement peuvent se concentrer sur la mise à jour de parties spécifiques d'une application sans l'impacter dans son ensemble, ce qui permet d'accélérer le développement, les tests et  le déploiement.

Les concepts qui sous-tendent les microservices et la conteneurisation sont similaires, car il s'agit dans les deux cas de pratiques de développement logiciel qui, pour l'essentiel, transforment les applications en ensembles de services ou de composants plus petits qui sont portables, évolutifs, efficaces et plus faciles à gérer.

En outre, les microservices et la conteneurisation donnent de bons résultats lorsqu'ils sont utilisés ensemble. Les conteneurs fournissent une encapsulation légère de toute application, qu'il s'agisse d'un monolithe traditionnel ou d'un microservice modulaire. Un microservice, développé dans un conteneur, bénéficie alors de tous les avantages inhérents à la conteneurisation : portabilité en termes de processus de développement et de compatibilité avec les fournisseurs (pas de dépendance vis à vis d'un fournisseur), mais aussi d'autres avantages tels que agilité des développeurs, isolement des dysfonctionnements, efficacité des serveurs, automatisation de l'installation, de la mise à l'échelle et de la gestion et couches de sécurité.

Aujourd'hui, les communications se déplacent rapidement vers le cloud, où les utilisateurs peuvent développer des applications rapidement et efficacement. Les applications et les données cloud sont accessibles à partir de n'importe quel périphérique connecté à Internet, les membres de l'équipe pouvant travailler ainsi à distance et en déplacement. Comme les fournisseurs de services cloud gèrent l'infrastructure sous-jacente, les entreprises n'ont donc pas besoin d'investir dans des serveurs et d'autres équipements. Elles bénéficient, en outre, de sauvegardes réseau automatisées pour renforcer la fiabilité. Les infrastructures cloud se mettent à l'échelle à la demande et peuvent ajuster dynamiquement des ressources informatiques, la capacité et  l'infrastructure, selon l'évolution des besoins des charges. Par ailleurs, les fournisseurs de services cloud mettent régulièrement à jour leurs offres, et les utilisateurs ont accès en continu aux technologies innovantes les plus récentes.

Les conteneurs, les microservices et le cloud computing se combinent pour porter le développement et la distribution des applications à des niveaux que les méthodologies et environnements traditionnels ne permettent pas d'atteindre. Ces approches de nouvelle génération ajoutent de l'agilité, de l'efficacité, de la fiabilité et de la sécurité au cycle de développement des logiciels, ce qui permet d'accélérer la livraison des applications et d'apporter des améliorations aux utilisateurs finaux et au marché.

Sécurité

Intrinsèquement, les applications conteneurisées présentent un certain niveau de sécurité puisqu'elles peuvent s'exécuter en tant que processus isolés et fonctionner indépendamment des autres conteneurs. Si elles étaient véritablement isolées, du code malveillant ne pourrait pas affecter les autres conteneurs ou envahir le système hôte. Or les couches d'application d'un conteneur sont souvent partagées avec d'autres conteneurs. En termes d'efficacité des ressources, c'est un avantage, mais cette situation ouvre la voie à des interférences et à des violations de sécurité dans les conteneurs. Il en va de même pour le système d'exploitation partagé, car plusieurs conteneurs peuvent être associés au même système d'exploitation hôte. Les menaces de sécurité sur le système d'exploitation commun peuvent avoir un impact sur tous les conteneurs associés, et inversement, une violation au niveau d'un conteneur peut envahir le système d'exploitation hôte.

Mais qu'en est-il de l'image du conteneur lui-même ? Comment les applications et les composants open source inclus dans un conteneur améliorent-ils la sécurité ? Les fournisseurs de technologies de conteneurs, comme Docker, continuent de s'attaquer activement aux problèmes de sécurité. La conteneurisation est basée sur une approche « sécurisée par défaut », selon le postulat que la sécurité doit être inhérente à la plateforme et non pas à une solution déployée et configurée séparément. Ainsi, le moteur de conteneur prend en charge toutes les propriétés d'isolement par défaut inhérentes au système d'exploitation sous-jacent. Des autorisations de sécurité peuvent être définies pour bloquer automatiquement l'entrée de composants indésirables dans les conteneurs ou limiter les communications avec des ressources inutiles.

Par exemple, les espaces de nom Linux offrent une vue isolée du système à chaque conteneur, à savoir le réseau, les points de montage, les ID processus, les ID utilisateur, les communications entre processus et les paramètres de nom d'hôte. Les espaces de nom peuvent être utilisés pour limiter l'accès à l'une de ces ressources via des processus au sein de chaque conteneur. En général, les sous-systèmes qui ne disposent pas de support d'espaces de nom ne sont pas accessibles à partir d'un conteneur. Les administrateurs peuvent facilement créer et gérer ces « contraintes d'isolement » sur chaque application conteneurisée via une interface utilisateur simple.

Les chercheurs s'efforcent de renforcer la sécurité des conteneurs Linux, et un large éventail de solutions de sécurité est disponible pour automatiser la détection et la réponse aux menaces dans l'ensemble de l'entreprise, pour surveiller et appliquer la conformité aux normes industrielles et aux politiques de sécurité, pour garantir la sécurité du flux de données dans les applications et les points d'extrémité, et bien plus encore.

Découvrez une stratégie permettant de mettre à l'échelle la sécurité des conteneurs dans les organisations de toutes tailles.

Virtualisation et conteneurisation

Les conteneurs sont souvent comparés aux machines virtuelles, car ces deux technologies sont très performantes en terme de traitement grâce à l'exécution de plusieurs types de logiciels (sous Linux ou Windows) dans un environnement unique. Toutefois, la technologie des conteneurs présente des avantages considérables qui sont bien supérieurs à ceux de la virtualisation. Elle est appelée à devenir très vite la technologie privilégiée par les professionnels de l'informatique.

La technologie de virtualisation permet à plusieurs systèmes d'exploitation et applications logicielles de s'exécuter simultanément et de partager les ressources d'un seul ordinateur physique. Par exemple, une entreprise informatique peut utiliser à la fois Windows et Linux, ou plusieurs versions d'un système d'exploitation, ainsi que plusieurs applications sur un même serveur. Chaque application et ses fichiers, bibliothèques et dépendances, y compris une copie du système d'exploitation, forment une machine virtuelle. L'exécution de plusieurs machines virtuelles sur une seule machine physique permet de réduire considérablement les dépenses d'investissement et les coûts opérationnels et énergétiques.

Regardez la vidéo « Virtualization in 2019 » et lisez le document « Virtualization: A Complete Guide » qui présentent plus en détail la virtualisation.

La conteneurisation, quant à elle, utilise les ressources de traitement encore plus efficacement. Un conteneur crée un package exécutable unique de logiciels qui regroupe le code d'application et tous les fichiers de configuration, bibliothèques et dépendances connexes requis pour son exécution. Contrairement aux machines virtuelles, cependant, les conteneurs ne sont pas regroupés dans une copie du système d'exploitation. Le moteur d'exécution du conteneur est installé sur le système d'exploitation du système hôte, devenant ainsi le conduit par lequel tous les conteneurs du système informatique partagent le même système d'exploitation.

Comme nous l'avons indiqué, les conteneurs sont souvent considérés comme « légers », car ils partagent le noyau du système d'exploitation de la machine et ne nécessitent pas d'associer un système d'exploitation au sein de chaque application (comme c'est le cas avec une machine virtuelle). D'autres couches de conteneurs (fichiers binaires et bibliothèques communs) peuvent être également partagées entre plusieurs conteneurs, ce qui réduit la capacité qu'utilisent les conteneurs par rapport à une machine virtuelle et permet de les démarrer plus rapidement. Comme plusieurs conteneurs peuvent alors s'exécuter avec la même capacité de traitement qu'une seule machine virtuelle, ils améliorent l'efficience des serveurs et réduisent les coûts liés aux serveurs et aux licences.

Solutions connexes
Red Hat OpenShift on IBM Cloud

Red Hat OpenShift on IBM Cloud utilise OpenShift dans les environnements publics et hybrides afin d'offrir vitesse, réactivité au marché, évolutivité et fiabilité.

Explorer Red Hat OpenShift on IBM Cloud
IBM Cloud Satellite

Avec IBM Cloud Satellite, vous pouvez lancer des services cloud cohérents n'importe où : dans des environnements sur site, en périphérie et de cloud public.

Explorer IBM Cloud Satellite
IBM Cloud Code Engine

Exécutez des images de conteneurs, des travaux par lots ou du code source en tant que charges de travail sans serveur, sans avoir à dimensionner, déployer, mettre en réseau ou mettre à l'échelle.

Explorer IBM Cloud Code Engine
Ressources Conteneurs dans l'entreprise

Une étude d'IBM montre que l'adoption des conteneurs et de Kubernetes est en plein essor.

Qu'est-ce que Docker ?

Docker est une plateforme à code source ouvert qui permet de créer, de déployer et de gérer des applications conteneurisées.

Que sont les microservices ?

Dans une architecture de microservices, chaque application est composée de nombreux petits services faiblement couplés et pouvant être déployés de manière indépendante.

Pour aller plus loin

Avec Red Hat OpenShift on IBM Cloud, les développeurs OpenShift disposent d'un moyen rapide et sécurisé de conteneuriser et de déployer des charges de travail d'entreprise dans des grappes Kubernetes.Déchargez-vous des tâches fastidieuses et répétitives qui impliquent de gérer la sécurité, la conformité, le déploiement et le cycle de vie.Comme IBM gère OpenShift Container Platform (OCP), vous disposerez de plus de temps pour vous concentrer sur votre cœur de métier.

Explorer Red Hat OpenShift on IBM Cloud