如何在启动容器时限制其 CPU 核心数和内存使用上限?
在 Docker 中,你可以在使用 docker run 命令启动容器时,通过添加特定的参数来限制容器的 CPU 核心数 和 内存使用上限。
以下是具体的参数和示例:
1. 限制内存使用上限 (Memory Limit)
限制内存主要使用以下两个参数:
-m或--memory:限制容器可以使用的最大物理内存(如512m、1g)。--memory-swap:限制“内存 + Swap(虚拟内存)”的总总量。
示例:
仅限制物理内存为 512MB:
bashdocker run -d --name my_container -m 512m nginx注意:如果不设置
--memory-swap,默认情况下 Swap 大小等于物理内存大小。这意味着容器最多可以使用 512MB 物理内存 + 512MB Swap = 1GB 总内存。限制物理内存为 1GB,且禁用 Swap(不允许使用虚拟内存):
将--memory和--memory-swap设置为相同的值:bashdocker 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%)。