2.1 Machines Virtuelles
Les concepts de la virtualisation sont apparus dans les années 1960, lorsque IBM a développé des machines virtuelles pour ses mainframes. Cela a permis d'utiliser efficacement les ressources des ordinateurs et d'isoler les charges de travail. Depuis, la virtualisation a évolué et est devenue aujourd'hui une partie intégrante des infrastructures IT.
Une machine virtuelle (VM) est une émulation logicielle d'un ordinateur physique
. Elle permet d'exécuter des systèmes d'exploitation et des applications comme s'ils fonctionnaient sur un serveur physique distinct. Les principaux composants d'une VM sont l'hyperviseur, le système d'exploitation invité et les applications.
Un hyperviseur est un logiciel qui gère les machines virtuelles et distribue les ressources entre elles. Il existe deux types d'hyperviseurs :
- Type 1 (bare-metal) : Installé directement sur le matériel. Il offre des performances élevées et des frais généraux minimes. Exemples : VMware ESXi, Microsoft Hyper-V.
- Type 2 (hosted) : Fonctionne au-dessus du système d'exploitation hôte, ce qui le rend plus flexible mais moins performant. Exemples : Oracle VirtualBox, VMware Workstation.
Système d'exploitation invité : chaque machine virtuelle contient un système d'exploitation complet qui fonctionne au-dessus de l'hyperviseur. Cela permet d'utiliser différents systèmes d'exploitation sur un même serveur physique.
Applications : les applications et leurs dépendances sont installées dans le système d'exploitation invité, assurant ainsi l'isolation et l'indépendance.
Avantages:
- Isolation : les machines virtuelles sont complètement isolées, car chaque VM a son propre système d'exploitation et ses ressources. Cela empêche une application d'influencer une autre.
- Compatibilité : les machines virtuelles prennent en charge n'importe quel système d'exploitation, y compris différentes versions d'un même système d'exploitation, ce qui offre une grande flexibilité d'utilisation.
- Sécurité : un niveau élevé d'isolation rend les VM plus sûres — les vulnérabilités d'une VM n'affectent pas facilement les autres.
Inconvénients:
Consommation de ressources : chaque VM nécessite des ressources importantes, car elle contient un système d'exploitation complet. Cela augmente les exigences en mémoire vive et en espace disque.
Démarrage : les machines virtuelles démarrent et s'arrêtent plus lentement en raison du temps nécessaire pour charger et éteindre le système d'exploitation.
Gestion : l'administration de nombreuses VM peut être complexe et chronophage, surtout dans des infrastructures de grande envergure.
2.2 Conteneurs
La containerisation, en tant que concept, existe depuis plusieurs décennies, mais elle est devenue populaire avec l'essor de Docker, apparu en 2013. Docker a simplifié l'utilisation des conteneurs et les a rendus accessibles à la majorité des développeurs et administrateurs systèmes.
Les conteneurs diffèrent des machines virtuelles en ce qu'ils utilisent le noyau du système d'exploitation hôte et assurent une isolation au niveau des processus. Ils permettent de lancer des applications et leurs dépendances dans des environnements isolés, sans avoir besoin d'installer un système d'exploitation distinct.
- Système d'exploitation hôte : les conteneurs utilisent le noyau du système d'exploitation hôte, ce qui permet d'économiser des ressources et de réduire les frais généraux.
- Conteneurs : chaque conteneur contient une application et toutes ses dépendances, mais n'inclut pas de système d'exploitation distinct. L'isolation des conteneurs est assurée par les technologies namespaces et cgroups, qui limitent l'accès aux ressources et séparent les processus.
- Namespaces : un mécanisme du noyau Linux qui crée un environnement isolé pour les processus, en masquant les processus, le système de fichiers, les interfaces réseau et d'autres ressources des autres conteneurs.
- Cgroups : une technologie de gestion des ressources qui permet de contrôler l'utilisation du CPU, de la mémoire, des E/S disque et d'autres ressources par les conteneurs, empêchant leur consommation excessive.
Avantages :
- Légèreté : Les conteneurs consomment moins de ressources, car ils n'ont pas besoin d'un système d'exploitation distinct. Sur un même serveur physique, on peut lancer davantage de conteneurs que de machines virtuelles.
- Démarrage rapide : les conteneurs démarrent et s'arrêtent beaucoup plus rapidement que les machines virtuelles, car il n'est pas nécessaire de charger ou d'éteindre un système d'exploitation.
- Portabilité : les conteneurs se transportent facilement entre différents environnements, car ils contiennent toutes les dépendances nécessaires au fonctionnement des applications. On peut créer des images uniformes qui fonctionneront sur différentes plateformes sans modification.
Inconvénients :
- Isolement : l'isolation des conteneurs est moins stricte par rapport aux machines virtuelles, car ils utilisent un noyau commun de système d'exploitation hôte. Si une application dans un conteneur est compromise, cela peut créer des vulnérabilités potentielles.
- Compatibilité : les conteneurs doivent être compatibles avec le système d'exploitation hôte, ce qui peut limiter leur utilisation dans certains scénarios.
2.3 Comparaison entre Conteneurs et Machines Virtuelles

Consommation des ressources :
- Conteneurs : nécessitent moins de ressources et utilisent la mémoire vive et le processeur de manière plus efficace. Tu peux lancer plus de conteneurs sur un serveur physique, ce qui les rend économiquement avantageux pour le scaling.
- Machines virtuelles : consomment plus de ressources, car elles nécessitent un système d'exploitation complet. Chaque machine virtuelle prend beaucoup de mémoire vive et d'espace disque, limitant leur nombre sur un même serveur.
Vitesse :
- Conteneurs : démarrent et s'arrêtent en quelques secondes, parfaits pour des tâches nécessitant une réaction rapide et du scaling.
- Machines virtuelles : leur démarrage et arrêt prennent plus de temps car le système d'exploitation doit être chargé. Cela peut prendre plusieurs minutes, ce qui limite leur utilisation dans des environnements dynamiques.
Isolation :
- Conteneurs : assurent une isolation au niveau des processus. Le degré d'isolation est inférieur à celui des machines virtuelles mais suffisant pour la plupart des applications. Pas idéaux pour des tâches exigeant une isolation complète et une sécurité maximale.
- Machines virtuelles : offrent une isolation complète au niveau des systèmes d'exploitation. Leur haut niveau de protection en fait le choix optimal pour les applications et données critiques.
Gestion et Scalabilité :
- Conteneurs : faciles à gérer et à scaler grâce à leur légèreté et leur démarrage rapide. Les outils d'orchestration comme Kubernetes simplifient la gestion de grands clusters de conteneurs.
- Machines virtuelles : gestion et scaling plus complexes à cause de leur forte consommation de ressources. L'administration d'un grand nombre de machines virtuelles demande beaucoup d'efforts, surtout dans des environnements dynamiques.
Le choix entre conteneurs et machines virtuelles dépend des tâches spécifiques. Les conteneurs sont optimaux là où il faut un déploiement rapide et un scaling des applications avec un minimum de ressources. Leur portabilité et légèreté les rendent excellents pour l'architecture microservices et le cloud computing.
Les machines virtuelles offrent une meilleure isolation et compatibilité, ce qui les rend optimales pour des applications complexes et critiques nécessitant un haut niveau de sécurité et d'indépendance. Elles sont incontournables pour déployer des applications et infrastructures multiniveaux où un système d'exploitation complet est nécessaire pour chaque charge de travail.
En pratique, beaucoup d'organisations adoptent une approche hybride, utilisant à la fois les conteneurs et les machines virtuelles pour trouver un équilibre optimal entre performance, flexibilité et sécurité.
GO TO FULL VERSION