VM ou Docker?

Comment comprendre que vous avez besoin d'un Docker, pas d'une VM? Essayons de comprendre les principales différences entre l'isolement des machines virtuelles (VM) et les conteneurs Docker, s'ils peuvent être interchangeables et comment nous pouvons les utiliser.


Quelle est donc la différence entre les conteneurs Docker et la VM?
Une machine virtuelle (VM) est un ordinateur virtuel avec tous les périphériques virtuels et un disque dur virtuel, sur lequel un nouveau système d'exploitation indépendant (système d'exploitation invité) est installé avec les pilotes de périphériques virtuels, la gestion de la mémoire et d'autres composants. Autrement dit, nous obtenons une abstraction d'équipement physique qui vous permet d'exécuter de nombreux ordinateurs virtuels sur un seul ordinateur. L'équipement virtuel est affiché dans les propriétés du système et les applications installées interagissent avec lui comme si elles étaient réelles. Dans le même temps, la machine virtuelle elle-même est complètement isolée du vrai ordinateur, bien qu'elle puisse avoir accès à son disque et à ses périphériques.
Une machine virtuelle installée peut occuper de l'espace sur un disque d'ordinateur de différentes manières:


  • espace fixe sur le disque dur, qui permet un accès plus rapide au disque dur virtuel et évite la fragmentation des fichiers;
  • allocation dynamique de mémoire. Lors de l'installation d'applications supplémentaires, la mémoire leur sera allouée dynamiquement jusqu'à ce qu'elle atteigne le montant maximal qui lui est alloué.

Lorsque vous utilisez une machine virtuelle, il y a des coûts supplémentaires pour émuler un équipement virtuel et lancer un système d'exploitation invité, prendre en charge et administrer l'environnement nécessaire au fonctionnement de votre application. De plus, lorsque vous déployez un grand nombre de machines virtuelles sur le serveur, la quantité d'espace qu'elles occupent sur le disque dur ne fera qu'augmenter, car chaque machine virtuelle nécessite de l'espace, au moins pour le système d'exploitation invité et les pilotes pour les périphériques virtuels.


Docker est un logiciel de création d'applications basées sur des conteneurs. Les conteneurs et les machines virtuelles résolvent un problème, mais ils le font différemment. Les conteneurs prennent moins de place car Réutilisez plus de ressources partagées du système hôte que la machine virtuelle contrairement à VM, il fournit la virtualisation au niveau du système d'exploitation, pas le matériel. Cette approche offre moins d'espace sur le disque dur, un déploiement plus rapide et une mise à l'échelle plus facile.


Le conteneur Docker fournit un mécanisme d'encapsulation d'application plus efficace, fournissant les interfaces de système hôte nécessaires. Cette fonctionnalité permet aux conteneurs de diviser le cœur du système, où chaque conteneur fonctionne comme un processus distinct du système d'exploitation principal, qui possède son propre espace d'adressage virtuel, de sorte que les données appartenant à différentes zones de mémoire ne peuvent pas être modifiées.


Docker est la technologie la plus courante pour utiliser des conteneurs dans l'application. Il est devenu la norme dans ce domaine, s'appuyant sur les cgroups et l'espace de noms fournis par le noyau Linux. Le système d'exploitation natif pour Docker est Linux, donc le lancement des conteneurs Docker sur Windows aura lieu à l'intérieur d'une machine virtuelle Linux.


De quoi est fait le contenant?


Une image est l'élément principal à partir duquel les conteneurs sont créés. L'image est créée à partir du Dockerfile ajouté au projet et est un ensemble de systèmes de fichiers (couches) superposés et regroupés, en lecture seule; le nombre maximum de couches est 127.


Au cœur de chaque image se trouve une image de base, qui est indiquée par la commande FROM - le point d'entrée pour la formation de l'image Dockerfile. Chaque couche est une couche en lecture seule et est représentée par une commande modifiant le système de fichiers écrit dans le Dockerfile. Cette approche permet à différents fichiers et répertoires de différentes couches de fichiers de se chevaucher de manière transparente, créant ainsi un système de fichiers intégré en cascade. Les couches contiennent des métadonnées, vous permettant d'enregistrer des informations connexes sur chaque couche au moment de l'exécution et de la génération. Chaque calque contient un lien vers le calque suivant.Si le calque n'a pas de lien, il s'agit du calque le plus haut de l'image.
À partir de la version Docker EE 06.17.02-ee5 et du moteur Docker - Communauté, Overlay2 ou Overlay est utilisé, et les versions antérieures utilisent AuFS (Advanced multi layerayer Union file system).


Conteneur - comment ça marche?


Un conteneur est une abstraction au niveau de l'application qui combine du code et des dépendances. Les conteneurs sont toujours créés à partir d'images, en ajoutant une couche supérieure inscriptible et en initialisant divers paramètres. Étant donné que le conteneur a sa propre couche d'enregistrement et que toutes les modifications sont enregistrées dans cette couche, plusieurs conteneurs peuvent partager l'accès à la même image. Chaque conteneur peut être configuré via un fichier dans le projet docker-compose.yml, définissant divers paramètres, tels que le nom du conteneur, les ports, les identifiants, les dépendances entre les autres conteneurs. Si vous ne spécifiez pas de nom de conteneur dans les paramètres, Docker créera un nouveau conteneur à chaque fois, en lui attribuant un nom au hasard.


Lorsque le conteneur démarre à partir de l'image, Docker monte le système de fichiers pour la lecture et l'écriture sur les couches ci-dessous. C'est là que tous les processus seront exécutés. Lorsque vous démarrez le conteneur pour la première fois, la couche de lecture-écriture initiale est vide. Lorsque des changements se produisent, ils s'appliquent à cette couche; par exemple, si vous souhaitez modifier un fichier, ce fichier sera copié de la couche inférieure en lecture seule vers la couche de lecture et d'écriture. Une version en lecture seule du fichier existera toujours, mais elle est désormais masquée sous la copie.


Comment fonctionne un système de fichiers fédéré en cascade?


Un système de fichiers intégré en cascade (FS) implémente un mécanisme de copie par copie (COW). L'unité de travail est une couche, chaque couche doit être considérée comme un système de fichiers à part entière avec une hiérarchie de répertoires à partir de la racine elle-même. Cette approche utilise le montage unifié de systèmes de fichiers, permettant, de manière transparente pour l'utilisateur, de combiner des fichiers et des répertoires de divers systèmes de fichiers (appelés branches) en un seul système de fichiers connecté. Le contenu des répertoires avec les mêmes chemins sera affiché ensemble dans un répertoire combiné (dans un seul espace de noms) du système de fichiers résultant.


Les couches sont fusionnées selon les principes suivants:


  • l'une des couches devient une couche du niveau supérieur, la deuxième couche et les couches suivantes deviennent des couches du niveau inférieur;
  • les objets de calque sont accessibles à l'utilisateur «de haut en bas» si l'objet demandé se trouve dans le calque «supérieur», il est renvoyé, quelle que soit la présence d'un objet portant ce nom dans le calque «inférieur»; sinon, l'objet de la couche "inférieure" est retourné; si l'objet demandé n'est pas là, là ou là, l'erreur «Aucun fichier ou répertoire» est renvoyée;
  • la couche de travail est «supérieure», c'est-à-dire que toutes les actions de l'utilisateur pour modifier les données sont reflétées uniquement sur la couche de niveau supérieur, sans affecter le contenu des couches de niveau inférieur.

Conclusion


Si vous avez besoin de virtualiser un système avec des ressources dédiées et du matériel virtuel garantis, vous devez choisir une machine virtuelle. Ce qui donne l'utilisation de VM:


  • la possibilité d'installer plusieurs systèmes d'exploitation différents sur un même ordinateur;
  • distribution des ressources système entre les machines virtuelles;
  • pas besoin de redémarrer pour basculer entre les systèmes d'exploitation;
  • la possibilité de prendre un «instantané» de l'état actuel du système et du contenu des disques pour ramener le système à son état d'origine;
  • isolation des défauts et violations du système de sécurité au niveau matériel;
  • la possibilité de simuler un réseau informatique sur un ordinateur.

Si vous souhaitez isoler les applications en cours d'exécution en tant que processus distincts, Docker vous convient. Ce qui donne l'utilisation de Docker:


  • fournit la virtualisation au niveau du système d'exploitation;
  • les conteneurs partagent le cœur du système, fonctionnant comme un processus distinct du système d'exploitation principal;
  • la consommation des ressources système, telles que la consommation de mémoire et la charge CPU, peut être limitée séparément pour chaque conteneur à l'aide de groupes de contrôle;
  • FS pour les conteneurs est créé à l'aide du mécanisme COW, qui permet d'accélérer le déploiement des applications, de réduire la consommation de mémoire et d'économiser de l'espace disque;
  • le système de fichiers modifié d'un conteneur peut être utilisé comme base pour la formation de nouvelles images de base d'autres conteneurs.

Source: https://habr.com/ru/post/fr474068/


All Articles