资源限制
Docker 使用 Linux Cgroups 和 Namespaces 来限制和隔离容器资源。
CPU 限制
限制 CPU 使用率
sh
# 限制使用 1 个 CPU 核心
docker run -d --cpus="1.0" nginx
# 限制使用 0.5 个 CPU 核心
docker run -d --cpus="0.5" nginx指定 CPU 核心
sh
# 使用 CPU 0 和 1
docker run -d --cpuset-cpus="0,1" nginx
# 使用 CPU 0-3
docker run -d --cpuset-cpus="0-3" nginxCPU 优先级
sh
# 设置 CPU 优先级(0-1024,默认 1024)
docker run -d --cpu-shares=512 nginx内存限制
限制内存使用
sh
# 限制内存为 512MB
docker run -d -m 512m nginx
# 限制内存和交换空间
docker run -d -m 512m --memory-swap=1g nginxOOM Killer
当容器内存超限时,OOM Killer 会终止容器进程。
sh
# 禁用 OOM Killer(不推荐)
docker run -d -m 512m --oom-kill-disable nginxI/O 限制
限制磁盘 I/O
sh
# 限制读写速度(MB/s)
docker run -d \
--device-read-bps /dev/sda:1mb \
--device-write-bps /dev/sda:1mb \
nginx限制 IOPS
sh
# 限制 IOPS
docker run -d \
--device-read-iops /dev/sda:100 \
--device-write-iops /dev/sda:100 \
nginxDocker Compose 配置
yaml
version: '3.8'
services:
app:
image: nginx
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M注意
deploy.resources 仅在 Compose V3 和 Docker Swarm 模式下生效。单机环境使用 --cpus 和 -m 参数。
监控资源使用
sh
# 实时查看容器资源使用
docker stats
# 查看特定容器
docker stats container-name
# 只显示一次
docker stats --no-stream最佳实践
- 设置合理的资源限制 - 防止单个容器占用过多资源
- 监控资源使用 - 定期检查容器资源使用情况
- 预留资源 - 为系统和其他容器预留资源
- 测试资源限制 - 确保应用在限制下正常运行
BSFC Tech Pro Tip
生产环境必须设置资源限制,防止资源耗尽导致系统不稳定。