在 Ubuntu 上使用 Docker 限制容器资源,主要通过 docker run 参数 或 docker-compose 配置来实现。下面按常见资源类型说明。
docker run --cpus=1.5 ubuntu
表示最多使用 1.5 个 CPU 核心。
docker run --cpuset-cpus="0,1" ubuntu
只在 CPU 0 和 1 上运行。
docker run --cpu-shares=512 ubuntu
默认是 1024,值越大优先级越高(不是硬性限制)。
docker run -m 512m ubuntu
容器最多使用 512MB 内存。
docker run -m 512m --memory-swap=1g ubuntu
总内存 + swap 上限为 1GB。
注意:
--memory-swap必须 ≥-m- 设为
-1表示不限制 swap(不推荐)
docker run \
--device-read-bps /dev/sda:1mb \
--device-write-bps /dev/sda:1mb \
ubuntu
docker run \
--device-read-iops /dev/sda:100 \
--device-write-iops /dev/sda:100 \
ubuntu
Docker 原生不支持直接限速,可用:
tc(Linux traffic control)示例(容器外):
tc qdisc add dev docker0 root tbf rate 10mbit latency 50ms burst 1540
version: "3"
services:
app:
image: ubuntu
deploy:
resources:
limits:
cpus: "1.0"
memory: 512M
⚠️ 注意:
deploy.resources只在 Docker Swarm 模式下生效
普通docker-compose up用下面方式:
services:
app:
image: ubuntu
mem_limit: 512m
cpus: 1.0
docker stats
或查看 cgroup:
cat /sys/fs/cgroup/memory/docker/<容器ID>/memory.limit_in_bytes
overlay2 存储驱动如果你有具体场景(如:限制某个服务 CPU 不超过 50%、防止容器吃满内存、Kubernetes 环境),可以告诉我,我可以给更精准的配置。