いろいろ書いていく

やってみたなど

Docker network tutorial (host編)

Docker公式ドキュメントのhost network tutorialをやってみる.
docs.docker.com
[注意] host networkはDocker Linuxのみ対応で,MacWindows環境には未対応とのこと.

環境

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オプションでプロセスをバックグラウンドで実行状態にする.

  • ホストマシン上で以下のコマンドを実行し,インターフェースが追加されていないことを確認
$ 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個のみなどといった制約が生じることになるそうな.

以上