您的位置:首页 > 运维架构 > Docker

Docker容器间的网络通信

2017-10-15 17:35 751 查看

Docker Network

简单记录下容器间的网络通信。

Docker Network
网络驱动

BRIDGE
容器与外部的网络通信前提

宿主机与容器的端口映射

容器间的网络通信
使用自己创建的NETWORK

不同NETWORK间的容器通信

容器DNS
默认bridge网络

用户创建的bridge网络

网络层可见别名

参考

网络驱动

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker 网络