VT2016 CaaS

=Présentation=


 * Sujet : Docker Container as a Service (CaaS)
 * Auteur : Quentin FAURE
 * Enseignants : Didier DONSEZ, Georges-Pierre BONNEAU

=Résumé=

Docker est une technologie OpenSource de virtualisation que l'on pourrait qualifier de virtualisation "légère". Son principe repose sur des technologies incluses dans le kernel Linux : cgroups et LXC. Cette technologie est de plus en plus populaire pour sa flexibilité et sa facilité de déploiement. De fait, les grands acteurs du cloud s'y intéressent et posent une nouvelle offre basée sur cette technologie : les Container as a Service.



=Fonctionnement de Docker=

Docker est une technologie qui permet de faire de la virtualisation dite par isolement. Le principe est celui des container : c'est un environnement complet qui est isolé du reste des processus. Les principales technologies utilisées pour parvenir à ces fins sont : - cgroups : Cet utilitaire permet de créer des groupes de processus et de les gérer ensembles. Ses principales fonctionnalités sont la gestion de ressource par groupe de processus. - LinuX Container (LXC) : Le but de LXC est de fournir un environnement d'exécution virtualisé, et non pas un système complet. De fait, le système virtualisé est le même que l'hôte.

=Les mécanismes de Docker=

Dans son fonctionnement, Docker distingue principalement 2 éléments afin de fournir une virtualisation : les images et les containers. Une image correspond à l'état d'un système, prêt à être utilisé. Une image va servir de base à un container, qui lui va représenter l'évolution d'une exécution de cette image, sans influencer celle-ci. Ainsi, les image et les container peuvent être rapproché des classes et objets en programmation objet.

Plusieurs moyen sont disponible pour avoir une image, des images ready to use sont disponible dans des "registry", comme le Docker Hub. Une autre possibilité est de créer sa propre image, avec un Dockerfile (ou Docker compose). Le principe est de choisir une image de base, et d'y ajouter les outils nécessaire à ses besoins. Toute les images existantes peuvent servir de base. Ci dessous, le Dockerfile de l'image Hello-World, créée par Docker :

Le mot clé FROM indique le nom de l'image sur laquelle se baser. COPY, quant à lui, permet de copier du contenu directement dans l'image. Finalement, le mot clé CMD permet d'exécuter une commande au lancement d'un container basé sur l'image. Lancer cette image aura donc pour effet d'exécuter le programme "hello".

=Docker face aux VM=

Docker vient directement faire face aux machines virtuels. Son point fort est sa légèreté : Docker n'a pas besoin d'un OS invité complet vu qu'il se base sur celui de l'hôte.



Ci-dessus, à gauche, le principe de fonctionnement des machine virtuelles. Un hypervisor va venir gérer les ressources du système hôte pour les systèmes invités. Pour faire fonctionner une application, un système complet est nécessaire. A droite, le principe de fonctionnement de Docker. Docker se base sur le système hôte, il n'y a donc pas besoin d'un système invité complet. Le Docker Engine rempli donc le même rôle que l'hypervisor pour les VM.

=Les CaaS=

Les Containers as a Service sont une application de Docker dans le cloud. Les containers vont être déployés sur des machines distantes dans le cloud. Le principal avantage de ce service est la portabilité : le container en local sera basé sur la même image que le container distant. De ce fait, il n'y aura aucune mauvaise surprise dû au matériel ou à la configuration de la machine dans le cloud.

Un autre avantage est de pouvoir séparer complètement la partie développement de la partie déploiement : le développeur ne se soucie plus que du développement et de la construction de l'image, alors que d'autres équipes vont se charger du déploiement sans se soucier de la configuration de l'image ni de ce qu'elle contient.

=Pour aller plus loin= Site officiel de Docker

Site officiel de LXC

Docker sur le wiki