Published Date: February 1, 2021
Un conteneur est un système permettant de rendre un logiciel modulaire, portable et standardisé afin qu’il puisse être facilement déployé sur n’importe quel environnement informatique. Les conteneurs sont conçus pour contenir le code d’une application ainsi que toutes ses dépendances, de manière à ce que tous les éléments nécessaires pour exécuter l’application se trouvent à un seul endroit.
Au cours des dernières années, les conteneurs sont devenus un outil de développement logiciel populaire, notamment en raison de leur légèreté : le conteneur typique est très petit et ne pèse que quelques mégaoctets. Il peut ainsi être chargé et déchargé très rapidement, ce qui lui donne de puissants atouts en termes de fonctionnalités, de performances, de portabilité et de facilité de gestion.
Les conteneurs jouent un rôle clé dans le développement et le déploiement de microservices, une approche qui simplifie les applications et leur développement en les décomposant en modules compacts qui n’exécutent qu’une seule fonction. Leur impact est déjà tangible : IDC a prédit que d’ici 2021, plus de 95 % des nouveaux microservices seront déployés dans des conteneurs, un marché qui vaut maintenant des milliards.
Les principaux fournisseurs de technologies cloud, notamment Microsoft, Google et Amazon AWS, ont adopté les conteneurs grâce à des outils populaires tels que Docker et Kubernetes, qui ont permis de rationaliser leur développement et leur déploiement pour les clients.
Dans les sections suivantes, nous allons détailler le fonctionnement des conteneurs et discuter des principales plateformes sur lesquelles ils fonctionnent.
Quelle est la différence entre un conteneur et une machine virtuelle ?
Les conteneurs et les machines virtuelles sont liés au concept de virtualisation, mais ils se distinguent par la profondeur de cette virtualisation. La plus grande différence est qu’une machine virtuelle contient une version virtualisée du système d’exploitation, mais aussi l’application et ses dépendances. Une machine virtuelle peut ainsi peser plusieurs gigaoctets (contre quelques mégaoctets seulement pour un conteneur typique) mais elles ont toujours leur utilité. Un même serveur peut exécuter plusieurs machines virtuelles en même temps, chacune ayant son propre système d’exploitation. Une entreprise peut exploiter simultanément des serveurs Windows, Unix et Linux sur le même matériel, par exemple.
Ce n’est pas le cas des conteneurs, car tous ceux qui s’exécutent sur un appareil partagent un même système d’exploitation. Les conteneurs sont donc mieux adaptés à un environnement qui ne nécessite pas plusieurs systèmes d’exploitation.
Quels sont les avantages des conteneurs par rapport aux machines virtuelles ?
Si on les compare aux machines virtuelles, les conteneurs sont :
- plus petits ;
- plus rapides à lancer ;
- plus faciles à entretenir ;
- plus portables.
Leur plus petite taille explique ce qui est sans doute le plus grand avantage du conteneur : la vitesse. Le lancement d’une machine virtuelle classique peut prendre plusieurs minutes, tandis qu’un conteneur démarre souvent en quelques secondes. Avec les conteneurs, le processus de lancement simultané de plusieurs dizaines d’applications est quasiment négligeable. Dans le cas de machines virtuelles, le même processus peut prendre une heure ou plus, et impliquer plusieurs éléments matériels.
Le système d’exploitation d’une machine virtuelle étant intégré, sa gestion peut être complexe et demande du temps. Les administrateurs de centres de données doivent maintenir les systèmes d’exploitation hôtes, dont la diversité nécessite potentiellement des outils et une expertise différents. Il peut être difficile de garder une trace de tout dans un environnement complexe de machines virtuelles, VMware ou autre, mais les conteneurs peuvent simplifier la tâche en vous permettant de gérer un seul environnement de système d’exploitation.
Enfin, les machines virtuelles sont difficiles à déplacer entre le cloud (public ou privé) et les environnements locaux avec serveurs physiques. À l’inverse, les conteneurs sont plus faciles à développer dans un environnement puis à déployer dans un autre.
Les conteneurs sont-ils sûrs ?
Les conteneurs ne sont pas intrinsèquement plus ou moins sécurisés que les environnements non conteneurisés, mais ils introduisent de nouveaux défis de sécurité. Cela est dû en grande partie à la nouvelle forme de complexité que présente le conteneur typique. Comme les images de conteneur incluent des bibliothèques système et d’autres fichiers et systèmes de fichiers dépendants, les vulnérabilités sont monnaie courante. Une analyse portant sur 1 000 des conteneurs Docker les plus populaires a révélé qu’ils présentaient tous une variété de vulnérabilités de sécurité, dont beaucoup étaient critiques. Les conteneurs ont ainsi acquis une réputation d’insécurité.
En réalité, même si les conteneurs ne présentent pas fondamentalement des problèmes de sécurité, vous devez les développer et les gérer dans le même souci de sécurité que tout autre environnement informatique.
Les conteneurs sont-ils plus sécurisés que les VM ?
La sécurité des machines virtuelles et des conteneurs dépend de nombreux facteurs, notamment de la manière dont vous gérez les technologies. Dans la mesure où la sécurité n’est pas une métrique facilement quantifiable ou mesurable, il est impossible de comparer directement les deux technologies.
Lorsqu’ils sont correctement développés et gérés, les conteneurs peuvent être des environnements très sûrs. Comme indiqué dans la section ci-dessus, les conteneurs sont plus complexes que les machines virtuelles et, si ces dernières fonctionnent de manière strictement isolée, les conteneurs peuvent parfois interagir de manière inattendue les uns avec les autres, ce qui peut aggraver les problèmes de sécurité. Vous devez également tenir compte de la sécurité du système d’exploitation hôte du conteneur. Un conteneur sécurisé exécuté sur une plateforme hôte non sécurisée présente autant de risques qu’un conteneur non sécurisé.
Qu’est-ce qu’un conteneur cloud ?
Un conteneur cloud s’exécute sur un service natif du cloud, par opposition à un environnement local. Les conteneurs fonctionnent dans les deux types d’environnement, mais un écosystème natif du cloud offre généralement plus de flexibilité et permet aux équipes de configurer et d’exploiter les conteneurs avec moins de frais que dans un environnement local. De nombreux fournisseurs de services cloud incluent également des outils de supervision web qui facilitent le suivi des opérations des conteneurs, du développement des applications et des performances.
Que sont les conteneurs en tant que service ?
Les conteneurs en tant que service, ou CaaS, sont un modèle d’exploitation conceptuel qui permet à une entreprise d’engager un fournisseur de services cloud pour créer et gérer des conteneurs. Il s’apparente à d’autres modèles « en tant que service », comme le logiciel en tant que service ou la plateforme en tant que service, selon lesquels des composants logiciels réutilisables sont lancés à la demande en temps réel. Dans un environnement CaaS, un fournisseur de services propose une infrastructure cloud-native complète dans laquelle vous pouvez exploiter des conteneurs et leurs composants associés. Les fournisseurs de CaaS proposent généralement également des outils de supervision afin que les clients bénéficient d’une meilleure visibilité sur leurs opérations de conteneurs.
Le principal avantage d’un modèle de conteneurs en tant que service est qu’il simplifie et accélère la création et le déploiement de conteneurs. Étant donné que le fournisseur de services prend en charge la gestion des conteneurs, le client peut se concentrer sur le contenu des conteneurs eux-mêmes, qui exerce un impact plus direct sur les résultats de l’entreprise.
Qu’est-ce que la supervision des conteneurs ?
Vous devez superviser les conteneurs pour vous assurer qu’ils fonctionnent comme prévu. Par rapport aux logiciels développés de manière traditionnelle, les conteneurs créent plusieurs couches d’abstraction entre l’application et la plateforme sous-jacente. Il faut donc des outils spécialement conçus, et il est rarement possible d’exercer une supervision conventionnelle pour les professionnels DevOps. Les environnements de conteneurs sont souvent déployés à grande échelle, ce qui rend une approche traditionnelle de la supervision plus difficile encore. Pour obtenir de bons résultats, vous avez besoin d’un système de visualisation sophistiqué permettant de superviser les conteneurs à la fois individuellement et globalement. Ce type de système de supervision permet aux développeurs et aux professionnels DevOps de localiser les problèmes et de déceler des tendances de performances et d’activité qui autrement leur échapperaient dans leur écosystème de conteneurs.
Qu’est-ce qu’un conteneur Linux ?
Les conteneurs Linux sont des technologies open source, fournies par Red Hat et d’autres fournisseurs, qui permettent aux développeurs de packager et d’isoler des applications de l’ensemble de l’environnement d’exécution du conteneur. Comme ils incluent tous les fichiers nécessaires à leur exécution, l’application contenue peut être déplacée en toute transparence d’un environnement à l’autre : tests, développement et production. Cette portabilité rend les conteneurs Linux beaucoup plus rapides et efficaces que les pipelines de développement traditionnels qui reposent sur la réplication des environnements de test. Grâce à cela, vous pouvez utiliser les conteneurs Linux pour résoudre un large éventail de problèmes lorsque la portabilité, la configuration et l’isolement sont des critères. Grâce à leur simplicité d’utilisation, ils sont également devenus essentiels à de nombreuses initiatives de sécurité informatique.
Il existe de nombreuses implémentations de conteneurs Linux, qui sont basées sur des mécanismes fournis par le noyau Linux, en particulier les espaces de noms et les groupes de contrôle Linux. Citons notamment :
- Docker ;
- Linux-VServer ;
- Imctfy ;
- LXC ;
- LXD ;
- OpenVZ ;
- Rkt ;
- Singularity ;
- systemd-nspawn ;
- Podman ;
- Charliecloud ;
- Kata Containers ;
- Bottlerocket.
Qu’est-ce que Docker ?
Développé en 2013, Docker est la plateforme de conteneurs standard de l’industrie pour la création, le déploiement et la gestion d’applications basées sur des conteneurs. Elle facilite l’utilisation des conteneurs tout au long du cycle de développement. Docker Engine vous permet de créer un environnement conteneurisé ; il gère l’interaction avec le système d’exploitation ou la machine virtuelle sur laquelle les conteneurs s’exécutent. Docker Desktop comprend des outils permettant de développer des conteneurs et des images Docker, qui sont des applications qui exécutent le code du conteneur.
Docker est-il un microservice ?
Docker en soi n’est pas un microservice, mais il vous permet de créer et d’exploiter des microservices, qui sont un sous-composant essentiel des conteneurs. On peut également envisager les choses comme ceci : les microservices sont généralement intégrés dans des conteneurs, et les conteneurs encapsulent l’infrastructure requise.
Qu’est-ce que Kubernetes ?
Kubernetes est un système open source très répandu pour la gestion des conteneurs, également désigné sous le nom de plateforme d’orchestration de conteneurs. Il est utilisé pour planifier, gérer et faire évoluer des conteneurs. Kubernetes offre des fonctionnalités permettant de déployer des conteneurs sur des hôtes spécifiques, d’équilibrer la charge des conteneurs lorsque le trafic devient important, de redémarrer les conteneurs en cas de défaillance et de restaurer automatiquement le code en cas d’incident majeur.
Dans la plupart des environnements, les plateformes Docker et Kubernetes coexistent. Kubernetes s’appuie généralement sur Docker pour packager et exécuter des conteneurs : Docker est l’outil qui crée les conteneurs et Kubernetes la plateforme qui les orchestre en tant que groupe. Kubernetes a gagné en popularité, supplantant de plus en plus les outils d’orchestration de Docker, car il excelle particulièrement dans deux domaines : gérer efficacement l’évolutivité d’un grand nombre de conteneurs et assurer une haute disponibilité pendant le fonctionnement.
Kubernetes est-il un microservice ?
Comme Docker, Kubernetes n’est pas un microservice, mais il joue un rôle déterminant dans l’orchestration des conteneurs contenant des microservices.
Que sont les conteneurs Azure ?
Azure est le service de cloud computing de Microsoft, et les conteneurs Azure sont des instances de conteneur qui s’exécutent sur la plateforme Microsoft. Le système de conteneur le plus simple de Microsoft est Azure Container Instances (ACI), qui est conçu pour permettre aux utilisateurs d’exécuter des images de conteneur Docker à la demande dans un environnement géré serverless. Microsoft présente Azure Container Instances comme le moyen le plus rapide et le plus simple de déployer des conteneurs dans Azure lorsqu’aucune orchestration n’est requise. Vous pouvez utiliser le service Azure Kubernetes (AKS), plus complet, pour les applications complexes qui nécessitent plusieurs conteneurs, une évolutivité et des mises à niveau coordonnées.
Qu’est-ce qu’Amazon ECR ?
Comme Microsoft, Amazon propose plusieurs offres orientées conteneurs, dont la plus simple est Amazon Elastic Container Registry (ECR), un système Docker géré qui offre aux développeurs un environnement pour stocker, déployer et gérer leurs images Docker. Les images des conteneurs sont stockées dans l’infrastructure de stockage S3 d’Amazon et les données sont automatiquement chiffrées et sauvegardées dans plusieurs emplacements. ECR prend également en charge la gestion des identités et des accès dans les environnements de développement plus complexes. Amazon ECR est conçu par défaut pour s’intégrer à Amazon ECS, dont nous parlerons dans la section suivante.
Qu’est-ce qu’Amazon ECS ?
Amazon Elastic Container Service (ECS) est un système d’orchestration similaire à Kubernetes, si ce n’est qu’il s’agit d’un système propriétaire exclusif d’Amazon. Si Amazon ECR est utilisé pour stocker, chiffrer et gérer les images de conteneur, Amazon ECS sert à exécuter ces applications conteneurisées. Amazon a développé ECS pour s’intégrer étroitement avec d’autres services AWS et il est généralement considéré comme plus simple et moins cher à utiliser qu’Amazon EKS (voir ci-dessous). ECS est souvent l’option naturelle d’orchestration de conteneurs pour les utilisateurs AWS de longue date qui ont déjà construit leurs propres fonctions d’évolutivité et qui ne craignent pas d’être attachés à une plateforme propriétaire.
Qu’est-ce qu’Amazon EKS ?
Amazon Elastic Kubernetes Service (EKS) est l’offre Kubernetes basée sur le cloud d’Amazon pour l’orchestration de conteneurs. Elle est similaire à ECS, mais plutôt que d’utiliser le service propriétaire d’Amazon, les utilisateurs d’EKS ont un accès complet à une plateforme Kubernetes open source, qui s’exécute sur leurs propres serveurs ou sur un autre service cloud. De nombreux clients Amazon ont adopté EKS pour éviter toute dépendance vis-à-vis d’un fournisseur, ce qui les empêcherait de migrer leurs conteneurs vers d’autres services. EKS offre également des fonctionnalités plus sophistiquées qu’ECS, dont la prise en charge d’un nombre considérablement plus élevé d’images de conteneurs, mais ces fonctionnalités sont plus coûteuses et leur gestion, leur configuration et leur sécurisation demande davantage d’efforts.
Les utilisateurs qui envisagent Amazon EKS et ECS devront faire un choix, les deux étant incompatibles.
Qu’est-ce qu’AWS Fargate ?
AWS Fargate est un moteur de calcul serverless pour les conteneurs, un véritable système de conteneurs en tant que service qui permet de déployer des conteneurs sans tenir compte de la plateforme de serveur sous-jacente. Il fonctionne à la fois avec Amazon ECS et Amazon EKS et évite à l’utilisateur d’avoir à provisionner et gérer des serveurs dans ces environnements. Fargate propose en effet un système de facturation basé sur la consommation de ressources de serveur, permettant aux utilisateurs de faire évoluer leur environnement de conteneur de manière transparente. En fait, Fargate est conçu pour éliminer complètement les impératifs de gestion de serveur, qui englobent l’application de correctifs, l’évolutivité et le dimensionnement des machines. En d’autres termes, il transforme vos machines virtuelles en un pool de ressources monolithique que vous pouvez utiliser sans avoir à vous soucier de la gestion des capacités ni d’aucun autre problème côté serveur.
Qu’est-ce qu’Amazon EC2 ?
Amazon Elastic Compute Cloud (EC2), une alternative plus courante à Fargate, est un modèle populaire basé sur le cloud pour exécuter des conteneurs et d’autres applications sur AWS. Il serait plus précis de décrire EC2 comme une infrastructure en tant que service car il ne s’articule pas spécifiquement autour de la fourniture de services de conteneur (bien qu’il soit couramment utilisé de cette façon). EC2, qui existe depuis plus de 14 ans, est connu pour sa base d’utilisateurs massive, y compris le propre site web de vente au détail d’Amazon, qui a été migré vers EC2 en 2010. Comme c’est l’une des plateformes de cloud computing les plus répandues et les plus matures du secteur, les cas d’utilisation d’EC2 sont extrêmement variés. Pour cette raison, elle se prête naturellement à l’exploitation de tout type ou presque de conteneur ou d’environnement de machine virtuelle.
Qu’est-ce qu’AWS App2Container ?
AWS App2Container (parfois abrévié A2C) est un outil conçu pour permettre aux développeurs de conteneuriser des applications existantes et de les préparer pour une utilisation avec les services de conteneur basés sur le cloud d’Amazon. L’objectif d’App2Container est d’aider les utilisateurs à abandonner les applicatifs traditionnels, monolithiques et basés sur serveurs sans avoir à réécrire l’intégralité de leur code. App2Container est un outil en ligne de commande qui automatise cette conversion (également appelée refactorisation), et fonctionne avec les applications .Net et Java. A2C est disponible gratuitement pour les utilisateurs d’AWS.
Qu’est-ce qu’AWS Copilot ?
AWS Copilot est un outil en ligne de commande qui permet aux utilisateurs d’AWS de lancer et de gérer leurs applications conteneurisées sur les plateformes ECS et Fargate. Il leur donne la possibilité d’automatiser la création de leur infrastructure de conteneurs et de ses dépendances lors du lancement d’une application conteneurisée. L’utilisateur de Copilot crée du code qui définit une série d’actions pour déployer un environnement de production et lancer des conteneurs sur AWS, et l’outil gère les détails tels que l’équilibrage de charge, le stockage de données avec état et d’autres composants en arrière-plan.
Le passage des logiciels et machines virtuelles traditionnels aux conteneurs est bien entamé. Grand View Research a évalué le marché des conteneurs à 1,5 milliard de dollars en 2018 et estimé que l’industrie connaîtrait un taux de croissance de 26,5 % jusqu’à 2025. Allied Market Research anticipe un taux de croissance plus agressif encore à 31,8 % sur la même période, et s’attend à ce que la technologie des conteneurs atteigne une valeur de 8,2 milliards de dollars d’ici 2025.
Si votre architecture d’application n’est pas encore passée aux conteneurs, vous avez tout intérêt à le faire rapidement. Fort heureusement, les fournisseurs de services cloud aident activement leurs clients à franchir cette étape en proposant des outils et des didacticiels qui facilitent le développement, le déploiement et la conversion des conteneurs. La technologie des conteneurs ne supplantera peut-être jamais complètement les machines virtuelles, mais chaque entreprise devra investir dans cette nouvelle technologie dans un avenir proche pour optimiser son environnement et conserver un avantage compétitif.
Les 5 pratiques fondamentales du DevOps
Qu’est-ce qui distingue les équipes DevOps performantes de celles qui échouent ? Ces 5 pratiques fondamentales.