14/03/2024

0. VM vs Container

Lu 2057 fois Licence Creative Commons

Docker ?

Docker est une technologie permettant d'isoler des applications dans des conteneurs. L'intérêt majeur est donc l'isolation entre le conteneur et la machine hôte sur laquelle il s'exécute.

« Mais, pour isoler une application d'une machine hôte, on utilise déjà des machines virtuelles. A quoi va donc me servir Docker ? »

Pour bien répondre à cette question, il faut savoir différencier une machine virtuelle d'un conteneur.

Lexique:

  • VM: Virtual Machine = machine virtuelle
  • OS: Operating System = système d'exploitation
  • GUI: Graphical User Interface = interface graphique

Machine Virtuelle

Une machine virtuelle permet de virtualiser tout un système, notamment la partie physique: disque dur, mémoire vive, cartes réseaux, ...
Elle est gérée par un hyperviseur qui instantie une VM à partir d'une image et peut effectuer des sauvegardes de l'état entier d'une VM à un instant donné (des snapshots). La VM dispose de son propre OS, peut embarquer des applications et peut être utilisée avec GUI ou headless.

Cas d'usage:

  • tester un nouvel OS
  • exécuter une application nécessitant un OS différent
  • hébergement: provisionnement automatique de serveurs virtualisés
  • ...

Conteneur

Un conteneur ne virtualise pas un système entier mais embarque des binaires & librairies nécessaires à son fonctionnement. Il est géré par un moteur de conteneurisation qui démarre le conteneur à partir d'une image également.
Un conteneur ne dispose pas de son propre OS car il partage le noyau (ou kernel) de la machine hôte, et s'exécute toujours en headless (sans GUI).
L'objectif d'un conteneur est d'exécuter 1 application de manière immuable: on met à jour l'image de l'application et non le conteneur lui-même.

Cas d'usage:

  • tester une nouvelle technologie
  • créer des environnements de test
  • simuler un environnement de production
  • ...

VM vs Container

Machine Virtuelle Conteneur
Taille lourd (en Go) léger (en Mo)
Temps de démarrage long (minutes) court (secondes)
Portabilité difficile (liée à la machine hôte) très facile (ne nécessite que le moteur de conteneurisation)
Maintenabilité difficile (comme une vraie machine) facile (immuable)
A utiliser pour... un système, serveur ou application statique une application régulièrement mise à jour

Conclusion

Docker permet d'exécuter rapidement des applications isolées dans des conteneurs indépendament de l'environnement de la machine hôte. Ces applications sont facile à partager de par la légèreté des images et par leur compatibilité.

Docker élimine le problème du « ça marche sur ma machine », les applications conteneurisées fonctionneront de la même manière pour tout le monde.

Par ailleurs, les conteneurs Docker peuvent répondre à des problématiques DevOps car ils facilitent l'Intégration & Déploiement Continus (CI/CD) et sont utilisables avec de nombreux outils et technologies (CircleCI, Kubernetes, AWS, GCP, Microsoft Azure, GitLab CI, Github Actions, ...).