1.docker网络原理
在安装 Docker时,会创建一个新的网络接口docker0,docker0是一个虚拟的以太网桥,用于连接容器和本地宿主网络。通过命令查看目前 Docker宿主机上这个网络接口的信息。
ip a show docker0
docker0接口有符合RFC1918规范的私有IP地址,范围是172.16~172.30。接口本身的地址172.17.0.1,是这个Docker网络的网关地址,也是所有 Docker容器的网关地址。Docker会默认使用172.17.x.x作为子网地址,如果这个子网被占用了,Docker会在172.16~172.30这个范围内尝试创建子网。
Docker每创建一个容器,就会创建一对veth pair互联接口。这对接口就像管道的两端(从一端发送的数据会在另一端接收到)。这对接口中位于容器端的称为eth0接口,另一端在本地并被挂载 docker0网桥,名称以veth开头。通过这种方式,主机可以与容器通信,容器之间也可以相互通信。如此一来,Docker就创建了在主机和所有容器之间一个虚拟共享网络,如图所示。
![img](http://img.yaluoshan.cn//clipboard-1604327864322.png)
Docker最初基于操作系统上的本地网络支持技术,较快提供了基本的网络支持。 随着Docker越来越多地应用在各种分布式环境,网络方面的需求越来越复杂,容器网络目前已经成为了云计算领域的关键技术。
2.网络参数配置
(1)配置容器 DNS 和主机名
Docker服务启动后会默认启用一个内嵌的DNS服务,来自动解析同一个网络中的容器主机名和地址,如果无法解析,则通过容器内的 DNS 相关配置进行解析。用户可以通过如下方式自定义容器的主机名和 DNS 配置 。
①通过配置文件管理
容器中主机名 和 DNS 配置信息可以通过三个系统配置文件来管理:
- /etc/resolv.conf:容器启动时,会从宿主机上复制该文件,并删除其中无法连接到的 DNS 服务器 。
- /etc/hosts:文件中默认只记录了容器自身的地址和名称。
- /etc/hostname:文件则记录了容器的主机名 。
可以在运行中的容器里直接编辑/etc/hosts、/etc/hostname 和 /etc/resolve.conf 文件。但是这些修改是临时的,只在运行的容器中保留,容器终止或重启后并不会被保存下来,也不会被docker commit 提交 。
②通过启动参数管理
容器