Close

Conteneurs et machines virtuelles

Découvrez les différences entre les conteneurs et les machines virtuelles (VM), les fournisseurs populaires pour chacun, et comment ils peuvent être utilisés conjointement

Portrait de Ian Buchanan
Ian Buchanan

Principal Solutions Engineer


Les conteneurs et les machines virtuelles sont des technologies de virtualisation des ressources très similaires. La virtualisation est le processus par lequel une ressource singulière du système, telle que la RAM, le processeur, le disque ou le réseau, peut être « virtualisée » et représentée sous forme de ressources multiples. La principale différence entre les conteneurs et les machines virtuelles ? Les machines virtuelles virtualisent toute une machine jusqu'aux couches matérielles, tandis que les conteneurs ne virtualisent que les couches logicielles au-dessus du niveau du système d'exploitation.

Conteneur montrant les différences entre les machines virtuelles et les conteneurs

Qu'est-ce qu'un conteneur ?


Les conteneurs sont des packages logiciels légers qui contiennent toutes les dépendances nécessaires à l'exécution de l'application logicielle contenue. Ces dépendances incluent des éléments tels que les bibliothèques système, les packages externes de code tiers et d'autres applications au niveau du système d'exploitation. Les dépendances incluses dans un conteneur existent dans des niveaux de la stack supérieurs au système d'exploitation.

Avantages

  • Vitesse d'itération
    Comme les conteneurs sont légers et ne comprennent que des logiciels de haut niveau, ils sont très rapides à modifier et à itérer.
  • Écosystème robuste
    La plupart des systèmes d'exécution de conteneurs offrent un dépôt public hébergé de conteneurs préconçus. Ces dépôts de conteneurs contiennent de nombreuses applications logicielles populaires, telles que des bases de données ou des systèmes de messagerie, et peuvent être instantanément téléchargés et exécutés, ce qui permet aux équipes de développement de gagner du temps.

Défis

  • Exploits d'hôtes partagés
    Les conteneurs partagent tous le même système matériel sous-jacent sous la couche du système d'exploitation. Il est possible qu'un exploit dans un conteneur puisse sortir de ce dernier et affecter le matériel partagé. La plupart des container runtimes populaires ont des dépôts publics de conteneurs pré-conçus. L'utilisation d'une de ces images publiques présente un risque pour la sécurité, car elles peuvent contenir des exploits ou être piratées par des acteurs malveillants.

Fournisseurs de conteneurs populaires


Icône de build de code
Contenu connexe

Kubernetes et Docker

Icône de trois cercles
DÉCOUVRIR LA SOLUTION

Gérez vos composants grâce à Compass

  • Docker
    Docker est le système d'exécution le plus populaire et le plus largement utilisé. Docker Hub est un dépôt public géant d'applications logicielles conteneurisées populaires. Les conteneurs sur Docker Hub peuvent être téléchargés et déployés instantanément sur un système d'exécution Docker local.
  • RKT
    Prononcé « rock-it », RKT est un système de conteneurs axé sur la sécurité. Les conteneurs RKT n'autorisent pas les fonctionnalités non sécurisées des conteneurs, à moins que l'utilisateur ne les active explicitement. Ces conteneurs visent à résoudre les problèmes de sécurité sous-jacents d'exploitation par contamination croisée dont souffrent les autres systèmes d'exécution de conteneurs.
  • Conteneurs Linux (LXC)
    Le projet LXC est un système d'exécution de conteneur Linux open source. LXC est utilisé pour isoler les processus du système d'exploitation les uns des autres. Docker utilise réellement LXC dans les coulisses. Les conteneurs Linux cherchent à offrir un container runtime open source neutre.
  • CRI-O
    CRI-O est une implémentation de l'interface CRI (Container Runtime Interface) de Kubernetes qui permet d'utiliser des systèmes d'exécution compatibles avec l'Open Container Initiative (OCI). Il constitue une alternative légère à l'utilisation de Docker comme système d'exécution pour Kubernetes.

Qu'est-ce qu'une machine virtuelle ?


Les machines virtuelles sont des packages logiciels lourds qui fournissent une émulation complète des périphériques matériels de bas niveau comme le processeur, les disques et les périphériques réseau. Les machines virtuelles peuvent également inclure une stack logicielle complémentaire à exécuter sur le matériel émulé. Ces packages matériels et logiciels combinés produisent un instantané entièrement fonctionnel d'un système informatique.

Avantages

  • Sécurité d'isolation complète
    Les machines virtuelles s'exécutent de manière isolée en tant que système totalement autonome. Cela signifie qu'elles sont à l'abri de tout exploit ou de toute interférence d'autres machines virtuelles sur un hôte partagé. Une machine virtuelle individuelle peut toujours être piratée par un exploit, mais la machine virtuelle exploitée sera isolée et ne pourra pas contaminer ses voisines.
  • Développement interactif
    Les conteneurs sont généralement des définitions statiques des dépendances attendues et de la configuration nécessaire à l'exécution du conteneur. Les machines virtuelles sont plus dynamiques et peuvent être développées de manière interactive. Une fois que la définition matérielle de base d'une machine virtuelle est spécifiée, celle-ci peut alors être traitée comme un ordinateur de base. Il est possible d'installer manuellement des logiciels sur la machine virtuelle et d'en prendre un instantané pour capturer l'état actuel de la configuration. Les instantanés de la machine virtuelle peuvent être utilisés pour la restaurer à ce moment précis ou pour lancer d'autres machines virtuelles avec cette configuration.

Défis

  • Vitesse d'itération
    Le développement et la régénération de machines virtuelles est un processus chronophage, car elles englobent un système complet. Toute modification d'un instantané de machine virtuelle peut prendre un temps considérable avant qu'il ne soit régénéré et se comporte comme prévu.
  • Coût de la taille de stockage
    Les machines virtuelles peuvent occuper beaucoup d'espace de stockage. Elles peuvent rapidement atteindre plusieurs gigaoctets en taille. Cela peut entraîner des problèmes de manque d'espace disque sur la machine hôte de la machine virtuelle.

Fournisseurs de machines virtuelles populaires

  • VirtualBox
    VirtualBox est un système d'émulation d'architecture x86 gratuit et open source appartenant à Oracle. Il s'agit de l'une des plateformes de machine virtuelle les plus populaires et les mieux établies, avec un écosystème d'outils supplémentaires permettant de développer et de distribuer des images de machine virtuelle.
  • VMware
    VMware est une société cotée en bourse qui a développé son entreprise sur l'une des premières technologies de virtualisation du matériel x86. VMware est livré avec un hyperviseur qui est un utilitaire permettant de déployer et de gérer plusieurs machines virtuelles. L'entreprise dispose d'une interface utilisateur robuste pour la gestion des machines virtuelles. C'est une excellente option de machine virtuelle d'entreprise offrant un support.
  • QEMU
    QEMU est l'option de machine virtuelle d'émulation matérielle la plus robuste. Elle prend en charge toute architecture matérielle générique. Il s'agit d'un utilitaire en ligne de commande uniquement qui n'offre pas d'interface utilisateur graphique pour la configuration ou l'exécution. Ce compromis fait de QEMU l'une des options de machine virtuelle les plus rapides.

Quelle option est adaptée à vos besoins ?


Si vous avez des exigences matérielles spécifiques pour votre projet, ou si vous développez sur une plateforme matérielle et devez en cibler une autre, comme Windows et macOS, vous devrez utiliser une machine virtuelle. La plupart des autres exigences « logicielles uniquement » peuvent être respectées en utilisant des conteneurs.

Comment utiliser les conteneurs et les machines virtuelles conjointement ?


Il est tout à fait possible d'utiliser les conteneurs et les machines virtuelles à l'unisson, même si les cas d'usage pratiques peuvent être limités. Il est possible de créer une machine virtuelle qui émule une configuration matérielle unique. Un système d'exploitation peut alors être installé sur le matériel de cette machine virtuelle. Une fois que la machine virtuelle est fonctionnelle et initialise le système d'exploitation, un container runtime peut être installé sur le système d'exploitation. À ce stade, nous disposons d'un système informatique fonctionnel grâce à du matériel émulé sur lequel nous pouvons installer des conteneurs.

Une utilisation pratique de cette configuration est l'expérimentation pour les déploiements de systèmes sur puce. Les dispositifs de calcul à système sur puce les plus populaires, comme le Raspberry Pi ou les cartes de développement BeagleBone, peuvent être émulés sous forme de machine virtuelle, afin d'expérimenter l'exécution de conteneurs sur ces dispositifs avant de les tester sur le matériel réel.

Mais la plupart du temps, vos besoins seront probablement satisfaits par l'un des deux. Pour choisir entre les conteneurs et les machines virtuelles pour vos besoins en virtualisation, la clé est de comprendre vos besoins en ressources ainsi que les compromis que vous êtes prêt à faire.

Ian Buchanan
Ian Buchanan

Bien qu'Ian dispose d'une vaste expérience des langages Java et .NET, il est reconnu comme un champion des méthodologies Agile dans les grandes entreprises. Il se concentre actuellement sur l'émergence de la culture DevOps et les outils permettant de renforcer l'intégration continue, la livraison continue et l'analyse des données. Durant sa carrière, il a géré, avec succès, des outils de développement d'entreprise durant toutes les phases du cycle de vie. Il a mené des améliorations des processus à l'échelle de l'entreprise pour accroître la productivité, la qualité et la satisfaction des clients. Il a formé des équipes multinationales qui attachent de l'importance à l'autonomie et à l'organisation personnelle. Lorsqu'il n'est pas en pleine discussion ou programmation, Ian s'adonne à ses passions : les analyseurs, la métaprogrammation et les langages spécifiques d'un domaine. Suivez Ian sous @devpartisan.


Partager cet article

Lectures recommandées

Ajoutez ces ressources à vos favoris pour en savoir plus sur les types d'équipes DevOps, ou pour les mises à jour continues de DevOps chez Atlassian.

Illustration Devops

Communauté Compass

Illustration d'une équipe surmontant des obstacles

Tutoriel : Créer un composant

Illustration d'une carte

Lancez-vous gratuitement avec Compass

Inscrivez-vous à notre newsletter DevOps

Thank you for signing up