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


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

Docker et les machines virtuelles (VM) sont deux technologies utilisées dans le déploiement d'applications. Au cours du cycle de vie de développement logiciel, le déploiement prépare le code de l'application à exécuter pour vos utilisateurs finaux. Docker est une plateforme open source que les développeurs utilisent pour empaqueter des logiciels dans des unités standardisées appelées conteneurs. Le conteneur contient à la fois le code de l'application et son environnement, notamment les bibliothèques, les outils système et l'exécution. Docker vous permet de déployer et de mettre à l'échelle des applications sur n'importe quelle machine ainsi que de garantir la cohérence de l'exécution de votre code. En revanche, une machine virtuelle est une copie numérique d'une machine physique. Vous pouvez avoir plusieurs machines virtuelles avec leurs propres systèmes d'exploitation individuels fonctionnant sur le même système d'exploitation hôte. Les développeurs configurent la machine virtuelle pour créer l'environnement de l'application. Il est également possible d'exécuter des conteneurs Docker sur des machines virtuelles.

En savoir plus sur Docker »

Virtualisation : Docker ou machine virtuelle

La virtualisation permet de créer une instance virtuelle de ressources réelles, telles que des serveurs et des réseaux. En informatique, la virtualisation permet à plusieurs instances isolées d'un composant virtualisé de fonctionner sur le composant réel.

Par exemple, plusieurs serveurs virtuels peuvent s'exécuter sur un serveur physique. En partageant les ressources réelles entre plusieurs instances virtuelles, celles-ci sont mieux utilisées et plus rentables. La virtualisation est à la base d'un grand nombre de développements et de déploiements d'applications.

Machines virtuelles

Comme leur nom l'indique, les machines virtuelles (VM) permettent la virtualisation d'un ordinateur entier (serveur). Une machine virtuelle émule les composants matériels d'une machine physique, tels que l'unité centrale, la mémoire, la carte d'interface réseau, les contrôleurs USB et les cartes son. Vous pouvez exécuter un système d'exploitation client et plusieurs applications dans l'environnement virtuel. 

Les machines virtuelles ont rendu possibles les technologies cloud et, dans Amazon Web Services (AWS), une machine virtuelle est appelée une instance. Ces instances cloud sont détenues et gérées par AWS et peuvent être utilisées via des API.

En savoir plus sur les instances cloud »

Docker

Une VM vous permet d'exécuter une machine virtuelle sur n'importe quel matériel. Docker vous permet d'exécuter une application sur n'importe quel système d'exploitation. Il utilise des instances isolées dans l'espace utilisateur, appelées conteneurs.

Les conteneurs Docker possèdent leur propre système de fichiers, leur propre structure de dépendance, leurs propres processus et leurs propres capacités réseau. L'application dispose de tout ce dont elle a besoin à l'intérieur du conteneur et peut s'exécuter partout. La technologie des conteneurs Docker utilise directement les ressources du noyau du système d'exploitation hôte sous-jacent. 

Quelles sont les autres similitudes entre Docker et les machines virtuelles ?

En tant que technologies de virtualisation, Docker et les machines virtuelles (VM) présentent certaines similitudes.

Images

Les conteneurs Docker et les machines virtuelles sont tous deux créés à partir d'images. Chaque image sert de modèle de l'environnement virtualisé. Les images permettent aux utilisateurs de créer et de partager des environnements cohérents sans avoir à les configurer à chaque fois.

Une image définit toutes les ressources système nécessaires à l'exécution des applications. Par exemple, une image de VM crée des sauvegardes du système d'exploitation, tandis que l'image de conteneur Docker crée une sauvegarde de l'environnement applicatif.

Contrôle de version

Les images de conteneur Docker et les images de machines virtuelles peuvent être versionnées pour suivre les modifications de la configuration de l'environnement au fil du temps.

La gestion des versions dans Docker fait référence à la capacité de suivre et de gérer les modifications apportées aux images Docker au fil du temps. Elle permet aux développeurs de suivre les différentes versions de leurs applications, de revenir aux versions précédentes si nécessaire et de déployer simultanément différentes versions d'une application. 

De même, la gestion des versions dans les machines virtuelles fait référence au processus de suivi et de gestion des modifications apportées à l'image de la machine virtuelle au fil du temps. La gestion des versions des machines virtuelles assure le suivi des modifications, telles que les mises à jour et les correctifs, apportées au matériel virtuel ou à la configuration du système d'exploitation.

Portabilité

Les machines virtuelles et Docker ont été conçus pour résoudre les difficultés liées au développement de différentes configurations d'applications pour différents types d'architectures sous-jacentes. Bien qu'ils adoptent des approches différentes pour relever ces défis, Docker et les images de machines virtuelles sont tous deux très portables d'une architecture à l'autre, que ce soit sur site ou dans le cloud. 

Principales différences : Docker et machine virtuelle

Les machines virtuelles (VM) et Docker permettent de relever le défi que représente l'exécution d'applications dans différents environnements. Mais ils le font pour des raisons légèrement différentes et avec des approches différentes.

Objectif

Les machines virtuelles ont été conçues à l'origine pour permettre à plusieurs systèmes d'exploitation de fonctionner sur une seule machine physique. L'objectif est de permettre aux utilisateurs de créer un environnement virtuel isolé du matériel sous-jacent. Les VM masque les détails du matériel afin de faciliter l'exécution d'applications sur différentes architectures matérielles et d'utiliser les ressources matérielles plus efficacement.

Docker, quant à lui, a été conçu pour fournir un moyen léger et portable de packager et d'exécuter des applications dans un environnement isolé et reproductible. Docker masque les détails du système d'exploitation pour relever le défi du déploiement d'applications dans différents environnements, tels que le développement, les tests et la production. Il peut être très difficile de gérer les mises à jour de l'environnement logiciel et de maintenir la cohérence de l'environnement partout. Cela est particulièrement vrai pour les organisations qui utilisent des centaines d'applications ou qui décomposent les applications en centaines de microservices. Docker résout ce problème grâce à la conteneurisation. 

Produit final

Docker est le nom de la plateforme de conteneurs open source détenue et exploitée par la société Docker. Il existe des plateformes alternatives comme Podman, bien qu'elles soient beaucoup moins populaires ; Docker est synonyme de conteneurisation. Le conteneur est l'artefact, la partie utilisable par l'utilisateur final.

La machine virtuelle elle-même est la partie utilisable par l'utilisateur final. La technologie n'est pas associée à une marque en particulier. Vous pouvez déployer des machines virtuelles dans des centres de données sur site ou y accéder via des API en tant que service cloud géré.

Architecture

Une machine virtuelle exécute son propre noyau et son propre système d'exploitation hôte, ainsi que des applications et leurs dépendances, comme des bibliothèques et d'autres fichiers binaires. Un hyperviseur assure la coordination entre le matériel (ordinateur hôte ou serveur) et la machine virtuelle. Il alloue les ressources matérielles physiques définies lors de l'instanciation à la machine virtuelle pour son usage exclusif. Plusieurs machines virtuelles peuvent exister sur un seul serveur puissant, géré par un seul hyperviseur, avec des centaines d'applications exécutées sur chaque machine virtuelle.

Un conteneur Docker ne contient que ses dépendances. Le logiciel Docker Engine est le moteur de la virtualisation dans Docker. Il assure la coordination entre les conteneurs en cours d'exécution et le système d'exploitation sous-jacent, qu'il s'agisse d'une machine physique ou virtuelle.

Pour une gestion plus avancée de la virtualisation avec Docker, utilisez Kubernetes. Pour plus d'informations, consultez Quelle est la différence entre Kubernetes et Docker ?

Partage de ressources

Les machines virtuelles et les conteneurs Docker utilisent tous deux le multiplexage des ressources, ou le partage des ressources entre les instances virtualisées.

Les machines virtuelles demandent au départ une quantité spécifique de ressources au matériel et continuent de l'occuper continuellement tant que la machine virtuelle est en cours d'exécution. 

Les conteneurs Docker, en revanche, utilisent les ressources à la demande. Plutôt que de demander une quantité spécifique de ressources matérielles comme le font les machines virtuelles, ils demandent simplement ce dont ils ont besoin au noyau unique du système d'exploitation. Plusieurs conteneurs partagent le même système d'exploitation. Les conteneurs Docker partagent directement les ressources avec le noyau et peuvent utiliser moins de ressources système qu'une machine virtuelle. 

Sécurité

Étant donné que les conteneurs Docker partagent le noyau avec le système d'exploitation hôte, pour réduire la consommation de ressources, ils sont exposés à des risques en cas de vulnérabilités dans le noyau. Cependant, Docker fournit également de nombreux contrôles de sécurité avancés.

À l'inverse, comme une VM exécute un système d'exploitation complet, il y a un niveau d'isolation supplémentaire lors de l'exécution d'applications. Les VM offrent une plus grande sécurité tant que le système d'exploitation a mis en place des mesures de sécurité strictes.

Quand utiliser : Docker ou machine virtuelle

Les conteneurs Docker s'exécutent sur l'architecture Linux et nécessitent des fonctionnalités spécifiques au noyau Linux, telles que les espaces de noms et les groupes de contrôle (cgroups). Les développeurs exécutent souvent la plateforme Docker sur des machines virtuelles basées sur Linux. Docker regroupe le code de l'application dans des conteneurs qui s'exécutent partout. Les mises à jour de l'environnement ne sont effectuées qu'une seule fois dans le conteneur. Il n'est pas nécessaire de mettre à jour l'environnement de votre application. 

Par exemple, vous pouvez lancer une instance dans AWS et la charger immédiatement avec une Amazon Machine Image (AMI) préconfigurée avec Docker. 

 

Toutefois, si vous devez décider spécifiquement d'utiliser une machine virtuelle (VM) ou Docker pour déployer des applications, cela dépend des exigences d'exécution de l'application.

Quand utiliser une machine virtuelle

Il est préférable d'utiliser une machine virtuelle si vous exécutez des applications présentant les caractéristiques suivantes : 

  • Dépendances spécifiques au système d'exploitation
  • Besoins importants en ressources matérielles
  • Nécessité de définir divers contrôles dans les systèmes d'exploitation
  • Applications héritées qui ne s'exécutent plus sur les systèmes d'exploitation modernes
  • Différentes exigences en matière de système d'exploitation avec une seule infrastructure physique sous-jacente disponible

Quand utiliser Docker

Il est préférable d'utiliser Docker lorsque vous exécutez des applications présentant les caractéristiques suivantes : 

  • Des exigences de ressources légères ou une architecture de microservices
  • Un environnement d'infrastructure physique distribué, y compris des serveurs basés sur le cloud
  • Cycles de déploiement rapides (les Dockerfiles étant plus faciles à gérer que les configurations de machines virtuelles)
  • Une exigence de capacité de mise à l'échelle rapide

Résumé de la différence : Docker et VM

 

Conteneur Docker

VM

De quoi s'agit-il ?

Docker est une plateforme logicielle permettant de créer et d'exécuter des conteneurs Docker. Un conteneur Docker est une émulation d'une instance de l'espace utilisateur, la partie du système d'exploitation où les processus utilisateur s'exécutent.

Il s'agit d'une émulation d'une machine physique, y compris du matériel virtualisé, qui exécute un système d'exploitation.

Virtualisation

Le conteneur masque les détails du système d'exploitation au code de l'application.

La machine virtuelle masque les détails du matériel au code de l'application.

Objectif

Masquer les détails du matériel et augmenter l'utilisation du matériel.

Améliorer la gestion de l'environnement de l'application et assurer la cohérence entre plusieurs environnements.

Géré par

Le moteur Docker assure la coordination entre le système d'exploitation et les conteneurs Docker.

L'hyperviseur assure la coordination entre le matériel physique de l'ordinateur et les machines virtuelles.

Architecture

Partage les ressources avec le noyau hôte sous-jacent.

Exécute son propre noyau et son propre système d'exploitation.

Partage de ressources

À la demande.

Une quantité fixe, définie dans les exigences de configuration d'une image de machine virtuelle.

Comment AWS peut-il répondre à vos besoins en matière de déploiement d'applications ?

Amazon Web Services (AWS) dispose d'une gamme de services conçus spécifiquement pour les machines virtuelles (VM) et la gestion de Docker :

  • Amazon Elastic Cloud Compute (Amazon EC2) offre plus de 600 types différents d'instances sécurisées, fiables et évolutives. En chargeant un modèle Amazon Machine Image (AMI), vous pouvez disposer en quelques minutes d'un serveur de développement, de test ou d'environnement de production entièrement configuré et prêt à fonctionner.
  • Amazon Elastic Container Service (Amazon ECS) est un service d'orchestration de conteneurs entièrement géré qui vous permet de déployer et mettre à l'échelle des applications conteneurisées en toute simplicité. Les clients peuvent configurer leurs instances de conteneurs pour accéder à un registre d'images Docker privées à l'intérieur d'un cloud privé virtuel (VPC) ou à un registre accessible depuis l'extérieur du VPC.
  • Amazon Elastic Container Registry (Amazon ECR) vous permet de stocker, de partager et de déployer facilement vos conteneurs n'importe où. Amazon ECR s'intègre à l'interface de ligne de commande (CLI) de Docker pour simplifier vos flux de développement et de production. Par exemple, vous pouvez envoyer vos images de conteneur vers Amazon ECR à l'aide de la CLI Docker depuis votre machine de développement. Et les orchestrateurs de conteneurs Amazon peuvent les récupérer directement pour les déploiements de production.
  • AWS Fargate est un service sans serveur qui vous permet de déployer et de gérer des conteneurs sans avoir à gérer de serveur physique ou de machines virtuelles.

Commencez à développer votre application sur AWS en créant un compte dès aujourd'hui.