【Docker】ネットワーク
3
802.1d ブリッジ(L2 スイッチ) の実装
既存の物理ネットワークや VLAN 上で動作しているコンテナ化されてない環境と通信するために、それぞれのコンテナには独自の MAC アドレスと IP アドレスを付与している
サービスディスカバリー
名前解決は同じネットワーク上のコンテナとサービスに対してのみ機能する
組み込み Docker DNS サーバがクエリを解決できない場合には外部の DNS サーバを利用する
code:shell
$ docker run --it --dns=8.8.8.8 --dns-search=hoge.com alpine sh
デフォルトネットワーク
code:shell
$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
0f0e0c448e5b bridge bridge local
9b92e0b95f5d host host local
17440f7cc928 none null local
table:network
bridge ブリッジ接続
デフォルト
none インタフェース無し
host ネットワーク設定がホストと同じ
オプションで --net を指定しない限り docker0 と表示されるブリッジ(bridge) に接続
ブリッジネットワークの詳細
code:shell
$ sudo docker network inspect bridge
[
{
"Name": "bridge",
"Id": "0f0e0c448e5bbe769b3d28b57bdae737d2f23a585e3d869178d35ee850004bb5",
"Created": "2019-09-05T14:17:22.97276145+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
自動的に Subnet と Gateway を作成
docker run コマンドは新しいコンテナに対して、自動的にネットワークを割り当てる
コンテナを起動してみる
code:shell
$ sudo docker run -it centos /bin/bash
code:shell
$ sudo docker network inspect bridge
[
{
(snip)
"Containers": {
"ca667dbdab30a705a203b55da550fa2de70c03a954dc87522703b6271436c30e": {
"Name": "focused_franklin",
"EndpointID": "30d0d3d63945b8f1fe975afdd2595b398da4f3de7400bfe93d916ec922bb7bc4",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
(snip)
}
]
vethd8b7f04@if9
ホスト側から ip a 表示可能
仮想ネットワークインタフェース
コンテナとホストネットワークの名前空間をつなぐ
コンテナ起動時に docker0 に接続される
=> 停止時には削除