Appearance
性能优化
资源限制配置
合理限制容器资源,避免单个容器耗尽宿主机资源:
bash
# 内存限制
docker run -d \
--memory 512m \ # 最大内存
--memory-reservation 256m \ # 软限制(内存不足时)
--memory-swap 512m \ # 与 memory 相同则禁用 swap
myapp
# CPU 限制
docker run -d \
--cpus 1.5 \ # 最多使用 1.5 个 CPU
--cpu-shares 512 \ # 相对权重(默认 1024)
myapp
# 磁盘 IO 限制
docker run -d \
--device-read-bps /dev/sda:10mb \ # 读速度限制
--device-write-bps /dev/sda:10mb \ # 写速度限制
myapp在 Compose 中配置:
yaml
services:
api:
deploy:
resources:
limits:
cpus: "1.0"
memory: 512M
reservations:
cpus: "0.5"
memory: 256M构建性能优化
利用构建缓存
dockerfile
# 将变化频率低的层放在前面
COPY package*.json ./ # 依赖变化少 → 缓存稳定
RUN npm install
COPY . . # 代码变化频繁 → 放在后面使用 BuildKit 并行构建
bash
# 开启 BuildKit(Docker 23.0+ 默认开启)
DOCKER_BUILDKIT=1 docker build -t myapp .
# 并行构建多个阶段
docker buildx build \
--cache-from type=registry,ref=myapp:buildcache \
--cache-to type=registry,ref=myapp:buildcache,mode=max \
-t myapp:latest .构建缓存持久化(CI/CD)
yaml
# GitHub Actions 示例
- name: Build with cache
uses: docker/build-push-action@v5
with:
cache-from: type=gha
cache-to: type=gha,mode=max镜像体积优化
bash
# 查看镜像大小
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
# 使用 dive 分析
dive myapp:latest
# 清理构建缓存
docker builder prune容器启动性能
bash
# 使用 init 处理僵尸进程(推荐)
docker run --init myapp
# 或在 Dockerfile 中使用 tini
FROM node:20-alpine
RUN apk add --no-cache tini
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["node", "app.js"]网络性能
bash
# host 网络(最高性能,无 NAT)
docker run --network host nginx
# 增大 SO_RCVBUF(网络缓冲区)
docker run --sysctl net.core.rmem_max=16777216 myapp
# macOS 开发性能优化(Docker Desktop)
# 在 Settings → Resources → Advanced 中选择 VirtioFS 文件共享存储性能
bash
# 确认使用 overlay2 存储驱动(推荐)
docker info | grep "Storage Driver"
# 使用数据卷替代绑定挂载(macOS 上性能更好)
# 开发时对于 node_modules 等,使用匿名卷覆盖
docker run -v $(pwd):/app -v /app/node_modules node:20 npm start监控资源使用
bash
# 实时监控
docker stats
# 格式化输出
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"
# 集成 Prometheus + cAdvisor
docker run -d \
--name cadvisor \
--volume /:/rootfs:ro \
--volume /var/run:/var/run:ro \
--volume /sys:/sys:ro \
--volume /var/lib/docker/:/var/lib/docker:ro \
-p 8080:8080 \
gcr.io/cadvisor/cadvisor:latest日常维护
bash
# 清理无用资源(释放磁盘空间)
docker system prune # 清理停止的容器、悬空镜像、未使用网络
docker system prune -a # 同上 + 未使用的镜像
docker system prune -a -f # 不提示确认
# 查看磁盘使用
docker system df
# 定期清理
# 可加入 crontab,每周清理一次
0 0 * * 0 docker system prune -a -f总结
性能优化的关键点:
- 合理限制资源:防止资源争抢
- 优化构建:合理利用缓存,使用多阶段构建
- 最小化镜像:使用 alpine/slim,减少拉取时间
- 定期清理:防止磁盘空间耗尽
- 监控资源:及时发现性能问题