今回は、「Windows Serverコンテナー」で「Webサーバー(IIS)の役割」を有効化する操作を行いながら、コンテナーのネットワーク機能について説明します。前回と前々回をまだご覧になっていない方は、今回の記事を読む前にご覧ください。
「Windows Serverコンテナー」は、Windows Server 2016 Technical Preview 3(TP3)のServer Coreベースのアプリケーション実行環境です。コンテナー内ではサーバーの役割や機能を有効化したり、Server Coreに対応したアプリケーションをインストールしたりすることができます。例えば、「Webサーバー(IIS)の役割」を有効化すると、コンテナーでIIS(インターネットインフォメーションサービス)のWebサイトをホスティングすることができます。
なお、Windows Serverコンテナーは、Windows Serverの全てのサーバーの役割や機能をサポートしているわけではないことに注意してください。例えば、「Hyper-Vの役割」はサポートされません。Hyper-Vの役割は「Hyper-Vコンテナー」(Windows Server 2016 TP3では未提供)でサポートされる予定です。Windows Server 2016 TP3ではServerサービスが動作しないという制限があるため、ファイルサーバーとしても機能しません。
Windows Serverコンテナーの作成、開始、停止、削除の操作については、前回説明しました。今回は、作成したコンテナーで「Webサーバー(IIS)の役割」を有効化してみます。
とはいっても、複雑な操作は必要ありませんのでご安心ください。コンテナー内で「Install-WindowsFeature」コマンドレットを実行して、「Web-Server」をインストールするだけです(画面1)。コンテナーの作成から始めても、次のように数ステップで完了します。コンテナーの再起動も必要ありません。
1 PS C:\> New-Container -Name "MyCont01" -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch"
2 PS C:\> Start-Container -Name "MyCont01"
3 PS C:\> Enter-PSSession -ContainerId (Get-Container -Name "MyCont01").ContainerId -RunAsAdministrator
4 [コンテナーのPSセッション]:PS C:\Windows\System32> Install-WindowsFeature Web-Server
5 [コンテナーのPSセッション]:PS C:\Windows\System32> Exit
「Install-WindowsFeature」コマンドレットはコンテナーのPSセッションで対話的で実行する他、次のように「Invoke-Command」コマンドレットでコンテナーホスト側から実行することもできます。
PS C:\> Invoke-Command {Install-WindowsFeature Web-Server} -ContainerID (Get-Container -Name "MyCont01").ContainerId -RunAsAdministrator
前回も触れましたが、Windows Serverコンテナーは、コンテナーホストと同じ物理ネットワークに直接接続されることはなく、コンテナーホストが提供するNAT(ネットワークアドレス変換)の背後に配置されます。そのため、「Webサーバー(IIS)の役割」を有効化しても、物理ネットワーク側からコンテナーのWebサイトに接続する方法がありません。
コンテナーのWebサイトのTCPポート「80」に外部から接続できるようにするには、「セキュリティが強化されたWindowsファイアウオール」の受信の規則と、NATのポートフォワーディングを構成します。
例えば、コンテナーホストの外部IPアドレスのTCPポート「8080」を、コンテナーのIPアドレス「172.16.0.2」のTCPポート「80」に転送するには、コンテナーホストで次の2つのコマンドラインを実行します。
1 PS C:> New-NetFirewallRule -Name "ファイアウオールの規則名" -DisplayName "規則の表示名" -Protocol TCP -LocalPort @(8080) -Action Allow
2 PS C:> Add-NetNatStaticMapping -NatName ContainerNAT -Protocol TCP -ExternalPort 8080 -ExternalIPAddress 0.0.0.0 -InternalPort 80 -InternalIPAddress 172.16.0.2
1つ目のコマンドラインは、ローカルのTCPポート「8080」への接続を許可するファイアウオールの受信の規則を作成しています。2つ目のコマンドラインは、ローカルのTCPポート「8080」を、コンテナーのTCPポート「80」にポートフォワーディングするための静的マッピング情報を作成しています。
これで、コンテナーホストの外部にあるコンピューターのWebブラウザーからURL「http://<コンテナーの外部IPアドレス>:8080/」にアクセスすれば、コンテナーのWebサイトに接続できるようになります(画面2)。
なお、コンテナーホストからコンテナーへのアクセスに対しては、NATのポートフォワーディングが機能しないことに注意してください。コンテナーホストとコンテナーは同じ「172.16.0/12」のIPサブネットに接続されており、コンテナーホストからはコンテナーのIPアドレスでアクセスすることができます。
念のため、Windowsファイアウオールの受信の規則とNATの構成を削除する方法も紹介しておきましょう。先ほど作成した受信の規則と静的ポートマッピング情報は、次の2つのコマンドラインで削除できます。
1 PS C:> Get-NetFirewallRule -Name "ファイアウオールの規則名" | Remove-NetFirewallRule
2 PS C:> Remove-NetNatStaticMapping -NatName ContainerNAT -StaticMappingID (Get-NetNatStaticMapping|? {$_.ExternalPort -eq 8080}).StaticMappingId
Copyright © ITmedia, Inc. All Rights Reserved.