概要
Windows 8.1 で docker を使用するには、Virtualbox を使用しないといけません。Docker ホストは docker-engine をインストールした段階ではリモートから接続できません。今回はリモートから TCP の 2375 番ポートで接続できるように Docker ホストを設定します。また、設定できたことを確認するため Docker クライアントからの接続も試みます。
環境
- Docker クライアント
- Windows 8.1
- Docker Toolbox 1.12.2
- Docker ホスト
- Oracle Linux 7 update 2
- docker-engine 1.12.3
- Virtualbox 5.1.x
Docker ホストの設定
リモートにいる Docker クライアントから接続できるように設定します。クライアントから接続するためのポートと IP を確認します。Docker ホストが持つ全ての IP の 2375 ポートで接続できるようにします。
設定ファイルの場所を確認
$ rpm -ql docker-engine | grep docker.service$
/usr/lib/systemd/system/docker.service
所持する全ての IP で tcp の 2375 番ポートでリッスンするように ExecStart に-H tcp://0.0.0.0:2375
を追加
$ vim /usr/lib/systemd/system/docker.service
[Service] # ExecStart=/usr/bin/dockerd ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375
設定の反映と docker の再起動
$ systemctl daemon-reload
$ systemctl restart docker
TCP の 2375 で動いていることを確認
$ netstat -tln | grep 2375
tcp6 0 0 :::2375 :::* LISTEN
ホストオンリーアダプタ(今回は enp0s8 )の IP を確認
$ ifconfig | grep -A 1 enp
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 -- enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.56.100 netmask 255.255.255.0 broadcast 192.168.56.255
※注意:ファイアーウォールの設定
Windows からのリクエストを受付けるため Docker ホストとなる OS のファイアーウォールで TCP の 2375 ポートを通すように設定しないといけません。今回は試すだけなのでファイアーウォールを停止します。ちゃんと使う場合はキチンと設定しましょう。 Oracle Linux 7 からはファイアーウォールに iptables ではなく firewalld を使用しています。
ファイアーウォールを停止して起動しないようする
systemctl stop firewalld
systemctl disable firewalld
Docker クライアントの設定
Docker クライアントは Docker ホストが待ち受けている IP とポートへ接続します。クライアントは接続したい Docker ホストを指定します。Docker ホストの指定は実行時に指定する方法と環境変数で指定する方法があります。
実行時に Docker ホストを指定する方法
実行時に -H オプションを付けてその後に待ち受けている IP とポートを指定します。
$ docker -H tcp://192.168.56.100:2375 run hello-world
Hello from Docker! (略)
環境変数で Docker ホストを指定する方法
Docker ホストの指定は DOCKER_HOST 環境変数で指定します。
set DOCKER_HOST=tcp://192.168.56.100:2375
環境変数で指定した場合には実行時に指定する必要はありません。
$ docker run hello-world
Hello from Docker! (略)