コンテナーのネットワーク接続は、NAT(ネットワークアドレス変換)タイプの仮想スイッチ「Virtual Switch」と、NATの構成「ContainerNAT」により実現されます。これは、PowerShellでコンテナーを作成する場合と同様です。PowerShellの場合は、「New-Container」コマンドレットでコンテナーを作成する際に「-SwitchName」パラメーターに仮想スイッチを指定しましたが、Dockerコマンドでは何も指定しなくても「docker run」コマンドでコンテナーを作成、実行すると、仮想スイッチに接続されます。
NATの背後に配置されるコンテナーのネットワークサービスに対して、コンテナーホストの外部からの接続を可能にするには、PowerShellでは本連載の第28回「IISコンテナーの作成で理解するコンテナーのネットワーク機能」で説明したように、コンテナーホスト側で「Windowsファイアウォールの規則の作成(New-NetFirewallRuleコマンドレットやnetshコマンド)」と「ポートフォワーディングの設定(Add-NetNatStaticMappingコマンドレット)」が必要になります。
対して、Dockerコマンドでは「docker run」コマンドに「-p <コンテナーホストのポート番号>:<コンテナー側のポート番号>」パラメーターを指定して実行することで、ポートフォワーディングの設定が自動構成されます(画面6)。追加で構成する必要があるのは、コンテナーホスト側でのWindowsファイアウォールの規則の作成だけです。
Docker Hubを検索すると、Windows Server TP3用のレジストリでWindows Serverコンテナーベースのイメージが利用可能になっています。IIS(microsoft/iis)やASP.NET(microsoft/dnx-clr)、Ruby(microsoft/ruby)、Python(microsoft/phython)などです。これらのイメージは、「docker pull」コマンドでコンテナーホストにダウンロードすることができます(画面7)。
例えば、IISのイメージ「microsoft/iis」をダウンロードし、「docker run」コマンドでコンテナーを作成して実行すると、IISを素早く展開できます(画面8)。現状、「docker push」コマンドは機能しませんが、Dockerエコシステムと統合されたDockerらしい使い方を示す例です。これは、PowerShellベースの管理にはない機能です(Export-ContainerImage/Import-ContainerImageコマンドレットによる、ファイルベースのエクスポート/インポートは可能です)。
ここまで、DockerコマンドによるWindows Serverコンテナーのローカル管理について、Dockerと同じように操作できることを説明してきましたが、Dockerはリモート管理が可能です。ただし、LinuxベースのDockerと同様、Dockerのリモート管理を有効にするには「TLSの構成」が必要になります。
Windows Server 2016 TP3のDocker Daemonは、既定で「TLSなしのローカル接続(ローカルのTCPポート2375に対する接続)」のみが有効になっています。リモート接続(TCPポート2376)に対応させるためには、「openssl」コマンドを使用してTLS接続用の証明書を作成し、「C:¥ProgramData¥docker¥certs.d」フォルダーに配置する必要があります。TLS接続用の証明書の具体的な作成手順については、筆者の個人のブログにまとめてありますので参考にしてください。
次の画面9は、リモートのWindowsおよびLinux(CoreOS)のDockerクライアントから、Windows Server 2016 Technical Preview 3のWindows Serverコンテナーを操作しているところになります。
岩手県花巻市在住。Microsoft MVP:Hyper-V(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手がける。個人ブログは『山市良のえぬなんとかわーるど』。
Copyright © ITmedia, Inc. All Rights Reserved.