全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 6 分钟 ✍️ juanwangdev

镜像层优化与瘦身

镜像层数影响构建速度和镜像大小,下面介绍优化方法。

层数优化

合并 RUN 指令

dockerfile
# 错误:多层
FROM ubuntu:22.04
RUN apt-get update
RUN apt-get install -y nginx
RUN rm -rf /var/lib/apt/lists/*

# 正确:一层
FROM ubuntu:22.04
RUN apt-get update && \
    apt-get install -y nginx && \
    rm -rf /var/lib/apt/lists/*

每条 RUN 指令创建新层,合并减少层数。

Docker 1.10+ 层优化

dockerfile
# Docker 1.10+ 自动合并连续层
# 但合并指令仍然推荐,减少构建缓存失效

多阶段构建

编译与运行分离

dockerfile
# 编译阶段
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .

# 运行阶段
FROM alpine:3.18
COPY --from=builder /app/myapp .
CMD ["./myapp"]

效果:

  • 编译镜像:~800MB
  • 运行镜像:~10MB

Node.js 多阶段

dockerfile
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm run build

FROM node:18-alpine AS runner
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/server.js"]

基础镜像选择

基础镜像大小推荐场景
ubuntu~77MB开发/调试
debian-slim~30MB通用
alpine~5MB生产
distroless~20MB高安全
dockerfile
# 生产环境使用 Alpine
FROM alpine:3.18
RUN apk --no-cache add nginx

清理无用文件

dockerfile
# 安装后清理
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    nginx && \
    rm -rf /var/lib/apt/lists/* && \
    apt-get clean && \
    rm -rf /tmp/* /var/tmp/*

--no-install-recommends 不安装推荐包,rm -rf 清理临时文件。

.dockerignore

Bash
node_modules/
.git/
*.md
test/
Dockerfile*
docker-compose*

减少构建上下文,加速构建。

镜像分析

text
# 查看镜像层
docker history my-app:latest

# 查看层大小
docker system df -v

# 使用 dive 分析
dive my-app:latest

要点总结

  • 合并 RUN 指令减少层数,提升构建效率
  • 多阶段构建分离编译和运行,显著减小体积
  • 生产环境使用 Alpine 或 distroless 精简基础镜像
  • 安装后清理包缓存和临时文件
  • .dockerignore 排除无关文件,减小构建上下文

📝 发现内容有误?点击此处直接编辑

← 上一篇 网络延迟优化
下一篇 → Rootless 模式运行
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库