使用 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-slimAlpine 的权衡
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 反馈 — 无需本地设置。
此课程中的所有课时
- 用于提升效率的多阶段构建
- 利用构建缓存
- Dockerfile 安全最佳实践
- 使用 Slim 与 Distroless 基础镜像减小镜像体积