日本語版はエラー(コンテナに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