Dockerとの相互運用性が向上したWindowsコンテナ[前編]vNextに備えよ! 次期Windows Serverのココに注目(51)(3/3 ページ)

» 2016年06月16日 05時00分 公開
[山市良テクニカルライター]
前のページへ 1|2|3       

「Transparentモード」によるコンテナのネットワーク接続

 Windowsコンテナは、既定でNATタイプの仮想スイッチに接続され、コンテナホストのネットワーク接続とファイアウォールを介して外部に接続されます。Dockerコマンドの「-p 外部ポート番号:内部ポート番号」パラメータを使用すると、NATの静的なポートマッピングと「Windowsファイアウォール」の受信規則が自動構成され、コンテナ内で実行されるネットワークサービスを外部に公開することが可能になります。

 Windows Server 2016 TP5およびWindows 10 Insider Preview(ビルド143xx)では、既定のNATモードに加えて、「Transparentモード」がサポートされます。Transparentモードは、コンテナをコンテナホストと同じネットワークセグメントに接続し、そのセグメント内で利用可能なDHCPサーバからIPアドレスを動的に割り当てるモードです(画面4)。

画面4 画面4 「Transparentモード」の仮想スイッチを介して、コンテナホストと同じセグメント(192.168.10.0/24)に接続されたコンテナ

 Transparentモードは、「New-ContainerNetwork」コマンドレットまたはDockerコマンドで作成するかのいずれかで準備できます。また、ネットワークの明示的な指定はDockerコマンドの「--net=ネットワーク名」パラメータで指定できます。

New-ContainerNetwork -Name mytransparentnet -Mode Transparent -NetworkAdapterName "ネットワークアダプター名"

または

docker network create -d transparent mytransparentnet


 この他、新たに「L2ブリッジモード」「L2トンネルモード」もサポートされています。詳しくは、以下のドキュメントで説明されています。

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)

画面5 画面5 コンテナホストでリモートのDockerクライアントからのTLS接続を許可する方法は、LinuxベースのDockerとほぼ共通

 ちなみに、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が提供される予定はないようです。

画面6 画面6 Windows 10 Insider PreviewのBash on Ubuntu on Windowsを利用した、OpenSSLによるPEM形式の証明書ファイルの準備

 この他、Windowsで扱う証明書ファイルを「.cer」または「.crt」形式でエクスポートすれば、拡張子を「.pem」に変更するだけで、PEM形式の証明書ファイルとして利用できるようです。この方法については、以下の記事を参考にしてください。

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。