Pour comprendre la technologie docker, nous allons partir de la notion de machine virtuelle (VM). Cela consiste à simuler par un composant logiciel sur une machine physique, un ordinateur virtuel auquel on alloue une partie des ressources de la machine physique (mémoire, CPU). Pour mieux comprendre, partons d’une machine dotée par exemple de 400 Go de disques et 256 Go de mémoire : nous pouvons créer 4 VMs indépendantes avec chacune 100 Go de stockage et 64 Go de RAM. Ces VMs peuvent être totalement différentes les unes des autres. On peut en avoir une sous le système Windows, une autre sous le système Linux ou BSD.
Le grand intérêt des VMs réside dans la souplesse et l’optimisation de l’utilisation des ressources matérielles. L’organisation en VMs rend plus facile la réaffectation, le changement du dimensionnement et améliore le taux d’utilisation des dispositifs physiques (disque, mémoire, réseau, etc.).
Les VMs présentent aussi l’inconvénient d’être assez gourmandes en ressources, puisqu’à chaque fois, il faut faire tourner un système d’exploitation complet, avec tout ce que cela implique (utilisation de la mémoire, processeur).
Docker propose une solution beaucoup plus légère, basée sur la capacité du système Linux, à créer des espaces isolés auxquels on affecte une partie des ressources de la machine-hôte. Ces espaces (ou containers) partitionnent en quelque sorte le système-hôte en sous-systèmes étanches, au sein desquels le nommage (des processus, des utilisateurs, des ports réseaux) est purement local. On peut par exemple faire tourner un processus apache sur le port 80 dans le conteneur A, un autre processus apache sur le port 80 dans le conteneur B, sans conflit ni confusion. Tous les nommages sont en quelque sorte interprétés par rapport à un container donné (notion d’espace de nom).
Les conteneurs Linux sont beaucoup plus légers en consommation de ressources que les VMs, puisqu’ils s’exécutent au sein d’un unique système d’exploitation. Docker exploite cette spécificité du système Linux pour proposer un mode de virtualisation plus léger et flexible.
Nous verrons dans les prochains articles la notion de conteneur de manière plus approfondie et comment utiliser/construire son propre conteneur.