Les conteneurs sont des unités de logiciel exécutables dans lequel le code d'application est regroupé avec ses bibliothèques et ses dépendances, afin que le code puisse être exécuté n'importe où, que ce soit sur un ordinateur de bureau, dans l'informatique traditionnelle ou dans le cloud.
Pour ce faire, les conteneurs tirent parti d'une forme de virtualisation du système d'exploitation (OS) dans laquelle les fonctions du noyau de l'OS (par exemple, les espaces de noms et les cgroups de Linux, les silos et les objets de travail de Windows) peuvent être exploitées pour isoler les processus et contrôler la quantité de processeur, de mémoire et de disque à laquelle ces processus peuvent avoir accès.
Les conteneurs sont petits, rapides et portables car, contrairement à une machine virtuelle, ils n'ont pas besoin d'inclure un système d'exploitation invité dans chaque instance et peuvent simplement exploiter les fonctions et les ressources du système d'exploitation hôte.
Les conteneurs sont apparus il y a plusieurs décennies avec des versions telles que FreeBSD Jails et AIX Workload Partitions, mais la plupart des développeurs actuels se souviennent de 2013 comme du début de l'ère moderne des conteneurs avec l'introduction de Docker.
Pour mieux comprendre ce qu'est un conteneur, il faut savoir en quoi il diffère d'une machine virtuelle traditionnelle. Dans le cadre de la virtualisation traditionnelle, que ce soit sur site ou dans le cloud, un hyperviseur est utilisé pour virtualiser le matériel physique. Chaque machine virtuelle contient alors un système d'exploitation invité, une copie virtuelle du matériel dont le système d'exploitation a besoin pour fonctionner, ainsi qu'une application et ses bibliothèques et dépendances.
Au lieu de virtualiser le matériel sous-jacent, les conteneurs virtualisent le système d'exploitation (généralement, Linux) de sorte que chaque conteneur contient seulement l'application, ses bibliothèques et ses dépendances. L'absence de système d'exploitation invité explique pourquoi les conteneurs sont si légers et donc, rapides et portables.
Pour un examen plus approfondi de cette comparaison, consultez « Différence entre les conteneurs et les machines virtuelles ».
Le principal avantage des conteneurs, notamment par rapport à une VM, réside dans le niveau d'abstraction qui les rend légers et portables. Principaux avantages des conteneurs :
Légers : les conteneurs partagent le noyau du système d'exploitation de la machine, ce qui évite d'utiliser une instance complète du système d'exploitation par application et permet d'utiliser de petits fichiers de conteneur économes en ressources. Du fait de leur petite taille, notamment par rapport aux machines virtuelles, les conteneurs démarrent rapidement et prennent plus efficacement en charge les applications cloud natives qui sont mises à l'échelle horizontalement.
Portables et indépendants de la plateforme : les conteneurs transportent toutes leurs dépendances, ce qui signifie qu'un logiciel peut être écrit une fois, puis exécuté sans avoir à le reconfigurer sur des ordinateurs portables, dans des environnements informatiques de cloud ou sur site.
Prise en charge du développement et d'architecture modernes : du fait de leur portabilité/cohérence de déploiement entre les plateformes et de leur petite taille, les conteneurs conviennent parfaitement aux modèles de développement et d'applications modernes, tels que DevOps, l'informatique sans serveur et les microservices, qui sont créés en utilisant des déploiements de code réguliers par petits incréments.
Amélioration de l'utilisation : comme les machines virtuelles avant eux, les conteneurs permettent aux développeurs et aux opérateurs d'améliorer l'utilisation de l'UC et de la mémoire des machines physiques. Les conteneurs vont encore plus loin dans la mesure où ils permettent aussi d'utiliser une architecture de microservices, des composants d'application qui peuvent être déployés et mis à l'échelle de manière plus granulaire, une alternative intéressante à la mise à l'échelle verticale d'une application monolithique entière parce qu'un seul composant parvient difficilement à supporter sa charge.
Dans une récente enquête d'IBM (PDF de 1,4 Mo), les développeurs et les responsables informatiques indiquent de nombreux autres avantages des conteneurs.
Télécharger l'intégralité du rapport : Containers in the enterprise (PDF, 1,4 Mo)
Les conteneurs occupent une place toujours plus importante, notamment dans les environnements de cloud. De nombreuses organisations envisagent même de remplacer les machines virtuelles par des conteneurs en tant que plateforme informatique générale pour leurs applications et leurs charges de travail. Mais dans ce cadre très large, il existe des cas d'utilisation spécifiques dans lesquels les conteneurs sont particulièrement utiles.
Les logiciels doivent être conçus et regroupés différemment, afin de tirer parti des conteneurs, un processus communément appelé « conteneurisation ».
Lors de la conteneurisation d'une application, le processus comprend l'empaquetage d'une application avec ses variables d'environnement, ses fichiers de configuration, ses bibliothèques et ses dépendances logicielles. Il en résulte une image de conteneur qui peut être ensuite exécutée sur une plateforme de conteneur.
Orchestration des conteneurs avec Kubernetes
Alors que les entreprises commençaient à adopter les conteneurs, souvent dans le cadre d'architectures modernes et « cloud natives », la simplicité du conteneur individuel a commencé à se heurter à la complexité de la gestion de centaines (voire de milliers) de conteneurs dans un système distribué.
Pour résoudre ce problème, l'orchestration de conteneurs est apparue comme un moyen de gérer de grands volumes de conteneurs tout au long de leur cycle de vie, notamment :
Si de nombreuses plateformes d'orchestration de conteneurs (comme Apache Mesos, Nomad et Docker Swarm) ont été créées, Kubernetes, un projet open-source introduit par Google en 2014, est rapidement devenu la plateforme d'orchestration de conteneurs la plus utilisée sur laquelle repose la standardisation de la majorité du secteur.
Kubernetes permet aux développeurs et aux opérateurs de déclarer l'état souhaité de leur environnement global de conteneurs au moyen de fichiers YAML, puis Kubernetes se charge de tout le travail de traitement pour établir et maintenir cet état, avec des activités telles que le déploiement d'un nombre spécifié d'instances d'une application ou d'une charge de travail donnée, le redémarrage de cette application en cas d'échec, l'équilibrage de la charge, la mise à l'échelle automatique, les déploiements sans interruption de service et bien plus.
Kubernetes est maintenant exploité par la Cloud Native Computing Foundation (CNCF), un groupe du secteur indépendant du fournisseur travaillant sous les auspices de la Linux Foundation.
La vidéo ci-dessous décrit le fonctionnement de Kubernetes :
Alors que les conteneurs continuent sont toujours plus utilisés pour empaqueter et exécuter des applications, l'écosystème des outils et des projets conçus pour accueillir et étendre les cas d'utilisation en production continue de se développer. Outre Kubernetes, deux des projets les plus connus dans l'écosystème des conteneurs sont Istio et Knative.
Istio
Lorsque les développeurs utilisent des conteneurs pour créer et exécuter des architectures de microservices, les problèmes de gestion ne se limitent pas aux considérations relatives au cycle de vie des conteneurs individuels et portent sur la manière dont un grand nombre de petits services, généralement appelés « maillage de services », se connectent et interagissent. Istio a été créé pour permettre aux développeurs de gérer plus facilement les défis associés à la reconnaissance, au trafic, au contrôle, à la sécurité, etc.
Knative
Les architectures sans serveur continuent également de connaître un grand succès, notamment au sein de la communauté cloud native. Knative, par exemple, apporte une valeur substantielle dans sa capacité à déployer des services conteneurisés et des fonctions sans serveur.
Au lieu de s'exécuter en permanence et de répondre en cas de besoin (comme le fait un serveur), une fonction sans serveur peut « passer à l'échelle zéro », ce qui signifie qu'elle ne s'exécute pas si elle n'est pas sollicité. Ce modèle permet d'économiser d'énormes quantités de puissance de calcul lorsqu'il est appliqué à des dizaines de milliers de conteneurs.
Pour en savoir plus sur Knative, regardez la visite ci-dessous :
Red Hat OpenShift on IBM Cloud exploite OpenShift dans les environnements publics et hybrides, afin d'offrir la vitesse, la réactivité à l'évolution du marché, l'évolutivité et la fiabilité.
Avec IBM Cloud Satellite, vous pouvez lancer des services cloud cohérents n'importe où : sur site, à la périphérie et dans les environnements de cloud public.
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.
IBM Cloud Container Registry fournit un registre privé pour gérer vos images et les surveiller à des fins de sécurité.
Une nouvelle étude d'IBM montre que l'adoption des conteneurs et de Kubernetes est en plein essor.
L'orchestration de conteneurs est un composant clé d'une stratégie de cloud hybride ouverte qui permet de générer et de gérer des charges de travail à partir de n'importe où.
Docker est une plateforme open source qui permet de créer, de déployer et de gérer des applications conteneurisées.