Docker 性能优化
本章将介绍 Docker 容器的性能优化策略,包括镜像优化、运行时优化和资源管理。
镜像体积优化
选择合适的基础镜像
| 基础镜像 | 大小 | 适用场景 |
|---|---|---|
| scratch | 0 MB | Go 等静态编译语言 |
| 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 pruneDocker 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 的使用效率。