github编辑

网络配置

当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。

同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918arrow-up-right 中定义)中的一个地址给 docker0 接口。比如典型的 172.17.42.1,掩码为 255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。

当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。

用户自定义网络

虽然默认的 bridge 网络可以满足大部分需求,但为了更好地隔离容器、或满足特定的网络需求,我们推荐使用用户自定义网络。

用户可以创建 bridgeoverlaymacvlan 等不同类型的自定义网络。

创建一个自定义 bridge 网络

$ docker network create my-net

连接容器到自定义网络

在启动容器时,可以使用 --network 选项来指定网络。

$ docker run -it --rm --name busybox1 --network my-net busybox sh
$ docker run -it --rm --name busybox2 --network my-net busybox sh

busybox1 的终端中,可以 pingbusybox2

/ # ping busybox2
PING busybox2 (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.083 ms

容器互联的废弃与替代

在 Docker 的早期版本中,--link 选项被用来连接容器。然而,这个功能现在已经被废弃,并且不推荐在生产环境中使用。

注意:--link 是一个遗留功能。它可能会在未来的版本中被移除。我们强烈建议使用用户自定义网络来连接多个容器。

使用自定义网络,容器之间可以通过容器名直接进行通信,这比使用 --link 更加灵活和强大。

接下来的部分将介绍 Docker 的一些高级网络配置,包括 DNS 配置和端口映射等内容。

最后更新于

这有帮助吗?