Docker容器间的网络通信
2017-10-15 17:35
751 查看
Docker Network
简单记录下容器间的网络通信。Docker Network
网络驱动
BRIDGE
容器与外部的网络通信前提
宿主机与容器的端口映射
容器间的网络通信
使用自己创建的NETWORK
不同NETWORK间的容器通信
容器DNS
默认bridge网络
用户创建的bridge网络
网络层可见别名
参考
网络驱动
network drivers是docker提供容器间网络通信的基础。docker默认提供了两中驱动:bridge和overlaydocker 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相关文章推荐
- Docker实现跨主机容器实例网络通信(2)——利用OpenVSwitch构建多主机Docker网络
- docker容器网络通信原理分析
- 75.[Docker]容器间的网络通信
- docker容器网络通信原理分析
- Docker 网络管理及容器跨主机通信
- docker容器网络通信原理分析
- docker容器间网络通信
- Docker容器学习梳理--容器间网络通信设置
- docker容器网络通信原理分析
- docker应用-5(使用overlay 网络进行容器间跨物理主机通信)
- docker的网络、端口映射和容器间通信
- docker容器网络通信原理分析
- docker应用-5(使用overlay 网络进行容器间跨物理主机通信)
- docker应用-5(使用overlay 网络进行容器间跨物理主机通信)
- Docker网络管理及容器跨主机通信(四)
- Docker容器学习梳理--容器间网络通信设置(Pipework和Open vSwitch)
- Docker网络管理及容器跨主机通信
- Docker网络管理及容器跨主机通信(四)
- Docker网络基础---Docker跨主机容器访问通信
- Docker网络管理及容器跨主机通信