centos上docker资源如何管理
导读:CentOS 上 Docker 资源管理实践 一 核心维度与常用参数 CPU 配额与份额:使用 –cpus 限制可用 CPU 核数(如 –cpus=1.5);使用 –cpu-shares 设置相对权重(默认 1024,仅在资源竞争时生效...
CentOS 上 Docker 资源管理实践
一 核心维度与常用参数
- CPU
- 配额与份额:使用 –cpus 限制可用 CPU 核数(如 –cpus=1.5);使用 –cpu-shares 设置相对权重(默认 1024,仅在资源竞争时生效)。
- 绑定核:使用 –cpuset-cpus 将容器固定到指定 CPU 核心(如 –cpuset-cpus=“0,1”)。
- 内存
- 限额:使用 -m/–memory 设置最大物理内存(如 -m 512m)。
- 内存+Swap:使用 –memory-swap 设置内存与 Swap 的总上限;仅指定 -m 时,默认 –memory-swap=2×-m;设为 –memory-swap=-1 表示不限制 Swap。
- 磁盘 I/O
- 权重:使用 –blkio-weight 调整块设备 I/O 的相对优先级(默认 500)。
- 速率/次数:使用 –device-read/write-bps 限制每秒字节数,使用 –device-read/write-iops 限制每秒 IOPS(如 –device-write-bps=/dev/sda:30MB)。
- 存储与日志
- 日志轮转:在 /etc/docker/daemon.json 中配置日志驱动与轮转(如 “max-size”: “100m”, “max-file”: “5”)。
- 数据目录:通过 “data-root” 将 Docker 数据目录迁移至大容量磁盘(如 /home/docker)。
二 快速上手示例
- 运行容器并限制 CPU、内存与 Swap
- 示例:
docker run -d --name app --cpus=1.5 -m 512m --memory-swap=1g nginx:alpine
- 示例:
- 绑定 CPU 核心
- 示例:
docker run -d --name app2 --cpuset-cpus="0,1" nginx:alpine
- 示例:
- 限制磁盘写速率
- 示例:
docker run -it --device-write-bps=/dev/sda:30MB centos:7 dd if=/dev/zero of=test bs=1M count=300 oflag=direct
- 示例:
- 使用 Docker Compose 设置资源
- 示例:
version: "3.8" services: web: image: nginx:alpine deploy: resources: limits: cpus: "1" memory: "512M" reservations: cpus: "0.5" memory: "256M"
- 示例:
三 验证与观测
- 实时查看容器资源使用
- 命令:
docker stats(观察 CPU%、MEM USAGE/LIMIT、MEM %、NET I/O、BLOCK I/O 等)。
- 命令:
- 基线压测与超限验证
- CPU:
docker run --rm progrium/stress --cpu 2(配合不同 –cpus/–cpu-shares 观察争用效果)。 - 内存:
docker run --rm -m 200M progrium/stress --vm 1 --vm-bytes 280M(接近限额可成功,超过将被 OOM 终止)。
- CPU:
四 存储与日志治理
- 限制容器日志大小与保留数
- 编辑 /etc/docker/daemon.json:
{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "5" } } - 使配置生效:
systemctl restart docker。
- 编辑 /etc/docker/daemon.json:
- 迁移 Docker 数据目录至大磁盘
- 步骤:
systemctl stop dockerrsync -aqxP /var/lib/docker/ /home/docker/- 备份原目录:
mv /var/lib/docker /var/lib/docker.bak - 在 /etc/docker/daemon.json 中设置
"data-root": "/home/docker" systemctl start docker
- 步骤:
- 清理无用资源
- 命令:
docker system prune -a(谨慎,会删除停止容器、悬挂镜像、未使用网络等);docker volume prune(清理未使用卷)。
- 命令:
五 进阶与注意事项
- cgroups 细粒度控制
- Docker 基于 cgroups 实现资源隔离与限额;必要时可在 /sys/fs/cgroup/ 下查看或调整对应子系统参数(如 cpu.cfs_quota_us/cpu.cfs_period_us),用于更精细的 CPU 配额管理。
- 重要规则与易错点
- –cpu-shares 是相对权重,非绝对值;CPU 空闲时容器仍可占满空闲核。
- 仅设置 -m 时,默认 –memory-swap=2×-m;如需允许使用 Swap,可显式设置 –memory-swap 为更大值或 -1。
- –device-read/write-bps/iops 需针对具体块设备(如 /dev/sda),且测试时建议使用 oflag=direct 以绕过页缓存,得到稳定带宽/IOPS 数据。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos上docker资源如何管理
本文地址: https://pptw.com/jishu/772093.html
