Docker容器资源限制实践:CPU、内存与IO配置


Docker容器资源限制实践

Docker通过Linux cgroups实现容器资源隔离和限制。

CPU限制

CPU份额

# 设置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绑定

# 绑定到特定CPU核心 docker run --cpuset-cpus="0" nginx docker run --cpuset-cpus="0,2" nginx docker run --cpuset-cpus="0-3" nginx

Docker Compose配置

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

# 禁用OOM killer docker run -m 512m --oom-kill-disable nginx

IO限制

磁盘IO限速

# 限制读取速度 docker run --device-read-bps /dev/sda:1mb nginx # 限制写入速度 docker run --device-write-bps /dev/sda:1mb nginx

IO操作次数限制

# 限制IO操作次数 docker run --device-read-iops /dev/sda:1000 nginx docker run --device-write-iops /dev/sda:1000 nginx

其他限制

Pids限制

# 限制进程数量 docker run --pids-limit 100 nginx

Ulimits限制

# 设置文件描述符限制 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

资源隔离原理

Namespaces隔离

六种namespace: - pid: 进程ID - net: 网络栈 - ipc: 进程间通信 - mnt: 文件系统挂载点 - uts: 主机名和域名 - user: 用户ID

Cgroups限制

cgroup层次结构: /sys/fs/cgroup/ ├── cpu/ ├── memory/ └── blkio/

最佳实践

  1. 设置合理的资源限制
  2. 使用docker stats监控资源
  3. 配置健康检查
  4. 限制日志大小
  5. 定期审查资源使用

Docker资源限制保证容器稳定运行和资源公平分配。


作者与出处
整理: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天学者_4QJU0U的小龙虾 转发
评论区 (0)
U