2. Virtualisation et Conteneurisation - Docker

Préambule

Avant d'aborder tout le glossaire de Docker ainsi que ce qui y est associé, regardons à quoi il est opposé.

On le sait tous, un serveur n'est rien de plus qu'un ordinateur qui est allumé sans cesse. Cet ordinateur est à la base physique, et afin de permettre d'utiliser les ressources de cet ordinateur pour en créer un autre, une technologie est née : la virtualisation.

La virtualisation

Lorsque l'on apprends la connaissance de la virtualisation et des VM, on pense tous au fait que c'est une technologie révolutionnaire. En effet, derrière la création de machines virtuelles se cache tout un concept, toute une architecture.
Pour faire au plus simple :

  • L'Hyperviseur est la pièce maîtresse qui permet de créer des machines virtuelles.
    Sous forme de logiciel ou système d'exploitation (OS), il va permettre de virtualiser les ressources matérielles (RAM, CPU, disque etc...) et les mettre à disposition d'autres machines, le tout : exécuté sur un autre OS.
Source : Docker

Avantages de la virtualisation

  • L'allocation de ressources est simple à provisionner
  • La possibilité d'avoir des OS différents sur chacune des VM
  • Le système de Snapshot permettant la restauration à chaud de la VM

Inconvénients de la virtualisation

  • Comme un système d'exploitation est exécuté sur chaque VM, l'espace disque occupé est plus important
  • L'accès aux ressources matérielles (CPU, RAM, Disque) sera également plus lent car il y a une couche d’abstraction matérielle supplémentaire
  • Devoir posséder un serveur ayant pour rôle l'hyperviseur

La conteneurisation

La conteneurisation, voilà un terme auquel il va falloir être familier si l'on veut comprendre le fonctionnement de Docker. Cela amène plusieurs principes, avec toute une conception à comprendre.
Il faut voir Docker comme un logiciel qui pioche ses fonctionnalités un peu de partout !
Je m'explique. Docker n'a concrètement pas apporté de nouvelles fonctionnalités, mais a réussi à rassembler des fonctionnalités déjà existantes, en se reposant principalement sur le noyau Linux.

Il faut savoir qu'un des aspects clé de Docker est l'isolation, c'est principalement pour cette raison là que Docker est utilisé. Pour permettre d'avoir un environnement le plus isolé possible, Docker permet d'avoir un environnement avec :

  • Un réseau virtuel dédié (crée via les Namespaces)
  • Des ressources virtuelles dédiées (grâce aux cgroups)
  • Un espace de stockage virtuel dédié (à l'aide des cgroups également)
Source : Docker

Avantages de la conteneurisation

  • Scalable : Dupliquer un conteneur est très simple contrairement à une VM où l'opération est plus complexe. Le scaling horizontal est donc plus simple.
  • Portabilité : les conteneurs peuvent être déployés dans différents environnements, ce qui facilite leur déploiement ainsi que leur migration.
  • Isolation : les conteneurs offrent une isolation efficace entre les différentes applications et composants, ce qui permet de réduire les conflits et les problèmes de dépendances.
  • Léger : La conteneurisation est une couche légère, ce qui permet de maximiser l'utilisation des ressources tout en consommant le moins de ressources système, réduire les coûts d'infrastructure ainsi que d'accélérer le temps de démarrage et de réduire la taille de l'image.

Inconvénients de la conteneurisation

  • Gestion du stockage : Les conteneurs sont éphémères, ce qui rend la persistance des données plus complexe.
  • Sécurité : Des vulnérabilités supplémentaires peuvent se propager rapidement entre les conteneurs et les environnements partagés ainsi que le fait de rebondir depuis un conteneur vers l'hôte.

Nous verrons dans le cours suivant les notions et les définitions propre à Docker.