Différences entre conteneurs et VM

Docker isole un environnement comme une VM ?

Maintenant que l'on sait pourquoi Docker a été développé. Nous allons voir comment cela fonctionne sous le capot.

Docker n'est pas fait pour isoler les applications les unes des autres à la manière d'une VM. L'élément clé ici pour bien comprendre est la manière dont un conteneur s'exécute sur le serveur.

Une machine virtuelle, comment son nom l'indique, va simuler (virtualiser) une machine entière. C'est à dire simuler le matériel de la machine sur lequel sera exécuté un système d'exploitation complet (une distribution GNU/Linux, un Windows ou une version de Mac OS). Il n'y aura pas de réelle interaction avec le système hôte, qui se contentera de simuler un autre serveur, plus petit.

Dans le cas de Docker, l'hôte va mettre à disposition ses ressources pour le conteneur, mais celui-ci va directement utiliser des ressources de l'hôte (CPU, RAM, network, etc.). Le conteneur aura un environnement isolé et dédié (avec potentiellement des limitations en ressources), mais ne va pas simuler la totalité d'un serveur ni exécuter un système d'exploitation (et ses nombreux processus).

Avec Docker, il est commun d'imaginer un conteneur par fonctionnalité : base de donnée, service web, gestion des logs, etc. l'ensemble fonctionnant et communiquant ensemble.

Finalement, Docker se présente comme une alternative plus légère que la mise en place de VM. Vous trouverez ci-dessous deux images illustrant leur mode de fonctionnement de base.

Virtual MachineInformations[1]

Comme on peut le voir sur ce schéma, dans le cadre d'une machine virtuelle classique, chaque VM possède son propre système d'exploitation (Guest OS) contenant lui-même des bibliothèques (bin/lib) qui sont répliquées pour chacune des machines virtuelles.

De fait, les machines virtuelles sont lourdes ; ajoutons à cela le fait qu'elles doivent simuler tous les composants physiques d"une machine. Toute cette architecture de virtualisation consomme beaucoup de ressources pour fonctionner.

ContainerInformations[2]

Ce schéma nous donne une bonne idée du principal avantage de Docker. Il n'est pas nécessaire de disposer d'un système d'exploitation complet chaque fois que nous devons créer un nouveau conteneur, ce qui réduit la taille globale des conteneurs.

Docker utilise le noyau Linux du système d'exploitation hôte (car presque toutes les versions de Linux utilisent les modèles de noyau standard) pour le système d'exploitation sur lequel il a été créé, telle que Debian, Ubuntu ou CentOS. Pour cette raison, vous pouvez utiliser presque n'importe quel système d'exploitation Linux en tant que système d'exploitation. Il est ainsi possible d'avoir un conteneur CentOS sur une machine Debian.

Un autre avantage de Docker est la taille des images lors de leur création. Ils ne contiennent pas le noyau. Cela les rend incroyablement petits, compacts et faciles à déployer.