Docker的那些事儿

Docker的那些事儿—bridge网络(22)

2018-03-14  本文已影响16人  sjyu_eadd

上一篇:Docker的那些事儿—none和host网络(21)


桥接网络,顾名思义就是在容器和宿主机间搭建一座桥,实现容器与宿主机可以相互访问。

你可能发现,当安装了docker后,宿主机上多了一个叫做docker0的网卡。使用ip a或者ifconfig查询。

实际上,这个docker0网络就是这里的bridge网络创建的网卡。我们使用:docker network inspect

bridge查询该bridge网络的具体信息:

该bridge网络所属子网为172.17.0.0/16,网关为172.17.0.1(这其实就是docker0的ip)。子网掩码为16保证了可以创建足够多的容器。当创建并启动一个容器时,docker会根据使用的网络为容器分配一个可用的IP。docker run时可以使用--network指定使用的网络,例如:docker run -itd --name mysql1 --network=bridge mysql /bin/bash

我们再次查询该bridge网络信息,发现Container字段多了一些信息,这些就是该网络为该mysql1容器分配的网络信息。

我们进入容器进一步观察:

容器内的eth0实际上是veth

pair的一端,另一端(veth2cc3a05)连在docker0网桥上。eth0@if7中的@if7代表该网卡与宿主机上编号为7的网卡是一对。veth2cc3a05@if6的@if6也是同样的道理。

bridge网络连接如下:

尝试宿主机与容器间ping

实际上,bridge网络是docker

run时默认使用的网络,当不使用--network可选项时,也是使用的bridge的网络。

mysql1和mysql2容器分配的ip分别为172.17.0.2和172.17.0.3

该bridge网络下的两个容器间可以相互访问。

用如下图,描绘上述网络拓扑:

总结如下:

1、  bridge网络下,容器与宿主机间可以相互访问。

2、  同一bridge网络下的容器间可以相互访问。

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

1、在宿主机上创建一对虚拟网卡veth pair设备。

2、Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0。另一端放在主机中,以veth*这样类似的名字命名,并将这个网络设备加入到docker0网桥中。

3、从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。


下一篇:Docker的那些事儿—如何自定义网络(23)


上一篇 下一篇

猜你喜欢

热点阅读