docker run一个镜像如何指定最大可使用的内存大小、cpu大小

在 Docker 中,你可以通过 --memory--cpus 参数来指定容器的最大内存和 CPU 限制。这样可以确保容器不会超出特定的资源限制,从而避免影响主机的其他进程。

1. 限制内存(--memory

通过 --memory-m 参数,你可以指定容器的最大内存使用量。容器将在运行时根据这个限制分配内存。

示例:
docker run -m 512m <image_name>

这将设置容器的最大内存为 512 MB

可用的单位:
  • bbytes(字节)
  • kkb(千字节)
  • mmb(兆字节)
  • ggb(吉字节)
示例(设置 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 使用时间。

这些参数可以帮助你确保容器不会过度消耗系统资源,影响其他进程的运行。

相关推荐
KeyPan3 小时前
【Ubuntu与Linux操作系统:十、C/C++编程】
linux·运维·服务器·c语言·c++·算法·ubuntu
陌上花开缓缓归以4 小时前
linux 内核OOM问题定位-SLAB_DEBUG
linux·运维·服务器
努力的小T4 小时前
Linux 搭建 Docker 私有化仓库 Harbor 教程
linux·运维·服务器·docker·云原生·容器·云计算
hao_wujing4 小时前
使用 Linux tracepoint、perf 和 eBPF 跟踪数据包
linux·运维·php
名为逗比4 小时前
从CentOS到龙蜥:企业级Linux迁移实践记录(龙蜥开局)
linux·运维·centos
金州饿霸5 小时前
YARN 架构组件及原理
linux·运维·前端
二饭5 小时前
【开发日记】Docker修改国内镜像源
运维·docker·容器
KeyPan6 小时前
【Ubuntu与Linux操作系统:九、Shell编程】
linux·运维·服务器·算法·ubuntu
明 庭6 小时前
在 Alpine Linux 下通过 Docker 部署 PostgreSQL 服务器
linux·服务器·docker