Docker Networkについて調べてみたのでまとめ
概要
Docker Networkは起動時にdocker0という名前のネットワーク・インターフェースが起動する。また、三つのネットワークが生成される。
~ $ docker network ls
NETWORK ID NAME DRIVER SCOPE
2509da118a6f bridge bridge local
24b9d7c165dd host host local
2580b7cd0d2f none null local
- host: ホストマシンと同一のネットワークインターフェースを使用する
- none: ネットワーク・インターフェースを使用しない
- bridge: docker0を使用する。コンテナ起動時にネットワーク・インターフェースを指定しなければ自動的にこれが割り当てられる。
bridgeについて
~ $ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "ID",
"Created": "Created",
"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,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"Container1": {
"Name": "nginx",
"EndpointID": "EndpointID",
"MacAddress": "MacAddress",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"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": {}
}
]
Containers内でbridgeネットワークにぶら下がっているコンテナ一覧が見える。
docker-composeについて
docker-composeコマンドで複数のコンテナを一気に立ち上げると、全てのコンテナは新たに生成されたネットワークにぶら下げられる。生成されたネットワークは何も指定しないとdocker0インターフェースを使用する。
~ $ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------
nextcloud_app_1 /entrypoint.sh apache2-for ... Up 0.0.0.0:9000->80/tcp
nextcloud_db_1 docker-entrypoint.sh mysqld Up 3306/tcp
~ $ docker network ls
NETWORK ID NAME DRIVER SCOPE
c9608596f355 nextcloud_default bridge local
イメージ図
まとめるとこんな感じになると思います。
※ 間違っていたらごめんなさい
内部DNSについて
Docker Engineを起動するとユーザー定義ネットワーク用のDNSサーバーが起動する。同一のDockerネットワーク内においてはユーザー定義のホスト名とIPアドレスがDNSによって変換される。