DOCKER

Avant de parler de Docker, il faut d’abord comprendre ce qu’est un Conteneur. La virtualisation par conteneur se base sur la virtualisation Linux LXC [LinuX Containers].

Il s’agit d’une methode de cloisennement au niveau de l’OS, le principe est de faire tourner des environnements linux isoles les uns des autres dans des conteneurs partageant le meme noyau.

Ce qui veut dire que contrairement à des machines virtuelles traditionnelles un conteneur n’inclut pas d’OS puisqu’il s’appuie sur les fonctionnalité de l’OS de la machine hôte.

Les conteneurs accèdent alors à l’OS de la machine hôte d’une manière totalement isolée, ils virtualisent l’environnement d’exécution comme le CPU, RAM ou le systeme de fichiers et ne virtualisent pas la machine c’est la raison pour laquelle on dit un Conteneur et non pas une VM.

LXC repose principalement sur deux fonctionnalites Linux :

  • La fonctionnalite Cgroups :

Pour Control groups, il permet de limiter et d’isoler l’utilisation des ressources.

  • La fonctionnalite NameSpace :

Permet d’empecher qu’un groupe puisse voir les ressources d’un autre groupe.

La virtualisation par Conteneur est aussi caracterisée par la couche intermediaire du contrôleur, ce dernier gere un ensemble de fonctionnalite pour les conteneurs. En premier lieu, on trouve evidemment les interactions avec l’OS. Ensuite la sécurité par la gestion de privilèges et des ressources, la scalibilité c’est-à-dire la duplication et la suppression des conteneurs, l’accessibilité des conteneurs a travers la gestion des API et CLI, la portabilite c’est a dire la migration à froid et à chaud de conteneurs,

Différence entre VM et Conteneur

Une machine virtuelle ou VM recrée integralement un serveur c’est-à-dire avec un OS complet avec ces pilotes, ses fichiers et bibliothèques. Comme le conteneur n’embarque pas d’OS il est donc beaucoup plus léger que la VM, ainsi il est plus facile de migrer ou a télécharger et plus rapide à sauvegarder ou à restaurer.

La Virtualisation par conteneur permet aux seveurs d’heberger beaucoup plus de conteneurs que s’il s’agissait de VM.

Docker est donc une technologie de virtualisation par conteneurs reposant sur LXC, il permet de créer des conteneurs qui vont uniquement contenir des applications avec leurs dépendences. Ils permettent d’embarquer des applications afin de les exécuter au sein de l’OS hôte mais de manière virtuellement isolée.

Le Docker Engine ou le moteur Docker fait tourner les conteneurs ainsi il joue le rôle de contrôleur.

Docker repose sur une architecture Client/Serveur. Le client Docker communique avec le Daemon Docker qui fait tourner le Docker Engine, le client Docker et le daemon Docker peuvent tourner sur la même machine comme sur des machines différentes.

Concept d’image dans Docker

L’environnement d’exécution d’un conteneur peut nécessiter l’empilement de plusieurs images. Une image Docker est un template prêt à l’emploi avec des instructions pour la création de conteneurs, on trouve à la base les composants nécessaires à Docker qui sont fournis par le noyau linux de l’hôte.

Prenons l’exemple de deux conteneurs avec deux images différentes un avec Debian et l’autre avec Ubuntu, il est possible d’ajouter d’autres images, par exemple sur la première image on va ajouter l’image de l’éditeur de texte emacs ainsi qu’une image du serveur web Nginx. Il faut savoir qu’une image ne peut être modifiée directement, elle reste toujours en lecture seule d’où l’intérêt d’intégrer une dernière couche qui est la partie du conteneur accessible en écriture et qui contiendra toutes les modifications.

Exemple de création d’un conteneur Docker

Quand on souhaite créer un conteneur, on a la possibilité d’utiliser une image existante sur le Docker Hub, on peut aussi créer l’image via un Docker File, c’est un fichier qui permet de construire une image docker étape par étape et ceci de manière automatisée.

Docker Engine exécute ensuite cette image pour créer un conteneur, une fois créée on peut décider d’en faire une nouvelle image qu’on va restocker dans Docker Hub.

References :
https://hub.docker.com/
https://www.youtube.com/watch?v=ETfWHwYAxsQ