0Pricing
Docker & DevOps Fundamentals · 课时

镜像分层与优化

了解 Docker 镜像如何分层,并应用相关技术优化镜像大小和构建时间

镜像分层与优化 是 CoddyKit 上的免费 Docker & DevOps Fundamentals 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Docker & DevOps Fundamentals 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Docker & DevOps Fundamentals 课程共包含 4 节课。

镜像层:构建模块

Docker 镜像并不是一个单独的巨大文件,而是由一系列只读层构建而成。您可以把这些层想象成叠放在一起的透明胶片。

每一层都代表对镜像的一次更改,使镜像更加高效且灵活。这种分层机制是 Docker 工作方式的基础。

镜像分层与优化 — 插图 1

Dockerfile 指令与层

编写 Dockerfile 时,几乎每条指令都会在上一层之上创建一个新层。FROM、RUN、COPY 和 ADD 等指令都会促成新层的创建。

Docker 会按顺序执行这些指令,并根据上一层的状态构建每个新层。

检查镜像历史

您可以使用 docker history 命令查看组成镜像的各个层。此命令会显示每条指令、其大小以及创建时间,帮助您了解镜像是如何逐步增大的。

这是调试镜像大小问题的强大工具。

docker history my-image:latest

层缓存的强大作用

Docker 使用了智能的构建缓存。如果 Dockerfile 中的某条指令及其上下文(例如要复制的文件)自上次构建以来没有发生变化,Docker 就会重新使用现有层。

这种复用会显著加快后续构建,因为 Docker 不需要重新执行未更改的步骤。

优化一:合理安排层的顺序

Dockerfile 中指令的顺序对于有效使用缓存至关重要。请将不常变化的指令(例如安装系统依赖项)放在前面。

经常变化的指令(例如复制应用代码)应放在后面。这样,如果只有代码发生变化,Docker 就可以复用稳定依赖项对应的缓存层。

示例:优化层的顺序

比较下面两段 Dockerfile 代码。合理的顺序会先放置稳定的依赖项,使 Docker 能够缓存这些依赖项,只为发生变化的应用代码重新构建层。

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "server.js"]

优化二:合并 RUN 命令

每条 RUN 命令通常都会创建一个新层。将多条命令合并到一条 RUN 指令中,可以减少层数,并且通常还能减小最终镜像的大小。

使用 && \ 运算符将命令串联起来,使它们成为同一个原子层的一部分。

示例:串联 RUN 命令

不要使用多条 RUN 命令,而是使用 && \ 将它们串联起来。这样可以为所有这些操作创建一个更高效的单层。

FROM ubuntu:latest
RUN apt-get update && \
    apt-get install -y curl && \
    rm -rf /var/lib/apt/lists/*
CMD ["bash"]

优化三:清理文件

请始终清理只在构建过程中需要的文件。例如,包管理器缓存(如 apt-get clean)或临时构建产物可能会显著增加镜像层的大小。

在创建这些文件的同一条 RUN 命令中清理它们,可以确保它们不会保留在之前的层中。

快速检查:镜像优化

请考虑下面的 Dockerfile 代码片段:

FROM alpine:latest
COPY . /app
RUN apk add --no-cache git
RUN apk add --no-cache make
CMD ["sh"]

以下哪项修改最适合优化此 Dockerfile,从而减小镜像大小并可能加快重新构建速度?

回顾:更精简、更快速的镜像

您已经了解到,Docker 镜像是分层构建的,每条指令通常都会创建一个新层。理解这一点是进行优化的关键!

  • 谨慎安排指令顺序,最大限度地命中构建缓存。
  • 将多条 RUN 命令合并为一条,以减少层数。
  • 在相应的 RUN 命令中清理临时文件,以保持层的大小。

这些技术有助于创建更小、构建速度更快的 Docker 镜像,这对于高效部署至关重要。

常见问题解答

「镜像分层与优化」课时是免费的吗?

是的 — 「镜像分层与优化」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Docker & DevOps Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Docker & DevOps Fundamentals 课程共包含 4 节课。

「镜像分层与优化」这节课中我会学到什么?

了解 Docker 镜像如何分层,并应用相关技术优化镜像大小和构建时间 你通过在浏览器中直接运行的动手代码来练习 Docker & DevOps Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

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

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

「镜像分层与优化」课时需要多长时间?

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

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

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

此课程中的所有课时

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