Docker—— Docker 网络

Posted 玛丽莲茼蒿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker—— Docker 网络相关的知识,希望对你有一定的参考价值。

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

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

 

 一、Docker0网络

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

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

docker0的IP : 172.17.0.1

容器的IP :172.17.0.2

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

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

发现是能ping通的!

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

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

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

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

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

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

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

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

 

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

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

以上是关于Docker—— Docker 网络的主要内容,如果未能解决你的问题,请参考以下文章

docker 怎么把宿主机的文件拷贝到运行的容器中

docker与宿主通信突然断了

docker mysql 容器 数据库文件怎么娴宿主机器上

docker mysql 容器 数据库文件怎么娴宿主机器上

docker 访问宿主机网络

Docker-单宿主机下的网络模式