0Pricing
Docker & DevOps Fundamentals · 课时

Dockerfile 安全最佳实践

在 Dockerfile 中实施安全措施,尽量减少漏洞并缩小攻击面

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

保护您的 Docker 构建文件!

欢迎学习Docker 构建文件安全最佳实践!安全的应用程序始于安全的基础。

您的 Docker 构建文件不仅仅是构建脚本,也是应用程序安全性的蓝图。在这里采用不当做法可能会导致严重漏洞。

在本课中,我们将探讨强化 Docker 镜像并尽量减少潜在攻击面的关键策略。

Dockerfile 安全最佳实践 — 插图 1

从可信的基础镜像开始

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 导师)并解锁 Docker & DevOps Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Docker & DevOps Fundamentals 课程共包含 4 节课。

「Dockerfile 安全最佳实践」这节课中我会学到什么?

在 Dockerfile 中实施安全措施,尽量减少漏洞并缩小攻击面 你通过在浏览器中直接运行的动手代码来练习 Docker & DevOps Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

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

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

「Dockerfile 安全最佳实践」课时需要多长时间?

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

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

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

此课程中的所有课时

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