Dockerとの相互運用性が向上したWindowsコンテナ[前編]:vNextに備えよ! 次期Windows Serverのココに注目(51)(3/3 ページ)
Windows Server 2016 TP5のTP4からの変更点の多くは、Windows Server 2016で初めて搭載されることになる新機能に集中している印象です。それは、「Windowsコンテナ」に関してです。
「Transparentモード」によるコンテナのネットワーク接続
Windowsコンテナは、既定でNATタイプの仮想スイッチに接続され、コンテナホストのネットワーク接続とファイアウォールを介して外部に接続されます。Dockerコマンドの「-p 外部ポート番号:内部ポート番号」パラメータを使用すると、NATの静的なポートマッピングと「Windowsファイアウォール」の受信規則が自動構成され、コンテナ内で実行されるネットワークサービスを外部に公開することが可能になります。
Windows Server 2016 TP5およびWindows 10 Insider Preview(ビルド143xx)では、既定のNATモードに加えて、「Transparentモード」がサポートされます。Transparentモードは、コンテナをコンテナホストと同じネットワークセグメントに接続し、そのセグメント内で利用可能なDHCPサーバからIPアドレスを動的に割り当てるモードです(画面4)。
Transparentモードは、「New-ContainerNetwork」コマンドレットまたはDockerコマンドで作成するかのいずれかで準備できます。また、ネットワークの明示的な指定はDockerコマンドの「--net=ネットワーク名」パラメータで指定できます。
New-ContainerNetwork -Name mytransparentnet -Mode Transparent -NetworkAdapterName "ネットワークアダプター名"
または
docker network create -d transparent mytransparentnet
この他、新たに「L2ブリッジモード」「L2トンネルモード」もサポートされています。詳しくは、以下のドキュメントで説明されています。
- Windows Container Networking[英語](MSDN)
DockerデーモンへのTLS接続を有効にするには
Dockerデーモンは、既定でローカルのDockerクライアントからの「名前付き接続」のみをサポートします。オプションでTCPポート2376によるリモートからのTLS接続を有効化できます。その方法は、LinuxベースのDockerデーモンの場合とほとんど共通です。
具体的には、PEM(Privacy Enhanced Mail)形式でコンテナホスト用の証明書ファイル(ca.pem、server-cert.pem、server-key.pem)と、クライアント用の証明書(ca.pem、cert.pem、key.pem)を準備し、Dockerデーモンとクライアントの両方でTLS接続を構成します。
Dockerデーモン側では、「C:\ProgramData\docker\config\daemon.json」にTLSの構成を記述し(2016年5月末からの新しい手順)、「C:\ProgramData\Docker\certs.d」フォルダを作成して、ここにPEM形式の証明書を配置します。以下のコマンドラインを実行してDockerデーモンを再起動すると、TLS接続が有効になります。
Stop-Service Docker Start-Service Docker
リモート接続を許可するには、WindowsファイアウォールでTCPポート2376への着信を許可する必要もあります。それには、次のコマンドラインを実行します。
netsh advfirewall firewall add rule name="Docker daemon" dir=in action allow protocol=tcp localport=2376
Dockerクライアント側は、ユーザーのホームディレクトリ(Windowsの場合は「%USERPROFILE%」フォルダ)に「.docker」フォルダを作成し、この中にPEM形式の証明書ファイルを配置して、環境変数「DOCKER_HOST」および「DOCKER_TLS_VERIFY」を設定します。Windowsの場合、Dockerクライアントのバイナリは、Windows PowerShellで次のコマンドレットを実行することでインストールできます(画面5)。
New-Item -Type Directory -Path 'C:\Program Files\docker\' Invoke-WebRequest https://aka.ms/tp5/b/docker -OutFile $env:ProgramFiles\docker\docker.exe [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Program Files\Docker", [EnvironmentVariableTarget]::Machine)
ちなみに、Windows PowerShellでコンテナを作成、実行する場合はローカル接続しかサポートしていません。リモートからの接続には、「リモートデスクトップ接続」や「PowerShell Remoting」との組み合わせが必要です。
PEM形式の証明書ファイルの準備には、Bash on Ubuntu on Windowsが便利
TLS接続のためのPEM形式の証明書ファイルは、通常、「OpenSSL」を使用して準備します。LinuxであればOpenSSLを標準で利用できるので簡単ですが、Windowsの場合、どうするか悩むかもしれません。
Windows向けのLinux互換環境である「Cygwin」や、GNUツールのWindows移植版である「MinGW」「MinGW-W64」を導入して、これらに含まれるOpenSSLを使うのがよく利用される方法でした。
Windows 10 Insider Preview(ビルド14295以降)には「Windows Subsystem for Linux(Beta)」が搭載され、UbuntuのネイティブなBash環境を提供する「Bash on Ubuntu on Windows」を利用できるようになりました。
Bash on Ubuntu on Windowsでは、もちろんOpenSSLを利用できます。Windowsのファイルシステムにも「/mnt/c/...」のパスで簡単にアクセスできるので、ファイルのやりとりで悩むこともありません(画面6)。なお、Windows Server 2016には、Windows Subsystem for LinuxとBash on Ubuntu on Windowsが提供される予定はないようです。
この他、Windowsで扱う証明書ファイルを「.cer」または「.crt」形式でエクスポートすれば、拡張子を「.pem」に変更するだけで、PEM形式の証明書ファイルとして利用できるようです。この方法については、以下の記事を参考にしてください。
- Windows上で、証明書や秘密鍵をPEM形式に変換してエクスポートする(Windows Server Insider:Tech TIPS)
筆者紹介
山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。
Copyright © ITmedia, Inc. All Rights Reserved.