Vous avez dit Windows et Docker ?

imageimage

 

Malgré son jeune âge (création de docker, inc en 2013), la technologie docker est sans doute le phénomène IT le plus intense de ces dernières années.

Difficile aujourd’hui d’y échapper car tout le monde en parle : conférences énormes avec sponsors prestigieux, meetups archibondés, presse dithyrambique, certificateurs à foison, investisseurs à l’affut…

image

Comment expliquer un phénomène aussi foudroyant ? La technologie docker n’a que trois ans, et c’est déjà un standard de fait en train de révolutionner mondialement notre façon de déployer du logiciel.

De nombreuses entreprises ont déjà commencé à l’utiliser pour leurs besoins mais surtout, jamais une technologie d’infrastructure n’avait suscité autant d’intérêts chez les développeurs.

Pourquoi docker ?

Eviter le syndrome « Je ne comprends pas, ça marchait pourtant sur ma machine… » en livrant dans un conteneur à la fois notre code et tout ce qui est nécessaire pour le faire tourner (quel que soit l’environnement de déploiement) est ce qui a séduit en premier la plupart des développeurs.

Il faut dire que le packaging et la simplicité d’utilisation du produit y a fait pour beaucoup, dans une période déjà très favorable aux sirènes du mouvement DevOps et du Continuous Delivery. Et puis disposer d’un format standard qui nous permettrait de déployer de la même façon quel que soit la solution de cloud (et donc avec une possible réversibilité à la clé) est également très séduisant (pour éviter tout verrouillage avec une offre de service).

Le conteneur est une nouvelle forme de binaire capable d’exécuter nos applications n’importe où et sans contraintes. Ceci change véritablement notre rapport à l’infrastructure : pas d’affinité avec un langage, pas de souci de déploiement, pas de problème de mise à l’échelle. Le slogan docker affiche d’ailleurs vaillamment : BUILD, SHIP, RUN.

image

 

Docker en quelques mots

Si vous ne connaissez pas docker, voici quelques éléments qui devraient vous éclairer. Docker est une technologie open source permettant de gérer des conteneurs applicatifs initialement sous Linux. Il repose sur une architecture de type client/serveur où le client docker et son démon UNIX, appelé Docker Engine, communique via une API REST. Ce qui signifie que client peut être installé en local avec le Docker Engine ou sur une autre machine où le client et le Docker Engine peuvent être sur des systèmes hétérogènes.

Le rôle du Docker Engine est de prendre en charge les commandes du client afin de gérer des conteneurs contenant des applications.

image

Architecture Docker : système d’exploitation partagé, applications isolées

Un conteneur docker est une forme d’isolation applicative permettant d’exécuter plusieurs conteneurs sur la même machine (même OS) sans effet de bord. Contrairement à une machine virtuelle où tout est dupliqué afin d’isoler des applications, le conteneur n’a pas besoin de dupliquer le système d’exploitation dans sa totalité.

image

Architecture Machine Virtuelle : tout le système d’exploitation est dupliqué pour chaque machine virtuelle

Les conséquences sur le plan des ressources consommées sont considérables. En effet, les conteneurs s’installent, se chargent très rapidement et consomment très peu de mémoire. Les parcs serveurs gagneraient en nombre d’instances applicatives à basculer de machines virtuelles vers des clusters de conteneurs.

Techniquement, les conteneurs sont hydratés à partir de fichiers contentant toutes les définitions des éléments nécessaires au chargement du conteneur. Ces fichiers sont, dans le langage docker des images. À l’instar des poupées russes, on peut personnaliser une image en lui ajoutant une nouvelle couche (par exemple application Web) afin d’engendrer une image avec un peu de plus de valeurs métiers.

Des images « standardisées » sont entreposées de manières centralisées afin de les partager et de gagner de temps : le hub docker (aussi appelé registre) contient un catalogue impressionnant d’images.

Le client docker peut venir tirer parti de ces images afin en produire un nouveau conteneur très rapidement.

Pour résumer le fonctionnement de docker. Le client sollicite le démon (Docker Engine) via de commandes afin de gérer à la fois les conteneurs et les images respectives. Ces images lorsque qu’elles peuvent être partagées, sont mis à disposition dans le registre docker.

image

Un client docker peut récupérer une image depuis le registre afin de produire un nouveau conteneur.

 

Microsoft et la technologie Docker

Le succès de docker sous Linux est considérable, les géants du Web, les grandes entreprises et les petites structures l’ont déjà adopté en production alors que l’offre de docker sous Windows est sur le point d’arriver.

En effet, Microsoft est sur le point de délivrer tout un nouvel écosystème docker sous Windows.

De nombreuses conférences ont déjà démontré le produit, mais peu de développeurs, de décideurs ou d’entreprises ont entendu parler de l’offre docker Microsoft dont le nom officiel est Microsoft Windows Containers.

L’offre est en préparation depuis plus d’un an, mais est déjà disponible à travers plusieurs déclinaisons de systèmes d’exploitation :

  • Windows 10 version Anniversary Update
  • Windows Server 2016 (disponible en version finale avant la fin l’année 2016)
  • Microsoft Azure
    • Propose déjà des machines virtuelles avec Windows Server 2016 avec la technologie Windows Containers préinstallée.
    • Une offre de mise à l’échelle de vos conteneurs est disponible, clef en main avec travers Microsoft Azure Service Containers

L’objectif de cet article est de brosser le décor de l’offre docker sur la plateforme Windows, afin de vous sensibiliser au champ des possibles vis-à-vis de votre contexte.

En effet les acteurs informatiques qui participent au développement d’applications s’appuyant sur la plateforme Win32, utilisant la technologie COM avec ou sans composants .NET seront sans doute intéressés de comprendre comment s’articule l’offre docker sur la plateforme Windows.

 

Collaboration forte entre Microsoft et Docker Inc.

Avant de proposer une offre docker intégrée à Windows, les deux sociétés, Microsoft et Docker inc. ont dû collaborer afin de rendre possible l’utilisation de docker sur les environnements Microsoft. Pour Microsoft, les conteneurs docker deviennent un passage obligé sur le déploiement applicatif dans Microsoft Azure (qui contient bien plus de serveurs Linux que de serveurs Microsoft).

Sur le plan technique, la première étape a été d’implémenter docker nativement sur Windows afin d’obtenir une version de docker capable d’offrir aux utilisateurs des technologies Microsoft, le même niveau de service que l’offre LXC (Linux Containers).

Par nature la technologie docker repose sur des facilités d’isolation offertes par le système d’exploitation Linux (les dernières versions de Linux sont compatibles docker). Afin de rendre possible la virtualisation applicative sous Windows, les ingénieurs Microsoft se sont penchés sur les services disponibles dans le noyau Windows afin d’implémenter les comportements isolation applicative, équivalente au système Linux.

Remarques

Ce qui signifie qu’une version de Windows n’ayant pas été modifiée pour offrir des services d’isolation applicative ne peut faire tourner une implémentation native de docker. Tous les Windows Server antécédents à la Windows Server 2016 sont incompatibles avec l’offre native Microsoft Docker.

Techniquement la virtualisation applicative repose sur des services d’isolement intrinsèque à la version au système d’exploitation sous-jacent. Ainsi sur une même machine, on peut disposer de plusieurs applications isolées, partageant le même système d’exploitation pouvant vivre leurs vies sans jamais collaborer ou pas. En effet, les conteneurs ont des capacités pour partager de l’information si besoin.

Ces services d’isolement applicatif sont antécédents à la technologie docker. En effet, docker vient les exposer intelligemment afin de les rendre faciles à utiliser (c’est une des forces du produit). C’est sur les dernières versions Linux, que les services d’isolement applicatifs se sont développées progressivement : namespace, cgroups et quelques facilités du système de fichiers ont permis de créer la notion de conteneur que docker a popularisé avec succès.

image

Pour obtenir un équivalent Windows, il fallait que le système d’exploitation soit modifié en conséquence afin de retrouver les équivalents Linux: des namespaces, resource controls, union file System. Une fois les fonctionnalités système de base retrouvées, le portage du Docker Engine a pu commencer. Le code n’a pas été dupliqué, mais au contraire porté.

Chaque partie de code incompatible avec le système Windows, a été adapté afin de modifier au le code au plus juste. La collaboration Microsoft avec Docker, inc. a permis de lancer le projet Windows Containers compatible avec les interfaces docker.

image

 

Portage de Docker Linux sous Windows

Pour réaliser l’implémentation native de docker sur Windows, Microsoft a lancé un portage du code du démon open source docker Linux (Docker Engine) sur le noyau Windows. Un tel portage au niveau système a forcément nécessité des adaptations afin de retrouver les comportements de la version originale sous Linux. Mais finalement, les ingénieurs Microsoft ont obtenu une première version du Docker Engine sur un noyau Windows légèrement modifié dans des délais très brefs. C’est ce travail de portage qui a permis à Microsoft de proposer la technologie Windows Containers.

Naissance d’une offre Docker native sur Windows

Aujourd’hui la déclinaison de docker sur Windows, officiellement nommée Windows Containers, est relativement proche de celle proposée sur Linux et offre le support de l’essentiel des commandes docker avec – pour les habitués de PowerShell – une extension spécifique Windows Containers qui permet à la fois de gérer, de manipuler les conteneurs, mais aussi de les administrer à l’aide de leur langage de script préféré.

L’offre Windows Containers, comprend deux formes d’exécution des conteneurs:

  • Windows Server Containers : Exécution directe du container à la Linux. Les principes sont les mêmes. Il existe deux types de serveurs permettant d’héberger des conteneurs : Windows Server 2016 version complète avec une interface graphique similaire à Windows 10 et Server Core dépourvue de l’interface graphique du poste client.

image

  • Hyper-V Containers : Exécution sous le contrôle d’hyperviseur optimisé. Chaque conteneur se retrouve dans une machine virtuelle hautement optimisée. Cette version permet d’offrir une isolation plus importante que la solution par défaut. Une attente remontée par les grandes entreprises. Il existe trois systèmes d’exploitation permettant d’héberger des conteneurs : Windows Server 2016 version complète avec une interface graphique similaire à Windows 10 et Server Core dépourvue de l’interface graphique du poste client. et Windows 10 mise à jour Anniversaire.

image

Il existe trois catégories de serveur dans l’offre Windows Server 2016 :

image

Nano Server

Le Nano Server est une version minimaliste du noyau Windows. Naturellement sans interface graphique et surtout avec un jeu réduit d’API afin d’obtenir un système capable de tourner avec très peu de ressources. Il est cependant compatible la technologie Windows Containers. Ce qui signifie qu’il est possible de faire tourner des applicatifs dans un conteneur reposant sur le Nano Server. Il est important d’insister que c’est une version extrêmement petite de Windows qui est aujourd’hui utilisée par exemple dans Microsoft Azure comme système d’exploitation pour lancer des machines virtuelles.

L’incarnation de Nano Server est neuf fois plus petite que la version Server Core (l’autre système d’exploitation supportant Windows Containers). Nano Server arrive officiellement avec la version Mise à jour de Windows 10 Anniversary au sein de la technologie Hyper-V Containers. Cependant, le déploiement sur Windows Nano Server contient quelques contraintes, car ce noyau ne propose pas tous les services standards d’un serveur Microsoft standard. Par exemple, le développeur .NET devra se restreindre à un développement .NET Core, ou bien ASP.NET Core. Cependant, si vous souhaitez vérifier si votre application Win32 est compatible avec ce petit serveur, il existe un outil NanoServerApiScan.exe : https://blogs.technet.microsoft.com/nanoserver/2016/04/27/nanoserverapiscan-exe-updated-for-tp5/. Si vous souhaitez vérifier la comptabilité de votre application .NET, il existe un autre outil : https://github.com/Microsoft/dotnet-apiport/releases. Cependant, dans des contextes bien précis il peut s’avérer très utile. Tous les développeurs disposant de la version Windows 10 Anniversaire pourront apprécier Nano Server et découvrir la technologie Windows Containers en développant sur .NET Core par exemple.

Server Core

C’est une version relativement standard du noyau Windows, excepté qu’elle ne possède pas d’interface graphique. La maîtrise de PowerShell est sans doute un plus pour administrer Server Core. Son image est aussi compatible avec la technologie Windows Containers. Mais contrairement au Nano Server, il possède l’essentiel des services Windows standard permettent d’exécuter du code serveur Win32 ou .NET sans trop de soucis. C’est donc cette version qui sera sans doute le plus utilisée dans les grandes entreprises.

Windows Server Full Gui

Cette version est sans doute à utiliser en tant que serveur desktop. En effet ce serveur propose une interface graphique similaire à Windows 10 avec toutes les interfaces supplémentaires permettant administré un serveur « à la souris ». Naturellement n’est pas compatible pour hydrater en tant que conteneur. Par contre, on peut parfaitement installer l’infrastructure docker afin d’héberger des images reposant sur Server Core.

Comme nous l’avons vu, les deux serveurs capables de s’exécuter dans un conteneur ne possèdent pas d’interface graphique. Pour d’administrer les Windows Containers pleinement une extension spécifique docker pour PowerShell est disponible (https://msdn.microsoft.com/en-us/virtualization/windowscontainers/management/docker-powershell), cette extension permet d’exécuter de commande similaire aux commandes CLI Docker, mais elles permettent aussi d’administrer l’infrastructure Windows Containers et d’être combinable avec d’autres extensions d’administration PowerShell.

 

En conclusion

Il est certain que cette nouvelle offre va rencontrer un franc succès dans les rangs des spécialistes Microsoft. Qu’ils travaillent pour de grandes entreprises ou bien des startups, l’offre semble répondre à tous les types de besoins.

La mise à disposition de Windows Containers à travers la mise à jour anniversaire de Windows 10 constitue une belle opportunité de se familiariser avec cette nouvelle technologie. Cette première version ne supporte que des conteneurs compatibles Nano Server, mais Microsoft a déjà annoncé qu’il supportera aussi les images à base de Server Core à terme.

L’engagement de Microsoft avec Docker Inc. constitue un élément majeur à plusieurs titres :

  • Il confirme la transformation de Microsoft vis-à-vis de l’open source. En s’engageant au côté d’un symbole moderne et ouvert tel que Docker Inc. Microsoft envoie un signal fort. C’est le début d’une nouvelle forme de déploiement dans monde Microsoft. Au regard des moyens engagés, l’année 2017 devrait être importante pour l’offre Windows Containers.
  • Il apporte à l’écosystème docker, un complément qui se faisait attendre et qui permet d’imaginer des plateformes de clusters hybrides où depuis un client docker, une commande lance des traitements à la fois sous Linux et Windows en toute simplicité.

image

  • Il définit une nouvelle forme de binaire de déploiement compatible Cloud qui permettra sans nul doute de franchir un niveau de service, comme TCP/IP a pu le faire en son temps.

2 commentaires sur “Vous avez dit Windows et Docker ?

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s