Docker network tutorial (host編)
Docker公式ドキュメントのhost network tutorialをやってみる.
docs.docker.com
[注意] host networkはDocker Linuxのみ対応で,MacやWindows環境には未対応とのこと.
環境
Docker 18.09.1 on Ubuntu 18.04 (Oracle VirtualBox VM on macOS)
インストール方法はこちら↓
koimedenshi.hatenablog.com
やること
Dockerホストのネットワーク上でport:80で待ち受けるNginxサービスを立てる.
ネットワークの観点においてはDockerホストから隔離されていないが,ストレージや名前空間など,ネットワーク以外のリソースはホストから独立して存在することになる.
手順
- 以下の--rmオプション付きコマンドを実行し,nginxコンテナを起動する
$ docker run --rm -d --network host --name my_nginx nginx
--rmオプションで立ち上げたコンテナはexit/stopすると同時に削除される.
-dオプションでプロセスをバックグラウンドで実行状態にする.
- Webブラウザでhttp://localhost:80 にアクセスし,Nginxページが表示されることを確認
- ホストマシン上で以下のコマンドを実行し,インターフェースが追加されていないことを確認
$ ip addr show (既存のIFのみ. ブリッジネットワークだと,ここでインターフェースが追加される)
- 以下のコマンドを実行して,ポート80番がどのプロセスに紐づいているかを確認
$ sudo netstat -tulpn | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 26149/nginx: master
- (チュートリアルにはない手順)network inspectコマンドでhostネットワークの設定を確認
$ docker network inspect host [ { "Name": "host", "Id": "6dc567989d6f78e9586117f18de3e4318cf3dcf80fe4dcdb06cb64b48cd546b2", "Created": "2018-12-01T15:49:43.284522247+09:00", "Scope": "local", "Driver": "host", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "7362beaa0c7725455893330ddcf3f690db53628fc06bf9cd98343cb4f5cbbb55": { "Name": "my_nginx", "EndpointID": "125632f721623e64896c4f0bff4b6cf394f84f652b79c72a6196a26fd1a68e64", "MacAddress": "", "IPv4Address": "", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]
bridgeネットワークの時と違って,コンテナのIPアドレスやMACアドレスが設定されていない.
(ホストとネットワーク資源を共有するため,なくてもつながる)
- 終わったら,以下のコマンドを実行してコンテナを削除
$ docker container stop my_nginx
まとめ
hostネットワークに接続されたNginxコンテナを起動した.
チュートリアルにあまり詳しいことが書かれておらず,使い方もよくわからなかった.知識不足.
Docker17.06以降のバージョンでは, swarmモードでもhostネットワークを利用できる.
その場合,例えば80番ポートで立ち上げることのできるサービスは1個のみなどといった制約が生じることになるそうな.
以上