dockerコンテナのネットワーク
はじめに
くーばねてすをやっつけるために新たなステージに上がるためについにdockerさんに会いに行くことにした。dockerさんと仲良くなることでコンテナシステムの仕組みの理解とくーばねてすを倒すための調査をする。
概要
■コンテナコンテナネットワークのコマンド
■コンテナネットワークの色んな接続形式
をまとめた!(>_<)
■コンテナコンテナネットワークのコマンド
コンテナの接続にはコンテナホストの内部ネットワークのみの接続と、ポートを公開し外部からコンテナに接続するなど、色んな接続方式がある。
↓コンテナのネットワークに関するコマンド
|コマンド|意味|
| --- | --- | --- |
|docker network ls|コンテナネットワークをリスト表示する|
|docker network inspect|ネットワークの詳細を表示する|
|docker network create|コンテナネットワークを生成する|
|docker network rm|コンテナネットワークを削除する|
|docker network connect|コンテナをコンテナネットワークに接続する|
|docker network disconnect|コンテナをコンテナネットワークから引き離す|
■コンテナネットワークの色んな接続形式
Dockerをインストールした時に、自動的に3つのネットワークが作成される。ネットワーク一覧を表示するには docker network ls コマンドを使う。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
8354a6451885 bridge bridge local
6d896bed8ed2 host host local
ccf965a5f653 none null local
Dockerをインストールした全ての環境には、docker0というブリッジ( bridge )ネットワークが作成される。
デフォルトでは自動的に bridge ネットワークを作成される。
none ネットワーク
none: ネットワーク・インターフェースを使用しないネットワーク構成。
none ネットワークは接続のない ネットワークドライバになる。
ネットワーク接続を必要としないコンテナを作成する場合に使用される。
$ docker attach nonenetcontainer
または
$ docker run --net=none ...
ifconfigコマンドを使用するとネットワーク環境の状態確認や設定確認をすることができる。
$ docker run --name none_net_busybox --net=none -ti busybox /bin/sh
# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
ifconfigの出力結果はここ見て↓(わかりやすかった)
ネットワークがローカルのコンテナだけなのがわかる。
hostネットワーク
host: ホストマシンと同一のネットワークインターフェースを使用する。
コンテナ内ではeth0を通じてネットワーク通信が出来る。
$ docker run --net=host ...
$ docker run --name host_net_busybox --net=host -ti busybox /bin/sh
/ # cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
/ # ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:D9:9C:B6:AA
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
eth0 Link encap:Ethernet HWaddr 02:50:00:00:00:01
inet addr:192.168.65.3 Bcast:192.168.65.15 Mask:255.255.255.0
inet6 addr: fe80::50:ff:fe00:1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1735 errors:0 dropped:0 overruns:0 frame:0
TX packets:1465 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:976315 (953.4 KiB) TX bytes:131379 (128.2 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:820 errors:0 dropped:0 overruns:0 frame:0
TX packets:820 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:79656 (77.7 KiB) TX bytes:79656 (77.7 KiB)
ifconfigの出力結果でlo(ローカルのコンテナ)がdocker0(内部インターフェイス)、eth0(外部インターフェース)を通じてホストマシンと同一のネットワークインターフェース(eth0)で構成されているのがわかる。
bridgeネットワーク
bridge: docker0を使用する。コンテナ起動時にネットワーク・インターフェースを指定しなければ自動的にこれが割り当てられる。
コンテナ内ではeth0を通じてネットワーク通信が出来る。
docker runで--netオプションを指定しない場合、bridge が適用される
Docker ホスト上の全てのデフォルト・ネットワーク・ブリッジを表示するには、docker network inspect を使う。
JSON形式で表示されるブリッジのネットワーク構成を確認できる。
$ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "d6375085c5a07e1602345e7c13a60e06b6de606de15c8942cec4c12ff7948881",
"Created": "2021-02-12T20:19:38.1033905Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"8b060cf9d5eb8d4fb78115cef17b3a51fc89aae4cdd0024f93605ad32fb081dd": {
"Name": "reverent_saha",
"EndpointID": "2df897619d3e76d192ac58b5952d84623d342c3a75dbcf989ebb7f738baab51c",
"MacAddress": "02:42:ac:11:00:02",
"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": {}
}
]
まとめ
なぜかdockerコマンドが使えなくなって、死んでた(>_<)
再インストールしたらなおった!
Discussion