- 首页 >
- 问答 >
-
智能运维 >
- Ubuntu Docker容器资源限制怎么设置
Ubuntu Docker容器资源限制怎么设置
小樊
42
2025-12-28 05:23:52
Ubuntu Docker容器资源限制实用指南
一 快速上手 CPU与内存
- 限制最多使用1.5个CPU核心:docker run --rm --cpus=1.5 ubuntu:latest
- 限制最多使用2个CPU核心:docker run --rm --cpus=2 ubuntu:latest
- 限制内存最多512MB:docker run --rm -m 512m ubuntu:latest
- 同时限制CPU与内存:docker run --rm --cpus=1.0 -m 512m ubuntu:latest
- 说明:–cpus支持小数;-m设置硬上限,超出可能触发OOM Killer。
二 CPU细粒度控制
- 设置CPU相对权重(默认1024):docker run --rm --cpu-shares=512 ubuntu:latest(仅在CPU紧张时生效)
- 精确控制CPU时间:docker run --rm --cpu-period=100000 --cpu-quota=50000 ubuntu:latest(每100ms最多用50ms,即50%)
- 绑定到指定核心(如0,1):docker run --rm --cpuset-cpus=“0,1” ubuntu:latest
- 组合示例(绑定核心0并限制为0.5核):docker run --rm --cpuset-cpus=“0” --cpus=0.5 ubuntu:latest。
三 内存与交换分区
- 仅限制内存为512MB(默认无swap):docker run --rm -m 512m ubuntu:latest
- 内存512MB + 交换512MB(总计1GB):docker run --rm -m 512m --memory-swap=1g ubuntu:latest
- 取消交换限制(仅当设置了-m):docker run --rm -m 300M --memory-swap=-1 ubuntu:latest
- 内存软预留(压力时回收):docker run --rm -m 500M --memory-reservation=200M ubuntu:latest
- 限制内核内存(不可换出,需小于-m):docker run --rm -m 500M --kernel-memory=50M ubuntu:latest。
四 磁盘IO与网络带宽
- 限制块设备写入速度为1MB/s(对/dev/sda):docker run --rm --device-write-bps=/dev/sda:1mb ubuntu:latest
- 限制块设备读取IOPS为1000:docker run --rm --device-read-iops=/dev/sda:1000 ubuntu:latest
- 限制块I/O权重(相对优先级,默认500):docker run --rm --blkio-weight=800 ubuntu:latest
- 网络带宽限制(示例将容器出方向限速10Mbps):
- 获取容器PID:pid=$(docker inspect -f ‘{{.State.Pid}}’ <容器名>)
- 进入网络命名空间并限速:nsenter -t $pid -n tc qdisc add dev eth0 root tbf rate 10mbit latency 50ms burst 1540。
五 持久化与动态调整及验证
- Docker Compose(示例):
- version: ‘3.7’
- services:
- web:
- image: nginx:latest
- deploy:
- resources:
- limits:
- reservations:
- cpus: ‘0.25’
- memory: 256M
- 动态修改运行中容器(无需重启):docker update -m 1g --cpu-shares=2048 <容器名>
- 全局默认限制(/etc/docker/daemon.json,重启生效):
- {
- “default-ulimits”: { “nofile”: { “Name”: “nofile”, “Hard”: 65536, “Soft”: 65536 } },
- “exec-opts”: [“native.cgroupdriver=systemd”]
- }
- 验证与监控:
- 查看实时资源:docker stats <容器名>
- 查看配置:docker inspect <容器名> | grep -A 10 “HostConfig”
- 提示:部分参数(如–cpus、–memory)需在创建容器时指定;–cpu-shares为相对权重,仅在竞争时体现。