Docker 容器优化:从 1.2GB 到 80MB
2026-05-10
DockerDevOps
问题
接手一个 Node.js 项目时,发现 Docker 镜像高达 1.2GB。CI/CD 流水线每次构建都要十几分钟。
分析
# 原始 Dockerfile
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
CMD ["node", "dist/index.js"]
问题显而易见:包含了完整的构建工具链、devDependencies 和源代码。
优化
第一步:多阶段构建
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]
第二步:精简依赖
只复制生产依赖:
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
RUN npm prune --production
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]
第三步:distroless
终极优化——使用 distroless 基础镜像:
最终镜像:80MB。
小的镜像意味着更快的部署、更低的安全风险和更少的存储成本。
加载中...