Quelle est la différence entre Docker et une machine virtuelle (VM) ?

0
506

Les conteneurs Docker fournissent un service similaire aux machines virtuelles, fournissant un environnement isolé pour l'exécution des applications, mais ils& #8217 ; sont fondamentalement deux technologies différentes. Nous discuterons des différences et de ce qui rend Docker si utile.

Qu'est-ce qui rend Docker si utile ?

L'objectif principal d'une machine virtuelle est de partitionner un gros serveur en morceaux plus petits. L'important est qu'il isole les processus en cours d'exécution sur chaque machine virtuelle. Par exemple, votre fournisseur d'hébergement peut avoir une machine à 32 cœurs et la diviser en huit machines virtuelles à 4 cœurs qu'il vend à différents clients. Cela réduit les coûts pour tout le monde, et ils sont parfaits si vous exécutez de nombreux processus ou avez besoin d'un accès SSH complet au matériel sous-jacent.

Cependant, si vous n'exécutez qu'une seule application, vous utiliserez peut-être plus de ressources que nécessaire. Pour exécuter cette seule application, l'hyperviseur doit lancer un système d'exploitation invité complet, ce qui signifie qu'une machine à 32 cœurs exécute huit copies d'Ubuntu. En plus de cela, vous avez une surcharge de machine virtuelle pour chaque instance.

Docker présente une meilleure Solution. Les conteneurs Docker offrent une isolation sans la surcharge des machines virtuelles. Chaque conteneur s'exécute dans son propre environnement, séparé par des espaces de noms Linux, mais la partie importante est que le code dans les conteneurs s'exécute directement sur la machine. Aucune émulation ou virtualisation n'est impliquée.

Il y a encore un peu de surcharge en raison de la mise en réseau et de l'interfaçage avec le système hôte, mais les applications dans Docker s'exécutent généralement à des vitesses proches de celles du bare-metal, et certainement beaucoup plus rapidement que votre VPS moyen. Vous n'avez pas besoin d'exécuter 8 copies d'Ubuntu, une seule, ce qui rend bon marché l'exécution de plusieurs conteneurs Docker sur un seul hôte. Des services tels que Elastic Container Service d'AWS et Cloud Run de GCP offrent des moyens d'exécuter des conteneurs individuels sans provisionner un serveur sous-jacent.

Publicité

Les conteneurs regroupent toutes les dépendances dont votre application a besoin pour s'exécuter, y compris les bibliothèques et les binaires utilisés par le système d'exploitation. Vous pouvez exécuter un conteneur CentOS sur un serveur Ubuntu ; ils utilisent tous les deux le noyau Linux, et la seule différence réside dans les binaires et les bibliothèques inclus pour le système d'exploitation.

La principale différence avec les conteneurs Docker est que vous n'aurez généralement pas d'accès SSH au conteneur. Cependant, vous n'en avez pas exactement besoin, la configuration est entièrement gérée par le fichier conteneur lui-même, et si vous souhaitez effectuer des mises à jour, vous devrez pousser une nouvelle version du conteneur.

Étant donné que cette configuration se déroule entièrement dans le code, elle vous permet d'utiliser le contrôle de version comme Git pour votre logiciel serveur. Étant donné que votre conteneur est une image unique, il facilite le suivi des différentes versions de votre conteneur. Avec Docker, votre environnement de développement sera exactement le même que votre environnement de production, et aussi le même que l'environnement de développement de tout le monde, allégeant le problème de “il est cassé sur ma machine !’ 8221;

Si vous vouliez ajouter un autre serveur à votre cluster, vous n'auriez pas à vous soucier de reconfigurer ce serveur et de réinstaller toutes les dépendances dont vous avez besoin. Une fois que vous avez créé un conteneur, vous pouvez facilement créer une centaine d'instances de ce conteneur, sans trop de configuration. Cela permet également une mise à l'échelle automatique très simple, ce qui peut vous faire économiser beaucoup d'argent.

Inconvénients de Docker

Bien sûr, Docker ne remplacera pas de sitôt les machines virtuelles. Ce sont deux technologies différentes, et les machines virtuelles ont encore de nombreux avantages.

Le réseautage est généralement plus impliqué. Sur une machine virtuelle, vous disposez généralement d'un matériel réseau dédié qui vous est directement exposé. Vous pouvez facilement configurer des pare-feu, configurer des applications pour écouter sur certains ports et exécuter des charges de travail complexes comme l'équilibrage de charge avec HAProxy. Sur Docker, car tous les conteneurs s'exécutent sur le même hôte, c'est souvent un peu plus compliqué. Cependant, généralement, des services spécifiques aux conteneurs, tels que AWS Elastic Container Service et GCP Cloud Run, fourniront cette mise en réseau dans le cadre de leur service.

Publicité

Performances sur des environnements non natifs systèmes d'exploitation est toujours à égalité avec les machines virtuelles. Vous ne pouvez pas exécuter un conteneur Linux sur une machine hôte Windows, donc Docker pour Windows utilise en fait un sous-système Windows pour machine virtuelle Linux pour gérer les conteneurs en cours d'exécution. Docker fournit essentiellement une couche d'abstraction au-dessus de la machine virtuelle dans ce cas.

Les données persistantes sont également un peu compliquées. Les conteneurs Docker sont conçus pour être sans état. Cela peut être corrigé avec des montages de volumes, qui montent un répertoire sur l'hôte sur le conteneur, et des services comme ECS vous permettent de monter des volumes partagés. Cependant, cela ne vaut pas mieux stocker des données sur un serveur ordinaire, et vous ne voudriez pas vraiment essayer d'exécuter une base de données de production dans Docker.