Skip to content

Docker 性能优化

本章将介绍 Docker 容器的性能优化策略,包括镜像优化、运行时优化和资源管理。

镜像体积优化

选择合适的基础镜像

基础镜像大小适用场景
scratch0 MBGo 等静态编译语言
alpine~5 MB大多数场景
distroless~20 MB安全要求高的场景
slim~80-200 MB需要更多系统工具
完整版~800 MB+构建阶段

减少镜像层数

dockerfile
# ❌ 多个 RUN 指令
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y wget
RUN apt-get clean

# ✅ 合并为一个 RUN
RUN apt-get update && \
    apt-get install -y curl wget && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

多阶段构建

dockerfile
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html

使用 .dockerignore

node_modules
.git
*.md
.env
dist
test
coverage
.vscode

构建速度优化

利用构建缓存

dockerfile
# ✅ 依赖文件先复制(变化少,缓存命中率高)
COPY package*.json ./
RUN npm ci

# 源代码后复制(变化多)
COPY . .
RUN npm run build

使用 BuildKit

bash
# 启用 BuildKit
DOCKER_BUILDKIT=1 docker build -t myapp .

# 或在 daemon.json 中全局启用
{
  "features": {
    "buildkit": true
  }
}

BuildKit 优势:

  • 并行构建不相关的阶段
  • 更智能的缓存管理
  • 更好的安全性(不泄露 secret)

缓存依赖下载

dockerfile
# 使用 BuildKit 缓存挂载
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN --mount=type=cache,target=/root/.cache/pip \
    pip install -r requirements.txt
COPY . .

运行时性能优化

CPU 优化

bash
# 限制 CPU 使用
docker run --cpus 2 myapp              # 最多使用 2 个 CPU
docker run --cpu-shares 512 myapp       # CPU 权重(相对值)
docker run --cpuset-cpus "0,1" myapp    # 绑定到指定 CPU 核心

内存优化

bash
# 限制内存
docker run -m 512m myapp               # 最大 512MB 内存
docker run -m 512m --memory-swap 1g myapp  # 内存 + swap 共 1GB
docker run --memory-reservation 256m myapp  # 软限制

存储性能

bash
# 使用 tmpfs 提升临时文件性能
docker run --tmpfs /tmp:rw,size=100m myapp

# 使用命名数据卷(性能优于 bind mount)
docker run -v mydata:/data myapp

网络性能

bash
# 使用 host 网络模式(最高性能,无网络隔离)
docker run --network host myapp

# 调整 MTU
docker network create --opt com.docker.network.driver.mtu=9000 my-net

资源监控

docker stats

bash
# 实时监控所有容器
docker stats

# 监控指定容器
docker stats myapp

# 格式化输出
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

磁盘使用分析

bash
# 查看 Docker 磁盘使用概览
docker system df

# 详细信息
docker system df -v

清理资源

bash
# 清理所有未使用的资源
docker system prune -a

# 清理未使用的镜像
docker image prune -a

# 清理未使用的数据卷
docker volume prune

# 清理构建缓存
docker builder prune

Docker Compose 性能配置

yaml
services:
  app:
    image: myapp
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 512M
        reservations:
          cpus: '0.5'
          memory: 128M
    tmpfs:
      - /tmp:size=100M
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

性能优化检查清单

优化项影响优先级
使用 Alpine 基础镜像减小镜像体积
多阶段构建减小镜像体积
利用构建缓存加速构建
.dockerignore加速构建
合并 RUN 指令减少层数
资源限制防止资源争抢
使用命名数据卷提升 I/O 性能
启用 BuildKit加速构建

本章小结

Docker 性能优化涵盖镜像构建和容器运行两个阶段。通过选择合适的基础镜像、利用构建缓存、合理配置资源限制,可以显著提升 Docker 的使用效率。

延伸阅读