0Pricing
Docker & DevOps Fundamentals · 课时

多阶段构建与更小的镜像

学习多阶段 Dockerfile 如何将构建工具与最终运行环境分离,从而发布精简的生产镜像,大幅减小镜像体积

多阶段构建与更小的镜像 是 CoddyKit 上的免费 Docker & DevOps Fundamentals 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Docker & DevOps Fundamentals 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Docker & DevOps Fundamentals 课程共包含 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 导师)并解锁 Docker & DevOps Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Docker & DevOps Fundamentals 课程共包含 4 节课。

「多阶段构建与更小的镜像」这节课中我会学到什么?

学习多阶段 Dockerfile 如何将构建工具与最终运行环境分离,从而发布精简的生产镜像,大幅减小镜像体积 你通过在浏览器中直接运行的动手代码来练习 Docker & DevOps Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Docker & DevOps Fundamentals 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Docker & DevOps Fundamentals 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「多阶段构建与更小的镜像」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Docker & DevOps Fundamentals 课中编写并运行代码吗?

能。每节 Docker & DevOps Fundamentals 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 理解 Dockerfile
  2. 创建自定义 Docker 镜像
  3. 镜像分层与优化
  4. 多阶段构建与更小的镜像
← 返回 Docker & DevOps Fundamentals