在 Docker 中,你可以通过 --memory
和 --cpus
参数来指定容器的最大内存和 CPU 限制。这样可以确保容器不会超出特定的资源限制,从而避免影响主机的其他进程。
1. 限制内存(--memory
)
通过 --memory
或 -m
参数,你可以指定容器的最大内存使用量。容器将在运行时根据这个限制分配内存。
示例:
docker run -m 512m <image_name>
这将设置容器的最大内存为 512 MB。
可用的单位:
b
或bytes
(字节)k
或kb
(千字节)m
或mb
(兆字节)g
或gb
(吉字节)
示例(设置 2 GB 内存):
docker run -m 2g <image_name>
2. 限制 CPU(--cpus
)
通过 --cpus
参数,你可以限制容器使用的 CPU 核心数。例如,如果你限制容器使用最多 2 个 CPU 核心,可以使用如下命令:
示例:
docker run --cpus="2.0" <image_name>
这将容器的 CPU 限制设置为最多 2 个 CPU 核心。
示例(设置容器使用 1.5 个 CPU):
docker run --cpus="1.5" <image_name>
--cpus
的值可以是一个小数,表示容器使用部分 CPU 核心。比如 1.5
表示容器可以使用 1.5 个 CPU 核心。
3. 同时设置内存和 CPU 限制
你可以同时设置内存和 CPU 限制。比如限制内存为 1 GB,CPU 核心数为 2:
示例:
docker run -m 1g --cpus="2.0" <image_name>
4. 其他相关资源限制
-
--memory-swap
:限制容器可以使用的交换空间(swap)。如果没有设置,默认值是memory * 2
。你可以设置为与内存大小相等的值,或者设置为更大的值。docker run -m 512m --memory-swap 1g <image_name>
-
这将设置内存为 512 MB,交换空间为 1 GB。
-
--cpu-shares
:指定容器在多个容器共享 CPU 资源时的权重。它是一个相对值,默认值为 1024。这个值不限制容器可以使用的 CPU 数量,而是决定容器的 CPU 权重。
-
这里设置容器的 CPU 权重为 512,相对默认值 1024,这意味着该容器的 CPU 使用优先级较低。
-
--cpu-period
和--cpu-quota
:这两个参数可以控制容器每个周期内的 CPU 时间。例如,通过配置这些参数,可以限制容器在某个时间窗口内的最大 CPU 使用。docker run --cpu-period=100000 --cpu-quota=50000 <image_name>
-
这会将容器的 CPU 限制为 50% 的一个 CPU 核心(100000 微秒的时间窗口内,容器最多可以使用 50000 微秒的 CPU 时间)。
5. 综合示例
假设你想运行一个容器,并限制它使用 1 GB 内存和最多 2 个 CPU 核心,同时设置交换空间为 2 GB,可以使用以下命令:
总结:
--memory
或-m
:限制容器的最大内存使用。--cpus
:限制容器的最大 CPU 使用数量。--memory-swap
:设置容器最大可用的交换空间(swap)。--cpu-shares
:设置容器的 CPU 权重,控制容器在 CPU 资源竞争中的优先级。--cpu-period
和--cpu-quota
:更精细地控制容器的 CPU 使用时间。
这些参数可以帮助你确保容器不会过度消耗系统资源,影响其他进程的运行。