Docker Network 自定义网段和固定 IP

在使用 Docker 进行容器化部署时,网络配置是一个非常重要的问题。默认情况下,Docker 使用桥接网络(Bridge Network)来为容器提供网络连接,它会为每个容器分配一个 IP 地址。然而,有时候我们希望能够自定义网段,并为容器分配固定的 IP 地址,以便更好地管理和控制容器之间的通信。本文将介绍如何在 Docker 中自定义网段和为容器分配固定 IP 地址,并提供一些示例代码。

Docker 网络模型

在深入讨论自定义网段和固定 IP 地址之前,我们先来了解一下 Docker 的网络模型。

Docker 使用了一种多层次的网络模型,其中包括以下几个概念:

  • 容器(Container):Docker 将应用程序封装在容器中,每个容器都有自己的文件系统、进程和网络栈。

  • 网络命名空间(Network Namespace):每个容器都有自己的网络命名空间,它独立于主机的网络命名空间,可以拥有自己的网络接口、IP 地址和路由表。

  • 桥接网络(Bridge Network):桥接网络是默认的网络驱动,它为容器提供了一个虚拟的网络接口(称为 docker0),并使用 NAT(Network Address Translation)技术将容器的 IP 地址转换为主机的 IP 地址。

  • 容器网络(Container Network):容器网络是指容器之间的通信网络,Docker 使用不同的网络驱动来实现容器网络,包括桥接网络、覆盖网络(Overlay Network)等。

自定义网段和固定 IP

默认情况下,Docker 使用 172.17.0.0/16 网段来分配容器的 IP 地址。然而,这个网段可能会与主机或其他网络设备冲突,因此我们希望能够自定义网段来避免这个问题。同时,为容器分配固定的 IP 地址可以方便我们进行管理和配置。

在 Docker 中,我们可以使用 docker network create 命令来创建自定义的网络,并通过 --subnet--gateway 参数来指定网段和网关。例如,下面的命令创建了一个名为 my-network 的网络,使用了 192.168.0.0/24 网段,并指定了网关为 192.168.0.1:

docker network create --subnet=192.168.0.0/24 --gateway=192.168.0.1 my-network

创建网络后,我们可以使用 docker network inspect 命令来查看网络的详细信息,包括网段、网关等。例如,下面的命令可以查看名为 my-network 的网络的详细信息:

docker network inspect my-network

固定 IP 地址

除了自定义网段外,我们还可以为容器分配固定的 IP 地址。在创建容器时,我们可以使用 --ip 参数来指定容器的 IP 地址。例如,下面的命令创建了一个名为 my-container 的容器,并为其分配了 IP 地址 192.168.0.2:

docker run --network my-network --ip 192.168.0.2 --name my-container -d nginx

创建容器后,我们可以使用 docker inspect 命令来查看容器的详细信息,包括 IP 地址等。例如,下面的命令可以查看名为 my-container 的容器的详细信息:

docker inspect my-container

示例代码

下面我们来看一个完整的示例,演示如何使用自定义网段和固定 IP 地址。

首先,我们创建一个自定义的网络,并指定网段为 192.168.0.0/24,网关为 192.168.0.1:

docker network create --subnet=192.168.0.0/24 --