Host een Web Server in een Container

We gaan een webserver maken en die laten runnen in een Windows Server Container. Hiervoor hebben we Windows Server 2016 (TP3) en deze geconfigureerd als Container Host. Zie ook dit artikel…

Aanmaken van de Container

We starten powershell als administrator en geven het volgende commando om een container te maken:

$container = New-Container -Name "WebContainer" -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch"

Start de container met

Start-Container -Name WebContainer

We maken een remote Powershell naar de container met:

Enter-PSSession -ContainerId (Get-Container WebContainer).id -RunAsAdministrator

Installeren van de webserver software

Vervolgens halen we de zip-file van nginx op:

wget -uri 'http://nginx.org/download/nginx-1.9.3.zip' -OutFile "c:\nginx-1.9.3.zip"

en pakken deze uit in de root van de container:

Expand-Archive -Path C:\nginx-1.9.3.zip -DestinationPath c:\ -Force

Tot zover de voorbereidingen voor de webserver container. We verlaten de sessie met:

exit

en stoppen de container met

Stop-Container $container

Aanmaken Container Image

We maken nu een image van de container met:

$webserverimage = New-ContainerImage -Container $container -Publisher DigitalInfo -Name nginxwindows -Version 1.0

ter controle:

Get-ContainerImage

Uitrollen webserver container

$webservercontainer = New-Container -Name webserver1 -ContainerImageName nginxwindows -SwitchName "Virtual Switch"

Starten van de container doen we met het volgende commando:

Start-Container $webservercontainer

We maken een remote Powershell sessie met:

Enter-PSSession -ContainerId $webservercontainer.ContainerId -RunAsAdministrator

Nu kan de webserver gestart worden met:

cd c:\nginx-1.9.3\
start nginx

en zijn we klaar met de remote sessie, dus:

exit

Testen van de webserver

Hierna testen we de URL met http://172.16.0.2
nginx1
Om nu vanaf een willekeurige computer de webserver te kunnen benaderen dient er een NAT rul aangemaakt te worden op de Container Host. De server is met een fysieke adapter verbonden (op IP-adres 192.168.1.10) aan ons lokale netwerk en hier dient dan de NAT rule op gezet te worden. Start een Command Prompt als Administrator en geef het volgende commando:

netsh interface portproxy add v4tov4 listenport=80 listenaddress=192.168.1.10 connectport=80 connectaddress=172.16.0.2

Controle kan met het volgende commando:

netsh interface portproxy show all

Listen on ipv4:             Connect to ipv4:
Address         Port        Address         Port
--------------- ----------  --------------- ----------
192.168.1.10	80          172.16.0.2      80

De browser van elke PC (of tablet) op het lokale netwerk kan nu naar de URL: http://192.168.1.10

Uiteraard kan de Internet modem ook geconfigureerd worden om een extern adres door te NAT’ten naar dit adres zodat de webserver ook vanaf het Internet bereikbaar is.