Le blog tech de Nicolas Steinmetz (Time Series, IoT, Web, Ops, Data)
Il ne me reste plus qu’à vous souhaiter de bonnes fêtes de fin d’année et à vous retrouver l’année prochaine pour de nouvelles aventures.
Suite à une mission, synthèse sur la possibilité à date de gérer des conteneurs Linux et Windows avec Docker.
Les tests ont été réalisés, début mai 2017, sur les environnements suivants :
En début de mission, il était supposé qu’une application métier en C# pourrait migrer vers ASP.net Core (la version opensource de .Net et sa déclinaison ASP) et donc sur un conteneur Linux. La suite nous prouva que toutes les APIs ne sont pas (et ne seront pas forcément) dans la version opensource de .Net et qu’il nous fallait envisager des conteneurs Windows à court terme et une infrastructure hybride Windows & Linux, tant au niveau des hôtes que des conteneurs.
Avant d’aller plus loin, il faut bien avoir en tête la jeunesse du support de Windows dans le monde des conteneurs. Il faut distinguer deux niveaux de supports de l’OS Windows :
Support de Windows comme machine hôte :
Support de Windows comme OS de container :
Dans le cadre de la DockerCon d’Avril 2017, Docker et Microsoft ont annoncé le support des conteneurs Linux sous Microsoft Server 2016 via Hyper-V. Il devrait alors être possible de pouvoir lancer simultanément des conteneurs Linux ET Windows sous Windows Server 2016. Il n’y a pas de date connue pour la sortie de la version supportant cette nouveauté. Il faudra surveiller les prochaines releases trimestrielles de Docker pour savoir quand cela sera utilisable de façon “stable”.
En somme, en continuant notre test plus loin, nous savons que nous entrons dans un monde immature avec un support incomplet.
La première surprise fut de voir qu’il était possible de créer un cluster Swarm avec un noeud Windows et un noeud Linux sans pré-requis particulier.
Il faut ensuite créer manuellement le réseau overlay pour son application (ce sera supporté dans docker-compose 1.13+, version 3.2 du format). Si vous utiliser docker-compose, il faudra alors spécifier ce réseau comme un réseau externe afin que l’application s’y attache à son lancement.
Afin de piloter le déploiement des conteneurs sur les bons hôtes, il convient d’ajouter des labels (ou de s’appuyer sur des labels existants comme node.platform.OS
). Ainsi, un conteneur Windows se déploira sur un hôte Windows et idem pour du Linux.
Jusque là, tout va bien mais c’est là que les limitations se font sentir :
Donc au final :
Bon à savoir également :
Une série de trois vidéos, publiées il y a quelques jours, montrent bien ce qu’il est possible de faire avec Swarm à ce jour.
Pour conclure, il est possible d’utiliser des conteneurs Windows mais que ce n’est pas encore la panacée. Cela reste néanmoins prometteur et les annonces de Microsoft vont dans le bon sens. Il va falloir attendre quelques mois pour envisager cela plus sereinement.
Update 16/8/2017 : La version 17.06 entreprise edition semble résoudre les limites évoquées précédemment.