关键点是镜像、运行时、宿主机协同调优:精简镜像(alpine/distroless+多阶段构建+合并run)、设资源限制(--cpus/--memory/--ulimit)、优化存储网络(overlay2/ host网络/禁用透明大页)、定期清理与监控。

直接上关键点:调优不是堆参数,而是从镜像、运行时、宿主机三处协同发力。重点在资源可控、启动够快、IO不卡、内存不崩。
精简镜像,加快启动和部署
镜像太大是性能第一杀手——拉取慢、启动慢、占用多。核心动作就三条:
- 用 Alpine 或 distroless 基础镜像,比如
node:16-alpine(约80MB)替代node:16(900MB+) - 强制多阶段构建,把构建依赖和运行环境彻底分离,只拷贝最终需要的二进制或静态文件
- 合并 RUN 指令 + 清理缓存,例如
RUN apk add --no-cache curl wget && rm -rf /var/cache/apk/*,避免残留层膨胀
运行时资源限制必须设,不能靠默认
不限制=失控。容器跑飞一个,整台宿主机可能被拖垮。关键参数要配齐:
-
CPU:用
--cpus=1.5控制最大核数,高优先级服务可加--cpuset-cpus="0,2"绑定物理核 -
内存:
--memory=512m是底线,搭配--memory-swap=1g防止 OOM,Java 类应用建议再加 JVM 的-Xmx双重约束 -
进程与句柄:通过
--ulimit nofile=65535:65535解除默认 1024 文件描述符限制,高并发 Web 或数据库必须开
存储与网络,别踩默认配置坑
很多卡顿其实来自底层 IO 和网络栈,不是应用本身问题:
- 确认 Docker 使用
overlay2存储驱动(现代 Linux 默认),执行docker info | grep "Storage Driver"查看;旧系统若用 aufs,性能掉档明显 - 高并发场景慎用 bridge 网络,默认 NAT 开销大;可改用
--network host直通宿主机网络栈(注意端口冲突) - Redis、MySQL 等中间件务必关透明大页:
echo never > /sys/kernel/mm/transparent_hugepage/enabled,否则延迟抖动剧烈
日常维护不能省,自动清理成习惯
不用的镜像、悬空层、停止容器、匿名卷会悄悄吃光磁盘:
- 定期执行
docker system prune -a --volumes(生产环境先加--dry-run预览) - 用
docker stats实时盯住 CPU、内存、IO 使用,发现异常飙升及时干预 - 结合
docker system df查各类型资源占用,定位谁占了最多磁盘空间











