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 --