docker网络模式
-
Host Network(主机网络):
- 特点:
- 在主机网络模式下,容器与宿主机共享网络命名空间,容器直接使用宿主机的网络栈。
- 容器的网络设置与宿主机完全相同,容器可以直接访问宿主机的网络接口和端口。
- 不进行网络地址转换,网络性能较高,但与宿主机之间的隔离性较差。
- 使用场景:
- 需要最大化网络性能的场景,例如运行网络密集型应用程序或者需要直接访问主机网络接口的场景。
-
Bridge Network(桥接网络):
- 特点:
- 桥接网络是 Docker 默认的网络模式,适用于单主机上多个容器之间的通信。
- 每个容器都有一个虚拟的网卡,连接到 Docker 主机的虚拟网络桥接设备上。
- 桥接网络通过 NAT(Network Address Translation)来为容器提供网络连接,并为容器分配 IP 地址。
- 使用场景:
- 构建多个容器之间的内部网络,容器可以相互通信,但与外部网络隔离。
- 默认情况下,推荐使用桥接网络模式。
-
Container Network(容器网络):
- 特点:
- 容器网络模式允许多个容器共享同一个网络命名空间,即它们可以共享同一个网络栈。
- 容器可以直接使用容器名称进行通信,而无需使用 IP 地址。
- 使用场景:
- 需要在多个容器之间进行通信,并且希望容器之间能够直接使用容器名称进行通信的场景。
- 例如,构建微服务架构中的多个容器,通过容器名称进行服务间通信。
-
None Network(无网络):
- 特点:
- 无网络模式禁用了容器的网络功能,容器之间无法进行通信,也无法访问外部网络。
- 容器仍然可以访问本地的文件系统和进程空间,但无法通过网络进行通信。
- 使用场景:
- 特殊场景,例如运行网络隔离的容器,或者在容器内部进行网络调试。
docker自定义IP
1.创建自定义网络: 如果您希望为容器指定特定的 IP 地址,可以先创建一个自定义网络。使用 docker network create
命令创建网络,并通过 --subnet
参数指定子网。例如:
docker network create --subnet=172.18.0.0/16 my_network
2.运行容器并指定 IP 地址: 使用 --ip
参数在特定的网络中为容器指定 IP 地址。如果您已经创建了自定义网络,可以通过 --network
参数指定网络名称。例如:
docker run --network my_network --ip 172.18.0.2 my_image
3.验证容器的 IP 地址: 运行容器后,可以使用 docker inspect
命令查看容器的详细信息,包括 IP 地址。例如:
docker inspect <container_id_or_name> | grep IPAddress
注意:
- 如果您未指定网络,则容器将连接到默认的桥接网络。
- 如果您未指定 IP 地址,则 Docker 将自动为容器分配 IP 地址。
- 如果您指定了 IP 地址,务必确保它在所选网络的子网范围内,并且未被其他容器占用。
- 如果要为容器指定特定的子网和网关,请在创建网络时使用
--subnet
和 --gateway
参数。
资源控制
-
CPU 资源控制:
- 使用
--cpu-shares
参数可以设置容器对 CPU 的相对权重,即容器使用 CPU 的比例。默认情况下,所有容器具有相同的权重(1024),但可以通过设置不同的权重值来调整容器之间的 CPU 使用优先级。 - 使用
--cpus
参数可以限制容器可以使用的 CPU 核心数量,以实现对 CPU 资源的绝对控制。
-
内存资源控制:
- 使用
--memory
参数可以限制容器可以使用的内存量,以字节、兆字节或千兆字节为单位。 - 使用
--memory-swap
参数可以设置容器可以使用的交换空间大小,通常设置为与 --memory
参数相同的值,或者设置为 -1
表示与内存大小相等。 - 使用
--memory-reservation
参数可以设置容器的内存保留量,即即使系统内存不足时,也会保留给容器的最小内存量。
-
IO 资源控制:
- 使用
--blkio-weight
参数可以设置容器对磁盘 IO 的相对权重,即容器使用磁盘 IO 的比例。 - 使用
--device-read-bps
和 --device-write-bps
参数可以限制容器的读取和写入磁盘的带宽。 - 使用
--device-read-iops
和 --device-write-iops
参数可以限制容器的读取和写入磁盘的 IOPS(每秒输入/输出操作数)。