日本語版はエラー(コンテナにIISをインストールできない)するので英語版をインストール。
この時、地区もキーボードは101を選択のこと。
Download
以降はすべて英語モードのPowerShaell (\→バックスラッシュ)
PS C:\Windows\system32> $Container=New-Container -Name "IISC" \ -ContainerImageName "WindowsServerCore" -SwitchName "Virtual Switch"
PS C:\Windows\system32> Start-Container -Name IISC
PS C:\Windows\system32> $Container=Get-Container -Name IISC PS C:\Windows\system32> Enter-PSSession -ContainerId $Container.ContainerId -RunAsAdministrator
コンテナにIISをインストール
[IISC]: PS C:\Windows\system32> Install-WindowsFeature Web-Server
Success Restart Needed Exit Code Feature Result
------- -------------- --------- --------------
True No Success {Common HTTP Features, Defaul...
[IISC]: PS C:\Windows\system32> EXIT PS C:\Windows\system32> Stop-Container $Container PS C:\Windows\system32> New-ContainerImage -ContainerName $container.Name -Publisher "JE2ISM" -Name "IISCImage" -Version 1.0 Name Publisher Version IsOSImage ---- --------- ------- --------- IISCImage CN=JE2ISM 1.0.0.0 False
IISをインストールしたコンテナをコンテナイメージとして保存しておくことで、何度でもコピーして使い回すことができる
作成したコンテナイメージをエクスポートしてAPPXファイルとし、他のコンテナホストにインポートすることで、コンテナイメージを配布するできる
エクスポート
PS C:\Windows\system32> $image = Get-ContainerImage -Name "IISCImage"
PS C:\Windows\system32> Export-ContainerImage -Image $image -Path "C:\DockerImages"
PS C:\Windows\system32> dir C:\DockerImges\
Directory: C:\DockerImges
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/20/2016 5:26 PM 169458212 CN=JE2ISM_IISCImage_1.0.0.0.APPX
インポート
PS C:\Windows\system32> Import-ContainerImage -Path "C:\DockerImages\CN=JE2ISM_IISCImage_1.0.0.0.APPX" Name Publisher Version IsOSImage ---- --------- ------- --------- IISCImage CN=JE2ISM 1.0.0.0 False
基本ポートフォーワード
NetWorkの確認
[IISC]: PS C:\Windows\system32> ipconfig Windows IP Configuration Ethernet adapter vEthernet (Virtual Switch-37FF57D3-DB68-4719-97D7-32507F1F2AD4-0): Connection-specific DNS Suffix . : flets-west.jp Link-local IPv6 Address . . . . . : fe80::4d10:4fe6:7569:505e%17 IPv4 Address. . . . . . . . . . . : 172.16.0.2 Subnet Mask . . . . . . . . . . . : 255.240.0.0 Default Gateway . . . . . . . . . : 172.16.0.1
NATの確認
[IISC]: PS C:\Windows\system32> 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
ポートフォーワードの設定
[IISC]: PS C:\> 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
コンテナホストのファイアウォールのTCP80番ポートを開く
GUIの「Windowsファイアウォール」でも設定可能
ホスト側で
PS C:\> if (!(Get-NetFirewallRule | where {$_.Name -eq "TCP80"})) \
{New-NetFirewallRule -Name "TCP80" -DisplayName "HTTPon 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
[IISC]: PS C:\Windows\system32> Get-NetNatSession
NatName : ContainerNAT
InternalRoutingDomainId : {b1062982-2b18-4b4f-b3d5-a78ddb9cdd49}
CreationTime : 3/20/2016 5:55:18 PM
Protocol : 6
InternalSourceAddress : 172.16.0.2
InternalSourcePort : 80
InternalDestinationAddress : 192.168.10.47
InternalDestinationPort : 56573
ExternalSourceAddress : 192.168.10.93
ExternalSourcePort : 80
ExternalDestinationAddress : 192.168.10.47
ExternalDestinationPort : 56573