0Pricing
Docker & DevOps Fundamentals · 课时

使用 Slim 与 Distroless 基础镜像减小镜像体积

选择精简的基础镜像、移除构建工具,并使用 distroless 或 scratch 基础镜像来缩小最终镜像,加快拉取速度并减少攻击面

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

为什么镜像大小很重要

更小的镜像拉取速度更快、启动更迅速、存储成本更低,并且暴露给攻击者的软件包更少。优化大小既能提升性能,也能增强安全性。

选择精简的基础镜像

默认镜像使用方便,但体积较大。将 node:20(约 1GB)替换为 node:20-slim 或 node:20-alpine,可以立即减少数百兆字节。

FROM node:20-slim

Alpine 的权衡

Alpine 体积很小,但使用的是 musl libc 而不是 glibc,这偶尔会导致原生二进制文件无法运行。请仔细测试;有时 -slim 才是更安全的精简选项。

FROM python:3.12-alpine

合并 RUN 层

每个 RUN 都会增加一个层。请将相关命令串联起来,并在同一层中完成清理,否则已删除的文件仍会使之前的层变得臃肿。

RUN apt-get update \
 && apt-get install -y curl \
 && rm -rf /var/lib/apt/lists/*

使用 .dockerignore

.dockerignore 文件可以将无用内容排除在构建上下文之外,例如 node_modules、.git 和日志。上下文更小,构建速度更快,层也更小。

# .dockerignore
.git
node_modules
*.log

多阶段构建回顾

在一个阶段中使用所有编译器进行构建,然后仅通过 COPY --from 将构建产物复制到干净的最终阶段。工具链不会被打包进最终镜像。

FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN go build -o app

FROM alpine:3.20
COPY --from=build /src/app /app

认识 Distroless

Distroless 镜像只包含您的应用及其运行时——没有命令行解释器、软件包管理器或其他多余的二进制文件。它体积小,也更难被利用。

FROM gcr.io/distroless/static-debian12
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]

没有命令行解释器也没问题

Distroless 没有命令行解释器,因此 RUN 命令和 docker exec sh 都无法使用。请在更早的阶段完成所有设置;必须进入容器内部检查时,请使用 :debug 标签。

scratch 基础镜像

对于完全静态的二进制文件(Go、Rust),FROM scratch 除了您的可执行文件之外什么也不会打包,最终通常只有几兆字节。

FROM scratch
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]

衡量优化成果

使用 docker images 比较大小,使用 docker history 查看哪些层最大。请先优化体积最大的层。

docker history myapp:latest

固定版本,而不是 latest

固定具体的标签或摘要可以让构建具备可复现性,并避免上游 latest 发生变化时镜像大小突然增加。

FROM node:20.11.1-slim

快速检查

Distroless 镜像有什么特别之处?

回顾

现在,您已经可以大幅缩减镜像:

  • 选择 -slim、-alpine、Distroless 或 scratch 基础镜像
  • 串联并清理 RUN 层;使用 .dockerignore
  • 多阶段构建会移除工具链
  • 使用 docker history 衡量结果,并固定版本

更小的镜像意味着更快速、更安全的部署。

常见问题解答

「使用 Slim 与 Distroless 基础镜像减小镜像体积」课时是免费的吗?

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

「使用 Slim 与 Distroless 基础镜像减小镜像体积」这节课中我会学到什么?

选择精简的基础镜像、移除构建工具,并使用 distroless 或 scratch 基础镜像来缩小最终镜像,加快拉取速度并减少攻击面 你通过在浏览器中直接运行的动手代码来练习 Docker & DevOps Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

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

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

「使用 Slim 与 Distroless 基础镜像减小镜像体积」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 用于提升效率的多阶段构建
  2. 利用构建缓存
  3. Dockerfile 安全最佳实践
  4. 使用 Slim 与 Distroless 基础镜像减小镜像体积
← 返回 Docker & DevOps Fundamentals