Machine virtuelle vs conteneur : couche virtualisée, noyau, démarrage, isolation, usages
Les deux permettent à un seul ordinateur d’exécuter plusieurs applications isolées les unes des autres, mais ils ne virtualisent pas la même couche. Une machine virtuelle repose sur un hyperviseur qui crée du matériel virtuel (processeurs, mémoire, disques, interfaces réseau, etc.), et chaque machine virtuelle exécute par-dessus un système d’exploitation complet, noyau compris. Un conteneur partage le noyau du système d’exploitation hôte et utilise des fonctions du noyau comme les espaces de noms (namespaces) et les cgroups pour séparer ce que les processus peuvent voir et les ressources qu’ils peuvent utiliser. Les conteneurs ne démarrent pas de système d’exploitation : ils sont donc plus légers et démarrent plus vite, tandis que les machines virtuelles l’emportent par la force de l’isolation et la variété des systèmes qu’elles peuvent exécuter. Dans le cloud, on combine généralement les deux, les conteneurs s’exécutant dans des machines virtuelles.
| Critère | Machine virtuelle | Conteneur |
|---|---|---|
| Couche virtualisée | Le matériel : l’hyperviseur crée des processeurs, de la mémoire, des disques et des interfaces réseau virtuels et les attribue | Le système d’exploitation : sur le noyau de l’hôte, on sépare ce que les processus peuvent voir (identifiants de processus, réseau, système de fichiers, etc.) et les ressources qu’ils peuvent utiliser |
| Noyau | Chaque machine virtuelle exécute son propre système d’exploitation (OS invité), avec son propre noyau | Tous les conteneurs partagent le noyau de l’hôte ; les images de conteneur ne contiennent pas de noyau |
| Systèmes pouvant s’exécuter | Y compris un OS d’un autre type que l’hôte (par exemple Windows sur un hôte Linux) | Seulement ce qui fonctionne sur le noyau de l’hôte ; les conteneurs Linux ont besoin d’un noyau Linux |
| Taille de l’image | Contient un OS complet, donc généralement de l’ordre du gigaoctet | Seulement l’application et les bibliothèques dont elle a besoin, donc généralement bien plus petite que celle d’une machine virtuelle |
| Temps de démarrage | Démarre en amorçant un OS : cela prend souvent de quelques dizaines de secondes à quelques minutes | Lance seulement des processus : rapide, généralement opérationnel en quelques secondes |
| Force de l’isolation | Forte : séparation au niveau du matériel, si bien qu’un problème dans un noyau invité atteint rarement les autres machines virtuelles | Plus faible qu’une machine virtuelle : le noyau est partagé, donc l’exploitation d’une vulnérabilité du noyau peut toucher l’hôte et les autres conteneurs |
| Efficacité des ressources | Chaque OS invité consomme sa propre mémoire et son propre temps processeur, donc moins d’instances tiennent sur une machine | Pas de systèmes d’exploitation dupliqués, donc davantage d’instances tiennent dans les mêmes ressources |
| Usages typiques | Faire cohabiter différents types d’OS, consolidation de serveurs, machines virtuelles IaaS, environnements exigeant une isolation forte | Microservices, tests et livraison en CI/CD, exploitation à grande échelle avec Kubernetes, environnements de développement et de production identiques |
Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.