Blog de Florent Appointaire

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

    [Meetup] Découvrir les Windows Containers

    Le PowerShell User Group français m’a convié à faire une présentation concernant les Windows Containers.

    Ce dernier aura lieu le Mercredi 11 Janvier, de 19h à 21h, où vous pourrez suivre une session que je donnerai personnellement et ensuite, nous pourrons interagir autour d’un Q/A.

    Le lien pour s’enregistrer est disponible ici: http://www.meetup.com/fr-FR/FrenchPSUG/events/233089259/

    En espérant vous voir nombreux Sourire

    • 2/8/2016

    [WS2016] Débuter avec les Windows Containers

    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