最近サービスを作っていて、docker化したが故にdockerが入っていない人に確認してもらうのにハードルが上がったようなそうでないような事を感じる昨今です。
というのもOSXの環境下だとdocker machineという仮想マシンがいるので、通信関係がややこしいんですよね。
やりたいことは以下の感じです。
この説明はOSX 上でVirtualBox上にdocker machineのVMが走っていることが前提となっています。
※リモートと書いてますけど、語弊が生まれそうなのは承知の上です。
docker machineVMにBridgeを追加する
docker machineを落としてください。
[bash] $ docker-machine stop {machine name} (docker) Stopping VM... [/bash]
VirtualBoxの画面を開いて
※ここでは日本語化しているので、されていない環境においては読みかえてください
[設定]から[ネットワーク]を開き
上の図のように図のようにアダプター3へブリッジアダプターを追加して名前部分にホストマシンで使っているEthernetを選択します。
それで、いつものようにdocker machineを立ち上げてください。
[bash]
$ docker-machine start {machine name}
(docker) Starting VM...
Started machines may have new IP addresses. You may need to re-run the docker-machine env
command.
$ eval $(docker-machine env {machine name})
[/bash]
そこから、ブリッジに振られたIPアドレスを調べます。
[bash] $ docker-machine ssh {machine name} ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""_/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ _ o / \ \ / ________/
| | | || \ | | | | _ | ' \ / _ \ / _ | | ) / ` |/ _ \ / | |/ / _ \ '| | |) | () | () | | / __/ (| | () | (| < / | |./ _/ _/ _|_,|_/ _|_|__|_| Boot2Docker version 1.9.0, build master : 16e4a2a - Tue Nov 3 19:49:22 UTC 2015 Docker version 1.9.0, build 76d6bc9 docker@docker:~$ ip addr -- 一部省略 -- 4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether 08:00:27:20:2d:64 brd ff:ff:ff:ff:ff:ff inet 192.168.1.12/24 brd 192.168.1.255 scope global eth1 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe20:2d64/64 scope link valid_lft forever preferred_lft forever [/bash]
こいつが今回追加されたブリッジです。 前回の記事でかいたSNSのコンテナを試しに80番で立ち上げて curl で叩くとこんな感じです。
[bash] $ curl --head 192.168.1.12 HTTP/1.1 302 Found Date: Sun, 14 Feb 2016 06:16:12 GMT Server: Apache/2.4.10 (Debian) PHP/7.0.3 X-Powered-By: PHP/7.0.3 Set-Cookie: smoocy_session=6e1ef9b972a52e61afc07e06d80a0cdb92b7b6fe; expires=Sun, 21-Feb-2016 06:16:13 GMT; Max-Age=604800; path=/; domain=.smoocy.xyz; HttpOnly Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Location: /service X-XSS-Protection: 1; mode=block X-Frame-Options: DENY X-Content-Type-Options: nosniff Content-Type: text/html; charset=UTF-8
[/bash]
同一ネットワークに接続されている、iPhoneからもこのIPアドレスで接続できました。 これで簡単に検証できます。
とはいっても
ネットワークの制約が厳しい会社などはきついかもしれないですね。
そしたら、ホストマシンにリバースプロキシたてるしかないっすね。
というわけで以上です。
追記
ブログコメント欄にも頂いておりますが、Twiterにてご指摘をいただいたので、引用させていただきます。
ブログへコメント。docker-machine上のdockerホストへの接続を手軽にするなら`docker-machine ssh [name] -f -N -L 0.0.0.0:8080:127.0.0.1:80`も方法の一つ。 https://t.co/BLJfkcIntX
— yamamoto (@yamamoto_febc) 2016, 2月 14
docker-machine ssh [machine name]の後に続けてSSHコマンドのオプションを指定できる。テストなどで一時的に社内向けに公開したい場合などはポートフォワードで十分。 — yamamoto (@yamamoto_febc) 2016, 2月 14
@bootjp ポートフォワードだと切断されちゃったりしたら毎回コマンド打つ必要があるんで、社内向けなんかで常時公開する場合はブリッジを追加するやり方のほうが楽なこともあると思いますよー。
— yamamoto (@yamamoto_febc) 2016, 2月 14