自己学Docker:13.Docker网络模式1--默认模式bridge模式

来源:互联网 发布:facebook 程序员薪资 编辑:程序博客网 时间:2024/05/29 17:16

当 Docker 启动时,会自动在主机上创建一个名为 docker0 虚拟网桥,这实际上就是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。
这里写图片描述
系统会为这个docker0 分配一个私有网段的ip。如ip地址为172.17.0.1子网掩码为255.255.0.0。

当我们创建一个新的容器时,同时会创建了一对veth pair接口(即对等接口,当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。

过程分析

下面,来验证这个问题。
先创建两个容器:

sudo docker run -itd -P tomcatsudo docker run -itd -P tomcat

这里写图片描述
可以看到随机生成了两个名称为veth0e50c02和vethbb96690的interfaces。

查看主机网桥配置(brctl可以通过sudo apt install bridge-utils命令安装):

brctl show

这里写图片描述
两个容器的网络端口都挂载到了docker0上。

sudo docker ps

查看运行的docker容器。
这里写图片描述

sudo docker inspect 419988cde703sudo docker inspect 4cc78bf3d858

可以看到两个容器的网络信息,由于输出较多,这里只列出网络信息相关部分。
这里写图片描述
这里写图片描述
可以看出,这里两个容器的网关都是172.17.0.1,即docker在物理主机上创建的 docker0 虚拟网桥。ip地址分别为172.17.0.2和172.17.0.3。

进入到容器419988cde703中

这里写代码片

通过在容器中执行下面的命令,可以查看容器的网络信息。

ip addr show

这里写图片描述
可以看到,容器内有一个名为eth0的网络接口,ip为172.17.0.1。

查看容器转发信息

ip route show

这里写图片描述
可以看出来,在容器中输出的路由信息,由172.17.0.0/16可知子网掩码是255.255.0.0。由此可知,docker的docker0 虚拟网桥和容器里的eth0都是属于同一个子网的。
这些网络配置和使用docker inspect查询出来的也是一致的。

同时可以验证,容器(419988cde703)与容器(4cc78bf3d858)之间,主机与容器之间,容器与主机之间的网络都是联通的。
这里写图片描述

通过分析,上面的网络拓扑如下:
这里写图片描述

网络配置的过程

所以,Docker完成以上网络配置的过程大致是这样的:

  1. 在主机上创建一对虚拟网卡veth pair设备。
  2. Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0。另一端放在主机中,以veth*这样类似的名字命名,并将这个网络设备加入到docker0网桥中。
  3. 从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。
原创粉丝点击