Docker容器間的網路通訊
阿新 • • 發佈:2019-02-02
Docker Network
簡單記錄下容器間的網路通訊。
網路驅動
- network drivers是docker提供容器間網路通訊的基礎。docker預設提供了兩中驅動:bridge和overlay
docker network ls
指令會列出當前存在的網路- docker在安裝完成後會自動建立三個網路
BRIDGE
宿主機中使用
ip addr show
檢視網絡卡狀況
docker0為宿主機中的虛擬網橋即為docker自動建立的bridge網路
bridge為docker執行容器(
docker run
)預設使用的網路
容器與外部的網路通訊前提
- 保證宿主機開啟了ip_forward功能
- 保證iptables的相關策略的設定,如地址偽裝,NAT等
宿主機與容器的埠對映
docker run -itd -P --name mongoService mongo
,-P表示:容器暴露的埠將會對映到宿主機中的隨機埠號,隨機範圍見:/proc/sys/net/ipv4/ip_local_port_range每當啟動容器與外部網路的通訊,docker都會建立響應的iptables規則。
iptables -L -n -t nat
檢視規則
容器間的網路通訊
容器間可以通過IP或容器名進行網路通訊
使用自己建立的NETWORK
建立my_bridge網路:
docker network create -d bridge --subnet=10.0.0.0/24 my_bridge
執行使用my_bridge網路的容器
docker run -itd --network=my_bridge --ip=10.0.0.254 --name db busybox
不同NETWORK間的容器通訊
docker run -itd --name=web busybox
,使用預設的bridge network- 將當前容器加入到需要與之通訊的網路
docker network connect my_bridge web
- 網路結構
容器DNS
容器間如何通過別名進行網路通訊?
預設bridge網路
-- 建立測試容器 docker run -itd --name c1 busybox docker run -itd --name c2 busybox -- 進入容器c1內部 docker attach c1 / # ping c2 ping: bad address 'c2' -- 建立容器時指定link容器 docker run -itd --link c2:c2_alias --name c3 busybox -- 進入容器c3內部 docker attach c3 / # ping -w1 c2 PING c2 (172.17.0.4): 56 data bytes 64 bytes from 172.17.0.4: seq=0 ttl=64 time=0.083 ms / # ping -w1 c2_alias PING c2_alias (172.17.0.4): 56 data bytes 64 bytes from 172.17.0.4: seq=0 ttl=64 time=0.096 ms / # 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 172.17.0.4 c2_alias 7e4850ad6320 c2 #通訊原因 172.17.0.6 fe51353cb1e3 -- 進入容器c2內部 docker attach c2 / # ping c3 ping: bad address 'c3'
使用者建立的bridge網路
-- 建立測試容器 docker run -itd --name c4 --net=my_bridge busybox docker run -itd --name c5 --net=my_bridge busybox -- 進入容器c4內部 docker attach c4 / # ping -w1 c5 #(自動建立DNS服務) PING c5 (10.0.0.3): 56 data bytes 64 bytes from 10.0.0.3: seq=0 ttl=64 time=0.066 ms
網路層可見別名
-- 建立測試容器 docker run -itd --name c7 --net=my_bridge --network-alias c7_net_alias busybox -- 進入容器c4內部 docker attach c4 / # ping -w1 c7_net_alias PING c7_net_alias (10.0.0.5): 56 data bytes 64 bytes from 10.0.0.5: seq=0 ttl=64 time=0.205 ms