在 CentOS 上使用 Docker 限制容器资源,主要通过 docker run 参数 或 docker-compose 来实现。下面按常见资源类型说明。
docker run -d --cpus="1.5" nginx
表示最多使用 1.5 个 CPU
docker run -d --cpuset-cpus="0,1" nginx
只使用 CPU 0 和 1
docker run -d --cpu-shares=512 nginx
默认是 1024,数值越大优先级越高(非绝对限制)
docker run -d -m 512m nginx
容器最多使用 512MB 内存
docker run -d -m 512m --memory-swap=1g nginx
内存 512MB,Swap 512MB(总 1GB)
docker run -d -m 512m --memory-swap=512m nginx
docker run -d --device-read-bps /dev/sda:10mb nginx
docker run -d --device-write-bps /dev/sda:20mb nginx
docker run -d --device-read-iops /dev/sda:1000 nginx
Docker 本身不直接限带宽,但可用:
tc (traffic control)docker-network-rate)示例(宿主机):
tc qdisc add dev docker0 root tbf rate 10mbit burst 32kbit latency 400ms
version: "3"
services:
nginx:
image: nginx
deploy:
resources:
limits:
cpus: "1.0"
memory: 512M
reservations:
memory: 256M
⚠️ 注意:
deploy 仅在 docker stack / swarm 生效
普通 docker-compose up 需写成:
services:
nginx:
image: nginx
cpus: "1.0"
mem_limit: 512m
docker stats
或查看 cgroup:
cat /sys/fs/cgroup/memory/docker/<容器ID>/memory.limit_in_bytes
Cgroup 版本
stat -fc %T /sys/fs/cgroup
tmpfs → cgroup v1cgroup2fs → cgroup v2(部分限制不支持)CentOS 7
CentOS 8 / Stream
如果你有 具体场景(如:限制某个 Java 服务、限制 Docker Compose 项目、限制带宽),我可以给你更精确的命令。