コンテナネットワーク
コンテナネットワーク
--netオプションでcontainerを入力すると、他のコンテナのネットワークネーミングスペース環境を共有できます.
共有される属性には,内部IP,ネットワークインタフェースのMAXアドレスなどが含まれる.
container:[다른 컨테이너의ID]
2つの共有ネットワークネーミングスペース環境のコンテナを作成するroot@red-virtual-machine:~# docker run -i -t -d --name network_container_1 ubuntu:14.04
591833e10a821927d576d4644a803e48391dcaaf2939e912cf1339874a135ed1
root@red-virtual-machine:~# docker run -i -t -d --name network_container_2 \
--net container:network_container_1 ubuntu:14.04
7df1114bf4ad0b7a537d4ebab2e79bba7fe9e05bb062b26d29a6e888c0d1738f
network_container_1을 먼저 만들고 network_container_2가 공유하도록 만들었다.
コンテナが作成されたネットワーク構成の確認root@red-virtual-machine:~# docker exec network_container_1 ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02
inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:25 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:3142 (3.1 KB) TX bytes:0 (0.0 B)
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)
root@red-virtual-machine:~# docker exec network_container_2 ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02
inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:25 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:3142 (3.1 KB) TX bytes:0 (0.0 B)
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)
네트워크 구성이 서로 같다.
ホストのネットワーク構成を確認すると、ネットワーク構成が生成されます.root@red-virtual-machine:~# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:6bff:fefe:f54e prefixlen 64 scopeid 0x20<link>
ether 02:42:6b:fe:f5:4e txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 39 bytes 5336 (5.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.159.128 netmask 255.255.255.0 broadcast 192.168.159.255
inet6 fe80::91dd:c79d:4366:c741 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:67:67:2d txqueuelen 1000 (Ethernet)
RX packets 39427 bytes 53319756 (53.3 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6834 bytes 566743 (566.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 587 bytes 52957 (52.9 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 587 bytes 52957 (52.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vethe9a33e9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::44bc:71ff:feb3:d609 prefixlen 64 scopeid 0x20<link>
ether 46:bc:71:b3:d6:09 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 31 bytes 3673 (3.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-dオプションは、コンテナが接続されていないため、テストコンテナを作成します.ブリッジネットワークと--net-alias
ブリッジタイプのネットワークはrunコマンドのnet-aliasオプションとともに使用され、特定のホスト名で複数のコンテナにアクセスできます.
ブリッジを作成し、ブリッジに接続された3つのコンテナを作成します.
コンテナのネットエイリアスを設定します.
root@red-virtual-machine:~# docker network create --driver bridge mybridge
b5c444e1e0ccbd75ca208438ad8d80a3603b3229fa7b180ceb54be64a8adb962
root@red-virtual-machine:~# docker run -i -t -d --name network_alias_cont1 --net mybridge \
--net-alias alick106 ubuntu:14.04
root@red-virtual-machine:~# docker run -i -t -d --name network_alias_cont2 --net mybridge \
--net-alias alick106 ubuntu:14.04
root@red-virtual-machine:~# docker run -i -t -d --name network_alias_cont3 --net mybridge \
--net-alias alick106 ubuntu:14.04
各コンテナのipspecroot@red-virtual-machine:~# docker inspect network_alias_cont1 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.19.0.2",
root@red-virtual-machine:~# docker inspect network_alias_cont2 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.19.0.3",
root@red-virtual-machine:~# docker inspect network_alias_cont3 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.19.0.4",
ip 주소가 같은 네트워크 대역으로 설정되며 순차적으로 ip를 할당 받았다.
ping呼び出しネットワークエイリアスroot@red-virtual-machine:~# docker run -i -t --name network_alias_ping --net mybridge ubuntu:14.04
ping을 날리기 위한 컨테이너 생성
root@c57fad6c09f8:/# ping -c 1 alick106
PING alick106 (172.19.0.2) 56(84) bytes of data.
64 bytes from network_alias_cont1.mybridge (172.19.0.2): icmp_seq=1 ttl=64 time=0.103 ms
--- alick106 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.103/0.103/0.103/0.000 ms
root@c57fad6c09f8:/# ping -c 1 alick106
PING alick106 (172.19.0.4) 56(84) bytes of data.
64 bytes from network_alias_cont3.mybridge (172.19.0.4): icmp_seq=1 ttl=64 time=0.120 ms
--- alick106 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.120/0.120/0.120/0.000 ms
root@c57fad6c09f8:/# ping -c 1 alick106
PING alick106 (172.19.0.3) 56(84) bytes of data.
64 bytes from network_alias_cont2.mybridge (172.19.0.3): icmp_seq=1 ttl=64 time=0.128 ms
--- alick106 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.128/0.128/0.128/0.000 ms
응답 오는 IP가 매번 다르다.
3つのコンテナのIPでそれぞれpingが送信されたことを確認できます.ロビンをループする方式で、IPのたびに変化します.
これは、ドッキングエンジンに内蔵されているDNS名がalick 106であるためです.
--net-aliasオプションは、alick 106を設定されたコンテナ(解析)に変換する.
ドッキングステーションのDNSは、主にフローティングホスト名コンテナを探すために使用されます.
コンテナが開き、新しいIPが割り当てられていても、特定のコンテナを指定できます.
最も代表的な例は、DNSによって自動的に管理されるlinkオプションです.コンテナのIPが変更されても、別名を使用してコンテナを蹴ることができます.しかし、李京宇の違いは、分散型ブリッジネットワークのコンテナDNSであることだ.
--net-aliasオプションも--linkオプションと同様の原理で動作します.
ドッキングステーションには、デフォルトのブリッジネットワークではなく、ユーザー定義のブリッジネットワーク用の内蔵DNSサーバがあります.(DNSのIPは127.0.0.11)
mybridgeという3つのネットワークコンテナがrunを生成すると、--net-aliasオプションにalick 106という名前の値が入力され、このコンテナのIPはDNSサーバ上でalick 106として登録されたホスト名である.
mybridgeネットワーク内のコンテナで、alick 106というホスト名でアクセスすると、DNSサーバはポーリング方式でコンテナのIPリストを返します.
pingコマンドは、IPリストで最初のIPを使用するため、毎回他のIPにpingを送信する.
> dig alick106
alick106 600 IN A 172.18.0.5
alick106 600 IN A 172.18.0.3
alick106 600 IN A 172.18.0.4
MacVANNネットワーク
MacVLANはホストのNICを仮想化し、コンテナに同じ物理ネットワーク環境を提供します.
MacVLANは、コンテナが物理ネットワーク上に仮想MACアドレスを有し、そのネットワークに接続された他のデバイスと通信することを可能にする.
MacVLANに接続されているコンテナは172.17で、デフォルトで割り当てられているIP帯域幅です.これは、X.xの代わりにネットワークデバイスのIPを割り当てるからです.
MacVLANネットワークを使用しているコンテナは基本的にホストと通信できません.
コンテナAは、サーバ2と通信することができるが、サーバ1と通信することはできない.
MacVLANを使用するには、少なくとも1つのネットワークデバイスとサーバが必要です.
공유기의 네트워크 정보 : 192.168.0.0/24
서버 1 (node01) : 192.168.0.50
서버 2 (node02) : 192.168.0.51
MacVLANの作成root@node01:~ # docker network create -d macvlan --subnet --subnet=192.168.0./24\
--ip-range=192.168.0.64/28 --gateway=192.168.0.1\
-o macvlan_mode=bridge -o parent=eht0 my_macvlan
root@node02:~ # docker network create -d macvlan --subnet --subnet=192.168.0./24\
--ip-range=192.168.0.128/28 --gateway=192.168.0.1\
-o macvlan_mode=bridge -o parent=eht0 my_macvlan
-d(--dirver) : 네트워크 드라이버로 macvlan을 사용,
--subnet : 컨테이너가 사용할 네트워크 정보를 입력, 여기서는 네트워크 장비의 IP 대역 기본 설정을 그대로 따른다.
--ip-range : MacVLAN을 생성하는 호스트에서 사용할 컨테이너의 IP 범위를 입력,
node01과 node02의 IP 범위가 겹쳐 동일한 IP의 컨테이너가 각각 생성된다면
컨테이너 네트워크가 정상적으로 동작하지 않을 수 있으므로 반드시 겹치지 않게 설정해야 한다.
--gateway : 네트워크에 설정된 게이트웨이를 입력. 여기서는 네트워크 장비의 기본 설정을 그대로 따른다.
-o : 네트워크의 추가적인 옵션을 설정.
위 예시에서는 macvaln_mode=bridge 값을 통해 MAcVLAN을 bridge 모드로,
parent=eth0 값을 통해 MacVLAN으로 생성될 컨테이너 네트워크 인터페이이스의
부모(parent) 인터페이스를 eth0으로 지정한다.
eth0은 공유기에 랜선으로 연결되어 192.168.0/24 대역의 IP를 할당받은 네트워크 인터페이스다.
MacVLANネットワークを使用したコンテナの作成root@node01:~ # docker run -it --name c1 --hostname c1 --network my_macvlan ubuntu:14.04
root@node02:~ # docker run -it --name c2 --hostname c2 --network my_macvlan ubuntu:14.04
생성된 2 컨테이너끼리 통신(ping)이 가능하다
Reference
この問題について(コンテナネットワーク), 我々は、より多くの情報をここで見つけました https://velog.io/@mohadang/컨테이너-네트워크テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol