SorryToPerson logo
返回
Docker2026-04-15·8 分钟

Docker 镜像优化实战

介绍 Docker 镜像体积优化、缓存层设计与构建效率提升技巧。

Docker 镜像优化实战

1. 使用更小的基础镜像

  • alpinedistrolessslim 是常见轻量镜像。
  • 根据语言和运行时需求选择精简版本。
dockerfile
FROM node:20-alpine

2. 分层与缓存优化

  • 把不常变化的步骤提前。
  • 依赖安装、环境准备等独立层优先。
dockerfile
COPY package.json package-lock.json ./
RUN npm ci --production
COPY . ./

3. 删除不必要文件

  • 通过 .dockerignore 过滤源码中的临时和编译产物。
  • 不要将测试目录、文档、Git 目录带入镜像。
text
node_modules
.git
.DS_Store
*.log

4. 多阶段构建

  • 构建阶段和运行阶段分离,避免将开发依赖打包进最终镜像。
dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . ./
RUN npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
RUN npm ci --production
CMD ["node", "dist/index.js"]

5. 运行时最小化

  • 只保留运行所需文件。
  • 在最终阶段移除构建工具和缓存。
dockerfile
RUN rm -rf /tmp/* /var/cache/apk/*

6. 镜像层管理

  • 每个 RUN 命令会生成新层。
  • && 合并多个命令,减少层数。
dockerfile
RUN apk add --no-cache git && rm -rf /var/cache/apk/*

7. 复用构建缓存

  • CI 环境可通过 --cache-from 复用已有镜像。
bash
docker build --cache-from myapp:latest -t myapp:1.0.0 .

8. 压缩与扫描

  • 对镜像进行扫描确保没有敏感信息。
  • 若使用 Registry 支持,可启用镜像压缩存储。

9. 常见效果

  • 减少镜像体积,提升部署速度。
  • 缩短构建时间,降低开发迭代成本。
Docker镜像优化