Docker性能调优在CentOS上如何进行
小樊
34
2025-12-13 11:28:32
CentOS 上 Docker 性能调优实战指南
一 存储与镜像优化
- 使用高性能存储驱动:优先选择 overlay2(现代内核与 Docker 的推荐驱动),在 /etc/docker/daemon.json 中配置:
{
“storage-driver”: “overlay2”
}
修改后执行:systemctl daemon-reload && systemctl restart docker。该驱动在多数工作负载下具备更好的 I/O 性能与稳定性。
- 数据目录与磁盘选择:将 /var/lib/docker 迁移至 SSD/NVMe 或大容量分区,避免与系统盘争用;迁移步骤:
- systemctl stop docker
- mv /var/lib/docker /home/data/docker
- ln -sf /home/data/docker /var/lib/docker
- systemctl start docker
- docker info | grep “Docker Root Dir” 验证
- 镜像瘦身与构建优化:采用 多阶段构建、选择 Alpine 等轻量基础镜像,减少镜像层数与体积,显著缩短 拉取与启动时间。
- 定期清理:执行 docker system prune -a 清理悬空镜像、停止容器与无用网络,避免空间膨胀带来的性能劣化。
二 资源限制与容器隔离
- CPU 控制:
- 限制可用核数:–cpus=2
- 绑定 CPU 核心:–cpuset-cpus=0,2(仅使用核心 0 与 2)
- 内存控制:
- 限制最大内存:–memory=512m
- 内存+Swap 总量:–memory-swap=1g
- 磁盘 I/O 控制:–blkio-weight=500(相对权重,范围 10–1000)
- 设备带宽限制:–device-read-bps=/dev/sda:1mb、–device-write-bps=/dev/sda:1mb
- 运行时默认限制:在 daemon.json 中设置 default-ulimits,如:
{
“default-ulimits”: {
“nofile”: { “Name”: “nofile”, “Soft”: 65536, “Hard”: 65536 }
}
}
- 编排场景(Compose):在服务下配置 resources.limits/requests,便于统一治理与调度。
三 网络性能优化
- 网络模式取舍:
- 低开销优先:在隔离允许的前提下使用 –net=host,可绕过 NAT/iptables 转发带来的额外消耗,吞吐与延迟表现更接近物理机;注意端口冲突与安全风险。
- 多容器互通:默认 bridge 模式便于隔离与端口映射,但在高并发短连接场景存在 iptables/NAT 开销;可通过调整 conntrack、优化规则或改用 host/其他网络方案权衡。
- 带宽整形与 QoS:对关键业务或共享链路使用 tc 做流量整形,例如限制某网口为 100mbit:
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.0/24 flowid 1:1
- 大规模集群网络:考虑 Calico/Flannel/Cilium 等 CNI 插件以获得更好的 可扩展性与网络性能。
四 系统内核与 Docker 守护进程调优
- 内存与交换:适度降低 vm.swappiness(如设为 10),减少换页对延迟敏感应用的影响;仅在明确需要时再考虑为容器设置内存交换策略。
- 网络栈优化:提升 TCP 缓冲区以减少长肥管道抖动与重传:
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
- 镜像加速:为国内环境配置 registry-mirrors,加速拉取并缩短部署时间:
{
“registry-mirrors”: [“https://.mirror.aliyuncs.com”]
}
- 安全与性能平衡:生产环境不建议直接关闭 SELinux 或 firewalld;如为压测或受控环境,可临时停用以排除干扰,但需充分评估风险并恢复加固。
五 监控与容量规划
- 容器层监控:使用 docker stats 实时查看 CPU、内存、网络 I/O,结合阈值告警与 HPA/手动扩缩容策略,避免资源争用。
- 节点层监控:结合 iftop/nload/sar 等工具观察宿主机 带宽、负载、I/O,定位瓶颈所在层级(网络/磁盘/CPU)。
- 容量评估:在 8GB 内存 等受限环境下,合理设置容器 requests/limits、控制并发实例数,并通过清理与压缩镜像降低系统压力。