Docker容器间的网络通信
Docker Network简单记录下容器间的网络通信。Docker Network网络驱动BRIDGE容器与外部的网络通信前提宿主机与容器的端口映射容器间的网络通信使用自己创建的NETWORK不同NETWORK间的容器通信容器DNS默认bridge网络用户创建的bridge网络网络层可见别名参考网络驱动network drivers是docker提供容器间网络通
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
##参考
Docker v17.09
我的博客
更多推荐
所有评论(0)