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.

Ian Buchanan Ian Buchanan

Les conteneurs et les VM 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 VM ? Les VM virtualisent une machine entière 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 de code tiers externes 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 environnements de conteneurs 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

  • 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
    LXC est l'un des composants d'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 système d'exécution de conteneurs open source neutre.
  • CRI-O
    CRI-O est une norme de système d'exécution de conteneurs open source émergente développée en collaboration par de nombreuses entreprises. La spécification CRI-O est optimisée pour le système de gestion de conteneurs Kubernetes.

Qu'est-ce qu'une machine virtuelle (VM) ?

Les VM 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 VM 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 que les VM sont à l'abri de tout exploit ou interférence d'autres VM sur un hôte partagé. Une VM individuelle peut toujours être piratée par un exploit, mais la VM exploitée sera isolée et ne pourra pas contaminer des VM 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 est spécifiée pour une machine virtuelle, elle peut alors être traitée comme un ordinateur de base. Il est possible d'installer manuellement des logiciels sur la VM et de prendre un instantané de la VM pour capturer l'état actuel de la configuration. Les instantanés de la VM peuvent être utilisés pour restaurer la VM à ce moment précis ou pour lancer d'autres VM avec cette configuration.

Défis

  • Vitesse d'itération
    Le développement et la régénération de VM est chronophage, car elles englobent un système complet. Toute modification d'un instantané de VM peut prendre un temps considérable avant qu'il soit régénéré et qu'il 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 VM.

Fournisseurs de VM 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 VM les plus populaires et les mieux établies, avec un écosystème d'outils supplémentaires permettant de développer et de distribuer des images VM.
  • 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 VM. L'entreprise dispose d'une interface utilisateur robuste pour la gestion des VM. C'est une excellente option de VM d'entreprise offrant un support.
  • QEMU
    QEMU est l'option de VM 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 VM 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 VM. La plupart des autres exigences « logicielles uniquement » peuvent être respectées en utilisant des conteneurs.

Comment pouvez-vous utiliser les conteneurs et les VM conjointement ?

Il est tout à fait possible d'utiliser les conteneurs et les VM à l'unisson, même si les cas d'usage pratiques peuvent être limités. Il est possible de créer une VM qui émule une configuration matérielle unique. Un système d'exploitation peut alors être installé sur le matériel de cette VM. Une fois que la VM est fonctionnelle et initialise le système d'exploitation, une exécution de conteneur peut être installée 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 VM, 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 VM pour vos besoins en virtualisation, la clé est de comprendre vos besoins en ressources ainsi que les compromis que vous êtes prêt à faire.