WindowsコンテナでWebサーバー!IISだって動きます!

はじめに

くどうです。
前回のコンテナの基本的な扱いの続きです。今回は、ContainerでWebサーバーを起動して接続してみます。

Quick Start
https://msdn.microsoft.com/virtualization/windowscontainers/quickstart/managepowershell#HostaWebServerinaContainer

Azureの設定

Containerで利用されるIPアドレスが172.16.0.0/24です。
仮想マシンに割り当てられるIPアドレスは172.16.0.0/16のため、重複するとQuik Start通りにいきません。
そこで、仮想マシンを作成する過程でIPアドレスを変更します。
図のようにプレビューポータルでは、作成時にIPアドレスの設定をします。
CIDRを10.0.0.0/16に指定します。

cont001

もしくは、仮想ネットワークへ作成し所属させましょう。

エンドポイントを指定します。HTTPをTCPでパブリックポート:80、プライベートポート:80で作成します。

cont002

プレビューポータルでの設定は完了です。

Containerの設定

Powershellを起動します。

C:Userslocaladmin>powershell
Windows PowerShell
Copyright (C) 2015 Microsoft Corporation. All rights reserved.

New-ContainerコマンドでContainerを作成します。

PS C:Userslocaladmin> $contanier = New-Container -Name webbase -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch"

Start-ContainerコマンドでContainerを起動します。

PS C:Userslocaladmin> Start-Container $contanier.ContainerName

Enter-PSSessionコマンドでContainerに接続します。

PS C:Userslocaladmin> Enter-PSSession -ContainerId $contanier.ContainerId -RunAsAdministrator

Quik Startではnginxをインストールしていますが、せっかくのWidnowsServerなのでIISをインストールします。
Add-WindowsFeatureコマンドでWeb-Serverを追加します。

[0618348c-2e8]: PS C:Windowssystem32> Add-WindowsFeature Web-Server

Success Restart Needed Exit Code      Feature Result
------- -------------- ---------      --------------
True    No             Success        {Common HTTP Features, Default Document, D...

IPを確認します。

[0618348c-2e8]: PS C:Windowssystem32> .ipconfig.exe

Windows IP Configuration


Ethernet adapter vEthernet (Virtual Switch-0618348C-2E8E-48BF-AF97-061F69F59C67-0):

   Connection-specific DNS Suffix  . : lv69cont01.b9.internal.cloudapp.net
   Link-local IPv6 Address . . . . . : fe80::c9a8:f10c:5688:fac6%19
   IPv4 Address. . . . . . . . . . . : 172.16.0.2
   Subnet Mask . . . . . . . . . . . : 255.240.0.0
   Default Gateway . . . . . . . . . : 172.16.0.1

終了します。

[0618348c-2e8]: PS C:Windowssystem32> exit

Get-NetNatコマンドでのNameを確認します。
ContainerNATです。

PS C:Userslocaladmin> Get-NetNat


Name                             : ContainerNAT
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 172.16.0.0/12
IcmpQueryTimeout                 : 30
TcpEstablishedConnectionTimeout  : 1800
TcpTransientConnectionTimeout    : 120
TcpFilteringBehavior             : AddressDependentFiltering
UdpFilteringBehavior             : AddressDependentFiltering
UdpIdleSessionTimeout            : 120
UdpInboundRefresh                : False
Store                            : Local
Active                           : True

Add-NetNatStaticMappingコマンドでポートフォワーディングの設定をします。
InternalIPAddressには、ContainerのIPを指定します。ExternalIPAddressには0.0.0.0を指定します。

PS C:Userslocaladmin> Add-NetNatStaticMapping -NatName "ContainerNAT" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.16.0.2 -InternalPort 80 -ExternalPort 80


StaticMappingID               : 0
NatName                       : ContainerNAT
Protocol                      : TCP
RemoteExternalIPAddressPrefix : 0.0.0.0/0
ExternalIPAddress             : 0.0.0.0
ExternalPort                  : 80
InternalIPAddress             : 172.16.0.2
InternalPort                  : 80
InternalRoutingDomainId       : {00000000-0000-0000-0000-000000000000}
Active                        : True

ファイヤーウォールの設定をします。HTTP(TCP/80)を開けます。

PS C:Userslocaladmin> if (!(Get-NetFirewallRule | where {$_.Name -eq "TCP80"})) { New-NetFirewallRule -Name "TCP80" -DisplayName "HTTP on TCP/80" -Protocol tcp -LocalPort 80 -Action Allow -Enabled True }


Name                  : TCP80
DisplayName           : HTTP on TCP/80
Description           :
DisplayGroup          :
Group                 :
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : The rule was parsed successfully from the store. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

確認

仮想 IP アドレスを確認し、IISのデフォルトページが表示できることを確認します。

cont003

まとめ

Containerの設定を行いました。ContainerがWindowsなのでIISが動きます。
多少、Quick Startにははまりましたが、問題なく動作しています。
Azureの場合は、エンドポイントの指定など設定ポイントが少々異なります。気を付けましょう。
ではでは。