docker中镜像是静态只读模板,容器是其动态可写实例;资源限制需通过-m、--cpus等参数配置内存、cpu、io等,linux下由cgroups生效,须结合应用负载合理设定。
docker 中镜像与容器是两个基础但不同的概念:
镜像是静态、只读的模板,包含运行应用所需的一切——代码、运行时、库、配置;它本身不运行,也不能被修改,就像一张安装光盘。
容器是镜像启动后的动态实例,在镜像的只读层之上叠加一个可写层,拥有独立的进程、网络和文件系统视图;你可以启动、停止、删除它,它的生命周期是临时的。
当你用 docker run 启动一个容器时,Docker 默认会尽可能使用宿主机的资源。但在生产环境中,必须对容器做资源限制,防止某个容器耗尽 CPU、内存等,影响其他服务。
如何配置容器的资源限制
Docker 提供了命令行参数(也可在 docker-compose.yml 中配置),在运行容器时直接指定资源上限:
-
内存限制
使用-m或--memory指定最大可用内存,支持单位如b、k、m、g:docker run -m 512m nginx
还可配合
--memory-swap控制内存+swap 总量(设为-1表示不限 swap);--memory-reservation可设软性内存下限,用于内存压力管理。 -
CPU 限制
- 按比例分配(相对权重):
--cpu-shares(默认 1024,值越大优先级越高,但仅在资源竞争时生效) - 按核心数限制(绝对配额):
docker run --cpus 1.5 nginx # 最多使用 1.5 个逻辑 CPU docker run --cpuset-cpus "0,1" nginx # 仅允许在 CPU 0 和 1 上运行
- 按比例分配(相对权重):
-
磁盘 I/O 限制(需使用
overlay2等支持 IO 限速的存储驱动)docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:500kb nginx
-
PID 数量限制(防 fork 炸弹)
minimax-mcp-docker版(适配极空间)下载MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
docker run --pids-limit 100 nginx
-
其他实用限制
-
--ulimit nofile=1024:2048:限制打开文件数(软/硬限制) -
--restart unless-stopped:虽非资源限制,但属关键运行策略,避免容器异常退出后失控
-
⚠️ 注意:资源限制只在 Linux 宿主机上由 cgroups 生效;Windows/macOS 上的 Docker Desktop 是通过 Linux 虚拟机实现的,限制仍有效,但监控和底层行为略有差异。
验证是否生效
启动后可用以下命令查看实际限制:
docker inspect | grep -A 10 "HostConfig.*Memory\|Cpu"
或进入容器检查 cgroups 文件:
docker exec -it cat /sys/fs/cgroup/memory.max
资源限制不是“越严越好”,要结合应用实际负载设定合理值,并留出缓冲空间。比如 Java 应用要注意 JVM 堆内存设置(-Xmx)不能超过容器内存限制,否则会被 OOM Killer 杀掉。
不复杂但容易忽略










