Docker(九)—— Docker 网络

我们之前通过端口映射实现过外部主机对容器的访问,

Docker(九)—— Docker 网络_第1张图片

那如果想要实现两个容器之间的通信怎么办?用已有的经验,是像图中蓝色的线那样走吗?

Docker(九)—— Docker 网络_第2张图片 

 一、Docker0网络

Docker(九)—— Docker 网络_第3张图片

 我们运行一个容器,进入容器内部后发现容器也有自己的IP地址。

而且可以发现docker0的IP和容器的IP在同一个网段内(类似于路由器和连接到的路由器的终端),说明容器的IP是由docker0去分配的。

docker0的IP : 172.17.0.1

容器的IP :172.17.0.2

Docker(九)—— Docker 网络_第4张图片

然后我们以Ctrl+p+q的方式,退出运行的容器, 让其在后台运行。此时在宿主机执行ip addr命令,发现容器的IP在宿主机也能查到。

Docker(九)—— Docker 网络_第5张图片

 此时,我们会想,那宿主机能ping通容器吗?

Docker(九)—— Docker 网络_第6张图片

发现是能ping通的!

这是通过什么技术实现的呢?

evth-pair技术!我们可以发现,容器的网卡是成对出现的,下图中网卡6和网卡7作为一对。

Docker(九)—— Docker 网络_第7张图片

 我们再看宿主机显示的IP,发现6和7的位置颠倒过来了。

Docker(九)—— Docker 网络_第8张图片

evth-pair就是一对虚拟设备接口,他们都是成对出现的,一端连接着协议,一端连接着彼此。

evth-pair充当一个桥梁,通过虚拟网卡连接起各种虚拟网络设备,宿主机和docker容器就是通过evth-pair连接的,docker容器和docker容器之间也是这样连接的。

所以docker容器之间也是可以互相ping通的

但是docker容器之间的通信并不是像下图这样直接通信的

Docker(九)—— Docker 网络_第9张图片

 而是通过docker0(可以直接看作路由器)和evth-pair技术。如果容器B要ping容器C,需要先发到docker0上,再由docker0发给容器C。

Docker(九)—— Docker 网络_第10张图片

Docker(九)—— Docker 网络_第11张图片 

此外,通过研究docker网络我们还发现,docker0的IP是172.17.0.1/16,这就说明docker最多开65535个容器。

Docker中的网卡都是虚拟的,开始容器后出现一对虚拟网卡,rm掉这个容器以后,网卡也就没了。

你可能感兴趣的:(Docker,docker)