容器资源限制
Docker 容器的 CPU、内存、磁盘 I/O 等资源限制
📋 目录
CPU 限制
—cpus
限制容器使用的 CPU 数量。
# 限制使用 1 个 CPU
docker run --cpus="1.0" nginx:latest
# 限制使用 0.5 个 CPU
docker run --cpus="0.5" nginx:latest
# 限制使用 2.5 个 CPU
docker run --cpus="2.5" nginx:latest—cpu-shares
设置 CPU 权重(相对优先级)。
# 设置 CPU 权重(默认 1024)
docker run --cpu-shares=512 nginx:latest
# 高优先级容器
docker run --cpu-shares=2048 nginx:latest—cpuset-cpus
限制容器使用特定的 CPU 核心。
# 使用 CPU 0 和 1
docker run --cpuset-cpus="0,1" nginx:latest
# 使用 CPU 0-3
docker run --cpuset-cpus="0-3" nginx:latest—cpu-period 和 —cpu-quota
精确控制 CPU 使用时间。
# 限制使用 50% CPU
docker run --cpu-period=100000 --cpu-quota=50000 nginx:latest内存限制
-m / —memory
限制容器使用的内存。
# 限制使用 512MB 内存
docker run -m 512m nginx:latest
# 限制使用 1GB 内存
docker run -m 1g nginx:latest
# 限制使用 2GB 内存
docker run --memory="2g" nginx:latest—memory-swap
限制内存和交换空间的总和。
# 内存 512MB,交换空间 1GB(总计 1.5GB)
docker run -m 512m --memory-swap=1g nginx:latest
# 禁用交换空间
docker run -m 512m --memory-swap=512m nginx:latest
# 不限制交换空间(危险)
docker run -m 512m --memory-swap=-1 nginx:latest—oom-kill-disable
禁用 OOM Killer(不推荐)。
# 禁用 OOM Killer
docker run -m 512m --oom-kill-disable nginx:latest磁盘 I/O 限制
—device-read-bps
限制设备的读取速度。
# 限制读取速度为 1MB/s
docker run --device-read-bps /dev/sda:1mb nginx:latest—device-write-bps
限制设备的写入速度。
# 限制写入速度为 1MB/s
docker run --device-write-bps /dev/sda:1mb nginx:latest—device-read-iops
限制设备的读取 IOPS。
# 限制读取 IOPS 为 1000
docker run --device-read-iops /dev/sda:1000 nginx:latest—device-write-iops
限制设备的写入 IOPS。
# 限制写入 IOPS 为 1000
docker run --device-write-iops /dev/sda:1000 nginx:latest资源监控
docker stats
实时查看容器资源使用情况。
# 查看所有容器的资源使用
docker stats
# 查看指定容器
docker stats my-container
# 只显示一次(不持续更新)
docker stats --no-stream
# 按格式输出
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"docker inspect
查看容器的资源限制配置。
# 查看 CPU 限制
docker inspect -f '{{.HostConfig.CpuShares}}' my-container
docker inspect -f '{{.HostConfig.NanoCpus}}' my-container
# 查看内存限制
docker inspect -f '{{.HostConfig.Memory}}' my-container
docker inspect -f '{{.HostConfig.MemorySwap}}' my-container资源配额管理
更新资源限制
# 更新 CPU 限制
docker update --cpus="2.0" my-container
# 更新内存限制
docker update --memory="1g" my-container
# 更新多个限制
docker update --cpus="2.0" --memory="1g" my-containerDocker Compose 中的资源限制
version: '3.8'
services:
web:
image: nginx:latest
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M最佳实践
1. 合理设置资源限制
# 根据应用需求设置
docker run -d \
--name web \
--cpus="1.0" \
--memory="512m" \
nginx:latest2. 监控资源使用
# 定期检查资源使用情况
docker stats --no-stream3. 预留资源
# 为系统预留资源
# 不要将所有 CPU/内存分配给容器4. 使用资源限制防止资源耗尽
# 防止单个容器占用过多资源
docker run --cpus="2.0" --memory="1g" myapp:latest常见问题
1. 容器被 OOM Killer 杀死
问题:容器内存使用超过限制。
解决:
- 增加内存限制
- 优化应用内存使用
- 检查内存泄漏
2. CPU 使用率过高
问题:容器占用过多 CPU。
解决:
- 设置 CPU 限制
- 优化应用性能
- 使用 CPU 权重分配优先级
3. 磁盘 I/O 过高
问题:容器磁盘 I/O 过高。
解决:
- 设置磁盘 I/O 限制
- 优化应用 I/O 操作
- 使用 SSD 存储