如何限制 Docker 容器的资源使用?

· 约 4 分钟读完 · 第 46 / 115 章

推荐答案

在 Docker 中,可以通过以下方式限制容器的资源使用:

  1. 限制 CPU 使用:

    • 使用 --cpus 参数限制容器可以使用的 CPU 核心数。
    • 使用 --cpu-shares 参数设置容器的 CPU 权重,默认值为 1024。
    • 使用 --cpuset-cpus 参数指定容器可以使用的 CPU 核心。
  2. 限制内存使用:

    • 使用 --memory 参数限制容器可以使用的内存总量。
    • 使用 --memory-swap 参数限制容器可以使用的内存和交换空间的总量。
  3. 限制磁盘 I/O:

    • 使用 --device-read-bps 和 --device-write-bps 参数限制容器的磁盘读写速率。
    • 使用 --device-read-iops 和 --device-write-iops 参数限制容器的磁盘读写 IOPS。
  4. 限制网络带宽:

    • 使用 --network 参数结合 --net-alias 和 --net 参数来限制容器的网络带宽。

本题详细解读

1. 限制 CPU 使用

  • --cpus:指定容器可以使用的 CPU 核心数。例如,--cpus="1.5" 表示容器最多可以使用 1.5 个 CPU 核心。
  • --cpu-shares:设置容器的 CPU 权重。默认值为 1024,较高的值表示容器可以获得更多的 CPU 时间。
  • --cpuset-cpus:指定容器可以使用的 CPU 核心。例如,--cpuset-cpus="0,1" 表示容器只能使用 CPU 核心 0 和 1。

2. 限制内存使用

  • --memory:限制容器可以使用的内存总量。例如,--memory="512m" 表示容器最多可以使用 512MB 内存。
  • --memory-swap:限制容器可以使用的内存和交换空间的总量。例如,--memory-swap="1g" 表示容器最多可以使用 1GB 的内存和交换空间。

3. 限制磁盘 I/O

  • --device-read-bps 和 --device-write-bps:限制容器的磁盘读写速率。例如,--device-read-bps="/dev/sda:1mb" 表示容器对 /dev/sda 设备的读取速率限制为 1MB/s。
  • --device-read-iops 和 --device-write-iops:限制容器的磁盘读写 IOPS。例如,--device-read-iops="/dev/sda:100" 表示容器对 /dev/sda 设备的读取 IOPS 限制为 100。

4. 限制网络带宽

  • --network:指定容器使用的网络。例如,--network="my-network" 表示容器使用名为 my-network 的网络。
  • --net-alias:为容器设置网络别名。例如,--net-alias="my-container" 表示容器在网络中的别名为 my-container。

通过这些参数,可以有效地限制 Docker 容器的资源使用,确保容器不会过度占用系统资源,从而影响其他容器或宿主机的性能。