基于本文回答

播面 播面

文解图解播客视频,多维讲透八股文
0
评论

如何在启动容器时限制其 CPU 核心数和内存使用上限?

在 Docker 中,你可以在使用 docker run 命令启动容器时,通过添加特定的参数来限制容器的 CPU 核心数内存使用上限

以下是具体的参数和示例:


1. 限制内存使用上限 (Memory Limit)

限制内存主要使用以下两个参数:

  • -m--memory:限制容器可以使用的最大物理内存(如 512m1g)。
  • --memory-swap:限制“内存 + Swap(虚拟内存)”的总总量。

示例:

  • 仅限制物理内存为 512MB

    bash
    docker run -d --name my_container -m 512m nginx

    注意:如果不设置 --memory-swap,默认情况下 Swap 大小等于物理内存大小。这意味着容器最多可以使用 512MB 物理内存 + 512MB Swap = 1GB 总内存。

  • 限制物理内存为 1GB,且禁用 Swap(不允许使用虚拟内存)
    --memory--memory-swap 设置为相同的值:

    bash
    docker run -d --name my_container -m 1g --memory-swap 1g nginx

2. 限制 CPU 核心数 (CPU Limit)

限制 CPU 主要有以下两种常用方式:

方式 A:限制容器可以使用的 CPU 核心个数(最常用)

使用 --cpus 参数。可以设置为小数(例如 0.5 表示半个核心,2 表示 2 个核心)。

示例:

  • 限制容器最多使用 1.5 个 CPU 核心
    bash
    docker run -d --name my_container --cpus="1.5" nginx

方式 B:绑定容器到特定的 CPU 核心 (CPU Affinity)

使用 --cpuset-cpus 参数。允许你指定容器只能运行在哪些具体的 CPU 物理核心上(核心编号从 0 开始)。

示例:

  • 限制容器只能在第 0 和第 1 个 CPU 核心上运行
    bash
    docker run -d --name my_container --cpuset-cpus="0,1" nginx
  • 限制容器在第 0 到第 3 个 CPU 核心上运行
    bash
    docker run -d --name my_container --cpuset-cpus="0-3" nginx

3. 综合完整示例

如果你想启动一个容器,限制它最多使用 2 个 CPU 核心,且最多使用 1GB 内存(禁用 Swap)

bash
docker run -d \
  --name my_bounded_container \
  --cpus="2" \
  -m 1g \
  --memory-swap 1g \
  nginx

4. 验证限制是否生效

容器启动后,你可以使用以下命令来实时查看容器的资源占用情况:

bash
docker stats my_bounded_container

在输出的界面中,你可以看到 LIMIT(内存限制)和 CPU %(CPU 使用率,如果限制了 2 核,最大值就是 200%)。