Blog de Florent Appointaire

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

Avec la future version de Windows Server, 2016, qui sortira durant l’Ignite (Fin Septembre), une nouvelle fonctionnalité va faire son apparition. Il s’agit de conteneurs Windows.

Je vais dans ce tutoriel vous expliquer comment bien débuter avec ce nouveau rôle, sous Windows Server 2016 TP5.

Pour commencer, il faut installer le module ContainerImage sur le serveur qui hébergera les conteneurs:

Install-Module –Name ContainerImage

image

Vérifiez que le module est bien installé:

Get-Module –ListAvailable

image

Vous devez maintenant installer le rôle Containers:

Add-WindowsFeature Containers –Restart

image

Avec la commande Find-ContainerImage, vous allez avoir la liste des images disponibles comme base de vos conteneurs:

image

Pour installer une image, utilisez la commande suivante:

Find-ContainerImage –Name NanoServer | Install-ContainerImage

imageimage

Find-ContainerImage –Name WindowsServerCore | Install-ContainerImage

imageimage

Vérifiez que les images sont installées correctement:

Get-ContainerImage

image

On va maintenant créer le réseau, en mode NAT, pour que les conteneurs aient accès à Internet:

New-ContainerNetwork –Name ‘ContainerNetwork’ –SubnetPrefix 192.168.0.0/24 –Mode NAT

image

Une règle Nat sera également créée, automatiquement:

Get-NetNat

image

Nous allons maintenant créer un container, qui hébergera un site sur IIS. Utilisez les commandes suivante:

$containerNameIIS = "IISCore"
New-Container -Name $containerNameIIS -ContainerImageName WindowsServerCore -NetworkName "ContainerNetwork"
Set-ContainerNetworkAdapter -ContainerName $containerNameIIS -NewName "$containerNameIIS-NetAdapter"
$iisCore = Get-Container -Name $containerNameIIS
$iisCore
Add-ContainerNetworkAdapterStaticMapping -Container $iisCore -AdapterName "$containerNameIIS-NetAdapter" -ExternalPort 82 -InternalPort 80 -Protocol TCP
Start-Container -Name $containerNameIIS

image

Ici, nous allons créer un nouveau conteneur, on va lui ajouter un port mapping pour pouvoir accéder au futur site IIS et enfin, on va démarrer ce conteneur. Nous allons maintenant installer le rôle IIS. Connectez-vous sur le conteneur et lancez l’installation:

Enter-PSSession -ContainerName $containerNameIIS -RunAsAdministrator
Install-WindowsFeature Web-Server
Get-WindowsFeature Web-Server

image

Vous pouvez maintenant naviguer sur votre nouveau serveur Web:

image

Je vais maintenant faire une image de ce conteneur, pour avoir une base IIS. Pour commencer, arrêtez le conteneur; avec la commande Stop-Container -Name $containerNameIIS. Nous allons maintenant convertir ce conteneur pour en faire une image. Utilisez la commande suivante:

$iisCore | New-ContainerImage -Publisher FlorentAppointaire -Name $containerNameIIS -Version 1.0
Get-ContainerImage

image

Nous allons maintenant créer un conteneur par rapport à cette nouvelle image. Utilisez les commandes suivantes:

$newIISContainer = "IIS01"
New-Container –Name $newIISContainer –ContainerImageName $containerNameIIS -NetworkName “ContainerNetwork”
Set-ContainerNetworkAdapter -ContainerName $newIISContainer -NewName "$newIISContainer-NetAda"
$iisCore = Get-Container $newIISContainer
Add-ContainerNetworkAdapterStaticMapping -Container $iisCore -AdapterName "$newIISContainer-NetAda" -ExternalPort 83 -InternalPort 80 -Protocol TCP
Start-Container $newIISContainer

image

Je vais maintenant déployer un WebSite ASP.NET MVC personnalisé. J’ai créé ce site directement depuis visual studio 2015:

image

image

Je l’ai ensuite personnalisé:

image

Sur le serveur qui contient le conteneur, j’ai créé un dossier de partage, que j’ai appelé Share et où j’ai copié les sources de mon site web que je viens de créer. J’ai ensuite créé un utilisateur local, que j’ai ajouté en tant qu’administrateur local du serveur. J’ai partagé ce dossier avec cet utilisateur:

image

image

image

image

Je vais créer un nouveau conteneur pour cette application MVC, car il faut des features spécifiques. Utilisez les commandes suivante pour installer toutes les dépendances et pour convertir le conteneur en image:

$containerNameIISMVC = "IISForMvc"
New-Container –Name $containerNameIISMVC –ContainerImageName $containerNameIIS –NetworkName "ContainerNetwork"
Start-Container –Name $containerNameIISMVC
Enter-PSSession -ContainerName $containerNameIISMVC -RunAsAdministrator
Install-WindowsFeature Web-Default-Doc
Install-WindowsFeature Web-Dir-Browsing
Install-WindowsFeature Web-Http-Errors
Install-WindowsFeature Web-Static-Content
Install-WindowsFeature Web-Http-Logging
Install-WindowsFeature Web-Request-Monitor
Install-WindowsFeature Web-Stat-Compression
Install-WindowsFeature Web-Filtering
Install-WindowsFeature Web-Windows-Auth
Install-WindowsFeature Web-Net-Ext45
Install-WindowsFeature Web-Asp-Net45
Install-WindowsFeature Web-ISAPI-Ext
Install-WindowsFeature Web-ISAPI-Filter
Install-WindowsFeature Web-Metabase
Exit
Stop-Container –Name $containerNameIISMVC
Get-Container –Name $containerNameIISMVC | New-ContainerImage –Publisher FlorentAppointaire –Name $containerNameIISMVC –Version 1.0
Get-ContainterImage

image

La dernière étape consiste à créer un nouveau conteneur sur base de la dernière image, et de copier les sources de notre site dans ce conteneur:

$containerName = "FlorentAppointaireMVC"
New-Container –Name $containerName –ContainerImageName $containerNameIISMVC -NetworkName “ContainerNetwork”
Set-ContainerNetworkAdapter -ContainerName $containerName -NewName "$containerName-NetAda"
$iisCore = Get-Container $containerName
Add-ContainerNetworkAdapterStaticMapping -Container $iisCore -AdapterName "$containerName-NetAda" -ExternalPort 8080 -InternalPort 80 -Protocol TCP
Start-Container $containerName
Enter-PSSession -ContainerName $containerName -RunAsAdministrator
net use z: \\FLOAPP-CONT01\Share /user:FLOAPP-CONT01\Container Password!
Remove-Item C:\inetpub\wwwroot\iisstart.htm
Remove-Item C:\inetpub\wwwroot\iisstart.png
Remove-Item C:\inetpub\wwwroot\aspnet_client
Get-ChildItem -Path Z: | % { Copy-Item $_.fullname C:\inetpub\wwwroot -Recurse -Force}
Exit

image

Et si je navigue sur le port 8080, j’ai ce résultat:

image

La version vidéo est disponible ici: https://channel9.msdn.com/Blogs/MVP-Cloud-DataCenter/Windows-Container-avec-Windows-Server-2016-TP5

N’hésitez pas si vous avez des questions Sourire

Facebook Like
Anonymous