docker0 是 Docker 中默认的桥接网络接口,它是 Docker 网络模型的核心组件之一。Docker Daemon 创建的 docker0 桥接接口是 Docker 默认网络的核心组件。它充当了所有容器连接到宿主机网络的中间件,通过 NAT 技术为容器提供出站网络访问。
Docker0 桥接网络的工作原理
- 创建和配置
当 Docker Daemon 启动时,它会自动创建一个名为 docker0 的虚拟以太网桥接口。这个桥接接口在 Linux 系统中是通过 bridge-utils 包提供的工具进行创建和管理的。docker0 桥接接口默认配置如下:
- IP 地址: Docker Daemon 会为 docker0 接口分配一个默认的 IP 地址,通常是 172.17.0.1/16 子网中的第一个地址 (172.17.0.1)。
- 子网掩码: 默认是 /16,也就是说 docker0 接口的 IP 地址范围是 172.17.0.1 到 172.17.255.254。
- 网桥接口名称: docker0 是默认的命名,但是你可以通过配置文件修改这个名字。
-
容器连接
每当创建一个新的 Docker 容器时,Docker 会自动为该容器分配一个唯一的虚拟以太网接口 veth 并连接到 docker0 桥接接口。这个 veth 接口的另一端会被放置到容器的网络命名空间中,从而使得容器可以通过 docker0 桥接接口与宿主机和其他容器进行通信。 -
NAT(Network Address Translation)
- 静态 NAT: 将一个固定的内部 IP 地址映射到一个公共 IP 地址,通常用于需要对外服务的设备,如 Web 服务器。
- 动态 NAT: 将内部网络中的多个私有 IP 地址动态映射到一组公共 IP 地址,这些公共 IP 地址从 ISP(Internet Service Provider,互联网服务提供商)中获取。
- PAT(Port Address Translation): 是动态 NAT 的一种形式,它不仅转换 IP 地址,还转换端口号。PAT 允许多个设备使用单个公共 IP 地址进行通信,通过不同的端口号来区分。
- docker0 桥接接口通过 NAT 技术为容器提供出站网络访问。具体来说,当容器发送数据到外部网络时,Docker Daemon 会将容器的源 IP 地址转换为宿主机的 IP 地址,然后再将数据发送到外部网络。反之亦然,当外部网络返回数据时,Docker Daemon 会根据 NAT 表将数据转发到相应的容器。
-
宿主机通信
所有连接到 docker0 桥接接口的容器都能直接通过 docker0 桥接接口与宿主机通信。这种通信是直接的、无需端口映射或额外的配置的,因为它们在同一网络空间中。 -
外部网络通信
通过 docker0 桥接接口,容器可以通过 NAT 技术访问外部网络。Docker Daemon 会根据容器的网络配置自动进行 IP 地址转换和路由处理,使得容器可以与宿主机外部的网络进行通信。