Docker容器资源限制实践 Docker通过Linux cgroups实现容器资源隔离和限制。 CPU限制 CPU份额 CPU绑定 Docker Compose配置 内存限制 基本内存限制 内存预留 OOM killer IO限制 磁盘IO限速 IO操作次数限制 其他限制 Pids限制 Ulimits限制 资源监控 实时监控 详细统计 资源隔离原理 Namespaces隔离 Cgroups限制 最佳实践 设置合理的资源限制 使用docker stats监控资源 配置健康检查 限制日志大小 定期审查资源使用 Docker资源限制保证容器稳定运行和资源公平分配。
Docker通过Linux cgroups实现容器资源隔离和限制。
# 设置CPU权重(默认1024) docker run --cpu-shares=512 nginx # 限制使用1个CPU核心 docker run --cpus="1.0" nginx # 限制使用0.5个CPU核心 docker run --cpus="0.5" nginx
# 绑定到特定CPU核心 docker run --cpuset-cpus="0" nginx docker run --cpuset-cpus="0,2" nginx docker run --cpuset-cpus="0-3" nginx
version: '3.8' services: web: image: nginx deploy: resources: limits: cpus: '0.5' reservations: cpus: '0.25'
# 限制内存使用 docker run -m 512m nginx # 限制内存+swap docker run -m 512m --memory-swap=1g nginx
# 内存预留:保证最小可用内存 docker run -m 1g --memory-reservation=512m nginx
# 禁用OOM killer docker run -m 512m --oom-kill-disable nginx
# 限制读取速度 docker run --device-read-bps /dev/sda:1mb nginx # 限制写入速度 docker run --device-write-bps /dev/sda:1mb nginx
# 限制IO操作次数 docker run --device-read-iops /dev/sda:1000 nginx docker run --device-write-iops /dev/sda:1000 nginx
# 限制进程数量 docker run --pids-limit 100 nginx
# 设置文件描述符限制 docker run --ulimit nofile=1024:2048 nginx # 设置进程数量限制 docker run --ulimit nproc=100:200 nginx
# 实时资源使用 docker stats # 格式化输出 docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" # 只显示指定容器 docker stats container_name
# 查看容器资源限制 docker inspect container_name # 查看内存使用 docker exec container_name cat /proc/meminfo # 查看CPU使用 docker exec container_name cat /proc/stat
六种namespace: - pid: 进程ID - net: 网络栈 - ipc: 进程间通信 - mnt: 文件系统挂载点 - uts: 主机名和域名 - user: 用户ID
cgroup层次结构: /sys/fs/cgroup/ ├── cpu/ ├── memory/ └── blkio/
Docker资源限制保证容器稳定运行和资源公平分配。