Docker et la virtualisation par container sous Windows

A l’occasion de l’évènement Microsoft Build 2015, Mark Russinovich a démontré hier le support de Docker dans Windows Server 10 !

Une raison supplémentaire de poursuivre avec célérité la série d’articles que je consacre au sujet et dont voici la liste présente et à venir :
Docker : les fondamentaux
Mise en place de l’environnement Docker : Installation du moteur et du client Docker
Docker et la virtualisation par container sous Windows
Mise en place de l’environnement Docker : Provisioning d’un host Docker dans Azure
Utilisation de Docker
Clusters de containers Docker

Support de Docker dans Windows Server

Docker a construit un écosystème avec une dynamique Open Source fondée sur les containers Linux. Microsoft a souhaité élargir la portée des scénarios de virtualisation de containers en offrant un support natif pour Docker pour Windows Server 10, comme l’a illustré la démonstration de Mark Russinovich (Keynote Microsoft Build jour 1 – minute 22)

docker-windows

L’implémentation du support de Docker dans Windows Server 10 a été réalisée en étroite collaboration avec la communauté Docker. Elle s’appuie sur les technologies de container incluses dans la nouvelle version de Windows Server (les containers Windows Server ainsi que les containers Hyper-V) et sera complétée par la mise à disposition de Nano Servers. Cette ouverture permettra d’enrichir le référentiel d’images Docker Hub. Dans un même ordre d’idée, les images du Docker Hub seront fédérées dans la MarketPlace du nouveau portail Azure. Le code du moteur Docker pour Windows devrait être publié en Open Source sur le référentiel GitHub de Docker.

Container Windows Server

Microsoft disposait déjà d’un retour d’expérience sur des projets connexes comme Microsoft App-V (à l’origine Softricity SoftGrid, une solution de virtualization d’application et de streaming d’application) ou le projet « Drawbridge » (Rethinking the Library OS from the Top Down : un prototype de Microsoft Research ciblant une nouvelle forme de virtualisation pour la mise en sandbox d’application fondée sur le concept de picoprocess, une forme de container).
C’est donc une nouvelle génération de containers que Microsoft propose dans Windows Server 10 et c’est cette technologie qui a rendu possible le portage du moteur de Docker sur Windows. Le principe de fonctionnement de Docker avec ces containers Windows est rigoureusement symétrique à celui que l’on connaissait déjà pour Linux, comme l’illustre le schéma suivant.
 container-windows

Container Hyper-V

Les containers Hyper-V proposent une nouvelle option de déploiement de container, en offrant la pleine intégration multi-plateformes de Docker et en conservant un niveau d'isolation précédemment réservé aux machines physiques dédiées ou aux machines virtuelles. Ce mécanisme permettra de s’assurer que le code qui s'exécute dans un container reste isolé et ne peut pas influer sur le système d'exploitation hôte ou sur d’autres containers en cours d'exécution sur le même hôte.
Il sera possible d’utiliser les mêmes outils de développement et d’administration que ceux utilisés pour les containers Windows Server. En outre, les applications développées pour les containers Windows Server pourront être déployées dans des containers Hyper-V sans modification, ce qui offrira une agilité supplémentaire dans un environnement multi-plateformes, multi applications.

container-hyper-v

Nano Server

Nano Server est une installation minimaliste de Windows Server qui fournit uniquement les composants requis (pas de GUI, ni de support du 32 bits…). Cela se traduit par une forte réduction de la taille des images Windows Server (taille des VHDs réduite de 93%, 80% de reboot en moins…), une accélération du déploiement, une diminution de la consommation de bande passante réseau et améliore la disponibilité et la sécurité. Ce faible encombrement fait de Nano Server un complément particulièrement adapté à l’usage de containers Windows Server et Hyper-V, ainsi qu'à d’autres scénarios optimisés pour le Cloud.

Docker : une révolution ?

L’un des intérêts de Docker est la séparation des responsabilités entre développeurs et responsables des opérations. Docker offre aux développeurs la possibilité de transformer le mythe du « Write once, run anywhere » en réalité. En effet, cette solution peut apporter une réelle réduction du cycle de production logicielle pour les applications multi-tiers distribuées, notamment grâce à la portabilité et résolution des dépendances pour les architectures fondées sur des micro-services, et au partage d’images et layering sur des containers existants. Dans le même temps, Docker garantit aux responsables des opérations une cohérence et une simplification des modèles de déploiement, une plus grande automatisation avec un contrôle uniforme des opérations de démarrage, arrêt et log des services, ainsi qu’une meilleure utilisation des ressources.

La virtualisation par les containers permet dès aujourd’hui d’accroître la scalabilité des applications tout en augmentant leur densité de déploiement. Couplé avec le dynamisme de l’écosystème Docker, la flexibilité qu’offre le choix d’utiliser des containers Windows Server, Linux ou Hyper-V à demeure ou dans le Cloud (en particulier Azure), devrait se traduire par un impact très significatif dans le développement et la gestion opérationnelle des applications de demain. Il deviendra alors possible de gérer des applications composées sur la base d’images Linux et Windows depuis le même environnement Docker client, et ce, indépendamment de leur infrastructure d’hébergement.

Dans le prochain article, je vous présenterai différentes méthodes de provisioning d’un hôte Docker dans Azure.