1. TsutomuNakamura

    Posted

    TsutomuNakamura
Changes in title
+Docker network 概論
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,195 @@
+# Docker network について
+Docker で使用される主なネットワークについては以下の通りです。
+Docker overlay network の前提知識としてまとめておきました。
+
+## Default Networks
+Docker をインストールした時に3 つのDocker Network がインストールされます。
+それらのDocker network は`docker network ls` コマンドを実行することで確認することができます。
+
+
+```text:dockernetworkls
+$ sudo docker network ls
+NETWORK ID NAME DRIVER
+10aa51e2d993 bridge bridge
+202b87d7b8a4 none null
+92316fc5522f host host
+```
+
+
+これらのNetwork はDocker の実装となっています。
+コンテナを起動するときに`--net` フラグで、コンテナがどのNetwork を使用するかを指定することができます。
+
+## none ネットワークについて
+![Docker_Network0001.png](https://qiita-image-store.s3.amazonaws.com/0/70152/0783261c-c34e-9192-3dd1-4ebb7cb5dff9.png)
+
+
+none ネットワークはnull なネットワークドライバの実装です。
+ネットワーク接続を必要としないコンテナを作成する場合に使用されます。
+none ネットワークを使用したbusy box コンテナを起動し、コンテナにログインしてネットワークを見てみましょう。
+
+
+```text:noneネットワークを持ったbusyboxコンテナ
+$ docker run --name none_net_busybox --net=none -ti busybox /bin/sh
+/ # cat /etc/hosts
+127.0.0.1 localhost
+<dl>
+ <dd>:1 localhost ip6-localhost ip6-loopback</dd>
+</dl>
+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
+ inet6 addr: ::1/128 Scope:Host
+ 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:0
+ RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
+
+/ #
+```
+
+すると、loopback インタフェースのみがあるコンテナが作成されていることがわかります。
+
+## host
+![Docker_Network0000.png](https://qiita-image-store.s3.amazonaws.com/0/70152/f7d14c5d-9023-f55d-3b36-23d8a1b98df7.png)
+
+
+host ネットワークは、Docker ホストと同じネットワークにスタックするドライバで、Docker ホストマシンと同じネットワークインタフェース、IP アドレスを持つようになります。
+
+
+```text:hostネットワークを持っているDockerコンテナのインタフェース一覧
+$ docker run --name host_net_busybox --net=host -ti busybox /bin/sh
+/ #
+/ # ifconfig
+docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
+ inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
+ inet6 addr: fe80::x/64 Scope:Link
+ UP BROADCAST MULTICAST MTU:1500 Metric:1
+ RX packets:19888 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:19314 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:0
+ RX bytes:3063342 (2.9 MiB) TX bytes:29045336 (27.6 MiB)
+
+eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
+ inet addr:192.168.1.121 Bcast:192.168.1.255 Mask:255.255.255.0
+ inet6 addr: fe80::x/64 Scope:Link
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ RX packets:135513 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:109723 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:1000
+ RX bytes:102680118 (97.9 MiB) TX bytes:22766730 (21.7 MiB)
+
+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:230 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:230 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:0
+ RX bytes:37871 (36.9 KiB) TX bytes:37871 (36.9 KiB)
+
+/ #
+```
+
+
+## bridge
+![Docker_Network0002.png](https://qiita-image-store.s3.amazonaws.com/0/70152/0208a1da-2476-59b6-97e3-c8ec39fcc8f9.png)
+
+
+Linux bridge 機能を使った、Linux 上に別ネットワークを使う方式。
+Linux bridge で仮想インタフェースを作成し、そのインタフェースに対してveth でDocker コンテナと接続する方式で、Docker ホストが属するネットワークとは異なる、仮想bridge 上のネットワークにコンテナを作成し、NAT 形式で外部のノードと通信する形式です。
+Docker のコンテナ作成時に`--net` オプションを特に何も指定しない場合は、自動的にこれが選択されたものとしてDocker は振る舞います。
+
+
+```text:bridgeネットワークを持っているDockerコンテナのインタフェース一覧
+tsutomu@swmgr01:~$ docker run --name bridge_net_busybox -ti busybox /bin/sh
+/ #
+/ # ifconfig
+eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
+ inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
+ inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ RX packets:40 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:0
+ RX bytes:6558 (6.4 KiB) TX bytes:508 (508.0 B)
+
+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: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)
+
+/ #
+/ # exit
+user@dockerhost:~$ ifconfig docker0
+docker0 Link encap:Ethernet HWaddr 02:42:a2:10:cc:f7
+ inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
+ inet6 addr: fe80::42:a2ff:fe10:ccf7/64 Scope:Link
+ UP BROADCAST MULTICAST MTU:1500 Metric:1
+ RX packets:7 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:0
+ RX bytes:480 (480.0 B) TX bytes:5025 (5.0 KB)
+
+```
+
+
+## overlay network
+![Docker_Network0003.png](https://qiita-image-store.s3.amazonaws.com/0/70152/e0655112-5f1f-828b-808c-88882c9586b2.png)
+
+
+Docker overlay network を使うことで異なるL3 上(Docker の場合は異なるDocker ホスト上) に存在するコンテナに対して、同じネットワークに存在するコンテナとして透過的にアクセスすることができるようになります。
+なお、このDocker overlay network はVXLAN を使って実装されているため、Docker ホストが異なる拠点やデータセンタに存在しても、そのDocker ホスト上のコンテナは、同じネットワーク上に存在しているものとしてアクセスすることができるようになります。
+既にDocker には`--link` 機能がありますが、それは異なるDocker ホストをまたがって名前解決し、アクセスすることは不可能でした。
+
+
+```text:overlayネットワークを持っているDockerコンテナのインタフェース一覧
+/ # ifconfig
+eth0 Link encap:Ethernet HWaddr 02:42:0A:00:09:03
+ inet addr:10.0.9.3 Bcast:0.0.0.0 Mask:255.255.255.0
+ inet6 addr: fe80::42:aff:fe00:903/64 Scope:Link
+ UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
+ RX packets:15 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:0
+ RX bytes:1206 (1.1 KiB) TX bytes:648 (648.0 B)
+
+eth1 Link encap:Ethernet HWaddr 02:42:AC:12:00:02
+ inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
+ inet6 addr: fe80::42:acff:fe12:2/64 Scope:Link
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ RX packets:50 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:0
+ RX bytes:6538 (6.3 KiB) TX bytes:648 (648.0 B)
+
+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: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)
+```
+
+
+# 参考
+<dl>
+ <dt> Understand Docker container networks</dt>
+ <dd> https://docs.docker.com/engine/userguide/networking/dockernetworks/</dd>
+</dl>
+
+<dl>
+ <dt> VXLAN とは</dt>
+ <dd> http://www.infraexpert.com/study/virtual3.html</dd>
+</dl>