多阶段构建与更小的镜像
学习多阶段 Dockerfile 如何将构建工具与最终运行环境分离,从而发布精简的生产镜像,大幅减小镜像体积
多阶段构建与更小的镜像 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
镜像大小为何重要
较大的镜像构建、推送和拉取速度都较慢,而且会带来更大的攻击面。良好的工程目标是发布一个能够运行应用的最小镜像。
臃肿问题
构建应用通常需要编译器、开发依赖和构建工具。如果这些内容进入最终镜像,镜像体积就会大幅增加,尽管运行中的应用根本不需要它们。
什么是多阶段构建?
多阶段构建会在一个 Dockerfile 中使用多个 FROM 语句。前面的阶段负责构建应用,最终阶段只复制构建完成的产物,从而不包含构建工具。
为阶段命名
使用 AS 为阶段指定名称,这样后续阶段就可以引用它。
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci在第一个阶段中构建
构建阶段负责编译或打包应用。在这里,所有开发依赖和工具都可用。
COPY . .
RUN npm run build精简的最终阶段
从精简的基础镜像开始最终阶段,然后使用 COPY --from 只复制应用运行所需的内容。
FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules完整的多阶段 Dockerfile
组合这些阶段后,可以生成一个较小的最终镜像,其中包含构建好的应用,但不包含任何构建工具链。
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
CMD ['node', 'dist/main.js']选择较小的基础镜像
基础镜像通常是影响镜像大小的最大因素。Slim 和 Alpine 变体可以显著缩小镜像:
node:20约为较大node:20-slim约为小得多node:20-alpine约为最小,仅包含最少的库
仅安装生产依赖
不要将开发依赖放入运行时镜像。使用生产标志进行安装,可以将测试和构建软件包排除在外。
RUN npm ci --omit=dev使用 .dockerignore
.dockerignore 文件可以将无用内容排除在构建上下文之外,从而加快构建速度,并避免意外复制机密信息或超大文件夹。
node_modules
.git
.env
Dockerfile
*.log衡量结果
通过检查镜像大小来验证成果。构建良好的多阶段镜像,其大小可能只有简单单阶段镜像的一小部分。
docker images myapp快速检查
测试您对多阶段构建的理解。
回顾
您已经学会了如何发布精简的 Docker 镜像:
- 多阶段构建会在一个 Dockerfile 中使用多个
FROM阶段 - 在前面的阶段中构建,然后使用
COPY --from仅将产物复制到精简的最终阶段 - 选择较小的基础镜像(Slim/Alpine),并仅安装生产依赖
- 使用
.dockerignore精简构建上下文
较小的镜像构建更快、部署更迅速,也更加安全。
常见问题解答
「多阶段构建与更小的镜像」课时是免费的吗?
是的 — 「多阶段构建与更小的镜像」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「多阶段构建与更小的镜像」这节课中我会学到什么?
学习多阶段 Dockerfile 如何将构建工具与最终运行环境分离,从而发布精简的生产镜像,大幅减小镜像体积 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「多阶段构建与更小的镜像」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 理解 Dockerfile
- 创建自定义 Docker 镜像
- 镜像分层与优化
- 多阶段构建与更小的镜像