Blog de Florent Appointaire

Blog sur les technologies Microsoft (Windows Server, System Center, Azure, Windows Azure Pack/Azure Stack, etc;)

[Docker] Image2Docker: Bye bye IIS sur Windows Server, Hello IIS sur Windows Containers

Image2Docker est un outil de conversion de certains de vos rôles Windows Server vers des Containers docker (sur Windows, évidemment).

Avec cette nouvelle version, il est possible d'extraire les sites web ASP.NET pour les faire tourner dans des conteneurs. Pour commencer, j'ai créé une VM avec 3 sites ASP.NET. Voici la vue depuis IIS Manager:

Et la vue depuis Internet Explorer:

Ici, nous allons migrer le site web WebApiApp. Pour commencer, sur la machine d'où vous voulez convertir ces sites, installez le module PowerShell Image2Docker:

Install-Module Image2Docker

Voici les rôles qu'il est possible de convertir en conteneur windows:

Maintenant, copiez le VHD ou VHDX où sont stockés les sites web. Exécutez la commande suivante pour extraire tous les sites web:

ConvertTo-Dockerfile -ImagePath C:\Temp\FLOAPP-IIS01_OS.vhdx -OutputPath C:\Temp\GlobalIIS -Artifact IIS -Verbose

L'argument ImagePath contient le chemin vers votre VHD/VHDX, le paramètre OutputPath est le chemin où les fichiers seront copiés et enfin, le paramètre Artifact est IIS pour préciser de s'occuper que des sites web et rien d'autre. Après quelques instants, vos sites sont extraits:

Comme vous le voyez, un fichier Dockerfile est apparu. Ce fichier contient tous les paramètres nécéssaires pour créer une image WindowsServerCore sur un container, ajouter les features IIS pour exécuter des sites web ASP.NET, copiez les sources dans le bon dossier IIS du container, créer le site web associé et enfin, exposer le port publiquement:

Je vais maintenant extraire un seul site, en rajoutant le paramètre ArtifactParam suivi du nom du site web:

ConvertTo-Dockerfile -ImagePath C:\Temp\FLOAPP-IIS01_OS.vhdx -OutputPath C:\Temp\WebApiApp -Artifact IIS -ArtifactParam WebApiApp -Verbose

Voici le Dockerfile associé, avec cette fois, un seul site web à créé, ce qui est normal, car j'ai demandé l'extraction d'un seul site:

Nous allons maintenant créer l'image docker à partir de ce Dockerfile. Pour créer l'image, déplacez vous dans le dossier où est le Dockerfile et exécutez la commande suivante. Vous pouvez modifier le nom de l'image qui est dans mon cas florentapp/webapiapp:

cd C:\Temp\WebApiApp
docker build -t florentapp/webapiapp .

Créez maintenant un container à partir de cette image. Pour ma part, j'expose le port 8080 que je lie avec le port 8080 du site web qui est sur mon container. Je lui donne également le nom webapiapp. La commande docker logs me donne l'information des logs du container, et notamment le moment quand le service IIS est démarré:

docker run -d -p 8080:8080 --name webapiapp florentapp/webapiapp
docker logs webapiapp

Utilisez ensuite la commande docker inspect pour retrouver l'adresse IP de votre container:

docker inspect webapiapp

Avec Internet Explorer, vous pouvez accéder à votre site web qui est sur votre container:

http://172.19.136.162:8080

Sur le serveur qui exécute le container IIS, vous aurez pour chaque container IIS un service w3wp qui sera créé.

En espérant que ce script vous aidera à migrer rapidement vos sites web vers des containers Windows.

Si vous avez des questions, n'hésitez pas :)

Facebook Like
Anonymous