Windows Server 2016 Technical Preview 3 でいよいよ Docker が利用可能になり、Windows Server Container が提供されました。手順は簡単なのでこちらのチュートリアルに譲るとして、リモートの Docker クライアントから TLS でリモート接続して管理するための方法をまとめます。
Windows Containers
[URL] https://msdn.microsoft.com/en-us/virtualization/windowscontainers/containers_welcome
Linux 版の Docker と同様に、Windows 版の Docker もリモート接続は既定で無効になっています。こちらのフォーラムで、非 TLS 接続を有効にする方法がわかりますが、暗号化されませんし、認証もありませんので、決してお勧めできる方法ではありません。
Can I connect docker from remote docker client?
[URL] https://social.msdn.microsoft.com/Forums/en-US/9caf90c9-81e8-4998-abe5-837fbfde03a8/can-i-connect-docker-from-remote-docker-client?forum=windowscontainers
以下の画面は、非 TLS 接続 (2375/tcp) で Windows および CoreOS の Docker クライアントから Windows Server の Docker にリモート接続しているところです。あっ、そうそう。非 TLS 接続を可能にするには、C:\ProgramData\docker\RunDockerDaemon.cmd をいじるんですけど、このバッチファイルは改行コードが Windows の CR+LF ではない (おそらく Linux で作成してあるので LF) ので、メモ帳 (Notepad.exe) で開くと面倒なことになりますよ。
TLS によるリモート接続 (2376/tcp) を可能にするには、 OpenSSL で CA、サーバー、およびクライアントの証明書を準備してあげる必要があります。今回は、Windows 10 で証明書を準備して、Windows 10 上の Docker クライアントから Technical Preview 3 の Docker ホストに接続できるようにセットアップしてみます...
Windows 版 Docker クライアントを準備する
Windows 版の Docker クライアントは、Boot2docker で VirtualBox の Docker ホストイメージとともに入手する方法、Chocolatey で Docker クライアントだけを入手する方法がありますが...
Installation on Winodws
[URL] https://docs.docker.com/installation/windows/
Windows Server 2016 Technical Preview 3 向けの Docker.exe と同じバイナリをダウロードするのが速くて簡単だと思います。Windows PowerShell で次のコマンドラインを実行すれば、カレントディレクトリに Docker.exe をダウンロードできます。
wget -Uri http://aka.ms/ContainerTools -OutFile .\docker.exe -UseBasicParsing
12/15 追記)
TP4 の場合は wget -Uri https://aka.ms/tp4/docker ...
Windows 版の OpenSSL の入手
OpenSSL を含む Git for Windows をダウンロードしてインストール。
Git for Windows
[URL] https://git-for-windows.github.io/
スタート メニューの[すべてのアプリ > Git > Git CMD] を開く (管理者として実行はしなくてよい)。
OpenSSL へのパスが通ってないと思うので、次のコマンドラインを実行して設定する。
set PATH=%PATH%;"C:\Program Files\Git\MinGW64\bin
12/15 追記) 今のバージョンだとパスが %USERPROFILE%\AppData\Local\Programs\Git\MinGW64\bin とかにに変わったみたい。
以下のドキュメントを参考に、必要な証明書を準備します。
Protect the Docker daemon socket
[URL] https://docs.docker.com/articles/https/
こんな感じて、Docker ホスト用の ca.pem、server-cert.pem、server-key.pem と、Docker クライアント用の ca.pem、cert.pem、key.pem を作成します。 この例では、Docker ホストの FQDN に加えて、IP アドレス (10.0.0.105 と 127.0.0.1) で接続できるようにサブジェクト代替名も設定しています。
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
Common Name (e.g. server FQDN or YOUR name) []: <Docker ホストの FQDN>
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=<Docker ホストの FQDN>" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = IP:10.0.0.105,IP:127.0.0.1 > extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=<Docker クライアントの FQDN>' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
Docker ホストで TLS リモート接続を有効化する
Docker ホストの C:\ProgramData\docker フォルダーに certs.d フォルダーを作成し、ca.pem、server-cert.pem、server-key.pem の 3 つのファイルを certs.d フォルダーに保存します。
Docker ホストを再起動または Docker Daemon サービスを再起動します。Docker Daemonサービスの起動時、C:\ProgramData\docker\RunDockerDaemon.cmd によって、certs.d の証明書を使用してデーモンが開始され、ポート 2376 でリモート接続を受信するようになります。
netstat -a コマンドで 2376 ポートが LISTENING になっていることを確認し、Windows ファイアウォールで 2376 の受信トラフィックを許可するようにルールを追加します。
Docker クライアントから TLS でリモート接続する
Docker クライアントからは、こんな感じで、ca.pem、cert.pem、key.pem を指定して Docker ホストに接続します。
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H 10.0.0.105:2376 version
%USERPROFILE%\.dockerにca.pem、cert.pem、key.pem をコピーして、DOCKER_HOST と DOCKER_TLS_VERIFY 環境編集を設定してあげれば...
set DOCKER_HOST=tcp://10.0.0.105:2376
set DOCKER_TLS_VERIFY=1
こんな感じで、簡単なコマンドラインでリモート操作できます。
docker images
なお、TLS を有効化すると、Docker ホストのローカル操作も TLS 接続で行わないといけなくなるのでご注意。
関連:
このブログ > Docker Client for Windows > How to Build by Go (2015/04/17)
このブログ > Docker Client for Windows > How to Install by Chocolatey (2015/04/17)
@IT > 山市良のうぃんどうず日記(31:特別編):所要時間わずか10分で「Docker」を体験しよう――Azureで始めるDocker入門 (2015/04/13)
[URL] http://www.atmarkit.co.jp/ait/articles/1504/13/news020.html
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。