Dockerfile 安全最佳实践
在 Dockerfile 中实施安全措施,尽量减少漏洞并缩小攻击面
Dockerfile 安全最佳实践 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
保护您的 Docker 构建文件!
欢迎学习Docker 构建文件安全最佳实践!安全的应用程序始于安全的基础。
您的 Docker 构建文件不仅仅是构建脚本,也是应用程序安全性的蓝图。在这里采用不当做法可能会导致严重漏洞。
在本课中,我们将探讨强化 Docker 镜像并尽量减少潜在攻击面的关键策略。

从可信的基础镜像开始
FROM 指令是您的第一道防线。请始终从 Docker Hub 等可信来源选择官方且维护良好的基础镜像。
- 官方镜像:这些镜像经过验证并会定期更新。
- 明确的标签:请避免使用
latest。请使用明确的版本标签(例如alpine:3.18),以确保可预测性和稳定性。 - 最小化镜像:请选择“slim”或“alpine”版本。它们包含的软件包更少,也就意味着潜在漏洞更少。
选择安全的基础镜像
了解选择精简且版本明确的基础镜像如何提升安全性。这样可以减少可能被利用的软件包和工具数量。
FROM alpine:3.18
# This is better than:
# FROM ubuntu:latest
# FROM python:latest
# Alpine is a minimal Linux distribution,
# making the image smaller and more secure.尽量减小镜像大小
向镜像中添加的每个文件、软件包或依赖项,都会扩大其“攻击面”。系统中存在的软件越少,潜在漏洞也就越少。
只安装应用程序运行所绝对必需的内容。不再需要构建工具和临时文件后,请将其删除。
安装后进行清理
安装软件包时,请始终清理软件包管理器缓存并删除不必要的文件。这样可以减小最终镜像的大小,并消除潜在的信息泄露。
对于基于 Debian 的镜像(例如 Ubuntu),请使用 apt-get clean,并在同一条 RUN 指令中删除 /var/lib/apt/lists/*。
FROM debian:stable-slim
RUN apt-get update && \
apt-get install -y --no-install-recommends \
curl \
git && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# All in one RUN command to leverage Docker's caching and reduce layers.不要以根用户运行!
默认情况下,Docker 容器中的进程会以 root 用户身份运行。这是一个重大的安全风险!
如果攻击者控制了您的容器,他们将拥有根用户权限,可能借此逃逸容器或危害主机系统。
请始终创建专用的非根用户,并使用 USER 指令切换到该用户。
设置非根用户
下面介绍如何创建新用户,并指示 Docker 后续以该用户身份运行命令。如果容器遭到入侵,这可以大幅限制潜在损害。
FROM alpine:3.18
# Create a non-root user and group
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
# Switch to the non-root user
USER appuser
CMD ["echo", "Hello from non-root user!"]Docker 构建文件中不要存放机密信息!
绝不要将 API 密钥、数据库密码或私钥等敏感信息直接写入 Docker 构建文件,或将其提交到镜像中。
任何能够访问镜像的人都可以轻易提取这些机密信息,即使您在后续层中删除了它们。
相反,请在运行时使用 Docker Secrets、环境变量(用于非敏感数据)或 Kubernetes Secrets 等安全方法。
优先使用 COPY 而非 ADD
COPY 和 ADD 指令都可以将文件复制到镜像中,但出于安全性和清晰性的考虑,通常更推荐使用 COPY。
COPY:只能复制本地文件或目录,行为简单且可预测。ADD:还可以从网址获取文件,并自动解压压缩归档文件(tar、gzip)。这些额外功能会引入潜在的安全风险,例如下载不可信内容或解压恶意归档文件。
除非确实需要 ADD 的高级功能并且了解相关风险,否则请坚持使用 COPY。
安全检查!
以下哪种 Docker 构建文件做法,是减少攻击面并尽量降低潜在漏洞的关键步骤?
您的安全 Docker 构建文件之旅
做得好!您已经学会了构建安全容器化基础的 Docker 构建文件安全最佳实践:
- 从可信且精简的基础镜像开始:使用官方、版本明确且轻量的镜像。
- 尽量减小镜像大小:只安装所需内容,并在安装后进行清理。
- 以非根用户运行:限制权限,降低潜在安全 breach 的影响。
- 避免使用机密信息:绝不要将敏感数据硬编码到 Docker 构建文件中。
- 优先使用 `COPY` 而非 `ADD`:选择行为更可预测且更安全的 `COPY` 指令。
应用这些实践,可以显著提升容器化应用程序的安全态势!
常见问题解答
「Dockerfile 安全最佳实践」课时是免费的吗?
是的 — 「Dockerfile 安全最佳实践」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「Dockerfile 安全最佳实践」这节课中我会学到什么?
在 Dockerfile 中实施安全措施,尽量减少漏洞并缩小攻击面 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「Dockerfile 安全最佳实践」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 用于提升效率的多阶段构建
- 利用构建缓存
- Dockerfile 安全最佳实践
- 使用 Slim 与 Distroless 基础镜像减小镜像体积