安全最佳实践
您可以采取一些步骤来提高容器的安全性。这包括:
选择正确的基础镜像
实现安全镜像的第一步是选择正确的基础镜像。选择镜像时,请确保它是从可信来源构建的并保持较小。
Docker Hub 拥有超过 830 万个存储库。其中一些镜像是 官方镜像,由 Docker 作为一组精选的 Docker 开源和嵌入式解决方案存储库发布。 Docker 还提供由Verified Publishers发布的镜像 。这些高质量的镜像由与 Docker 合作的组织发布和维护,并由 Docker 验证其存储库中内容的真实性。当您选择基础映像时,请留意官方映像和经过验证的发布商 徽章。


从 Dockerfile 构建您自己的映像时,请确保选择符合您要求的最小基础映像。较小的基础映像不仅提供可移植性和快速下载,还可以缩小映像的大小并最大程度地减少通过依赖项引入的漏洞数量。
您还应该考虑使用两种类型的基础映像:第一个映像用于开发和单元测试,第二个映像用于在开发和生产的后期阶段进行测试。在开发的后期阶段,您的映像可能不需要编译器、构建系统和调试工具等构建工具。具有最小依赖性的小映像可以大大降低攻击面。
使用多阶段构建
多阶段构建旨在创建易于阅读和维护的优化 Dockerfile。通过多阶段构建,您可以使用多个映像并有选择地仅复制特定映像所需的工件。
您可以在 Dockerfile 中使用多个FROM
语句,并且可以为每个FROM
.您还可以有选择地将工件从一个阶段复制到另一个阶段,留下最终图像中不需要的东西。这可以产生简洁的最终图像。
这种创建微小图像的方法不仅显着降低了复杂性,而且还减少了在图像中实现易受攻击的伪影的机会。因此,多阶段构建不是在图像上构建的图像,而是在其他图像上构建的图像,而是让您“精挑细选”您的工件,而无需从它们所依赖的基础图像继承漏洞。
有关如何配置多阶段构建的详细信息,请参阅 多阶段构建。
重建图像
Docker 镜像是从 Dockerfile 构建的。 Dockerfile 包含一组指令,可让您自动执行通常(手动)创建映像的步骤。此外,它还可以包含一些导入的库并安装自定义软件。这些在 Dockerfile 中显示为指令。
构建你的形象是那个时刻的快照。当您依赖没有标签的基础镜像时,每次重建时都会得到不同的基础镜像。此外,当您使用软件包安装程序安装软件包时,重建可能会极大地改变映像。例如,包含以下条目的 Dockerfile 在每次重建时可能会产生不同的二进制文件。
# syntax=docker/dockerfile:1
FROM ubuntu:latest
RUN apt-get -y update && apt-get install -y python
Docker 建议您定期重建 Docker 映像,以防止已解决的已知漏洞。重建时,使用该选项
--no-cache
以避免缓存命中并确保全新下载。
例如:
$ docker build --no-cache -t myImage:myTag myPath/
重建映像时请考虑以下最佳实践:
- 每个容器应该只有一个职责。
- 容器应该是不可变的、轻量级的、快速的。
- 不要将数据存储在容器中。请改用共享数据存储。
- 容器应该易于销毁和重建。
- 使用小型基础映像(例如 Linux Alpine)。较小的图像更容易分发。
- 避免安装不必要的包。这可以保持图像的干净和安全。
- 构建时避免缓存命中。
- 在部署之前自动扫描您的映像,以避免将易受攻击的容器推入生产环境。
- 在开发和生产过程中每天分析您的图像是否存在漏洞。在此基础上,如有必要,自动重建图像。
有关构建高效镜像的详细最佳实践和方法,请参阅 Dockerfile 最佳实践。
检查您的图像是否存在漏洞
除了在开发映像时遵循本页概述的最佳实践之外,使用漏洞检测工具持续分析和评估映像的安全状况也很重要。
Docker 工具附带的功能可帮助您及时了解影响您构建或使用的映像的漏洞。
- Docker Hub 支持自动 漏洞扫描功能,启用该功能后,当您将图像推送到 Docker Hub 存储库时,会自动扫描图像。需要Docker 订阅。
- Docker Hub 还支持抢先体验的 高级图像分析功能,该功能通过增强的功能以及更详细和可操作的见解扩展了“核心”漏洞扫描解决方案。
- 对于 CLI,有一个
docker scout
CLI 插件 ,可让您使用终端探索图像的漏洞。 - Docker Desktop 具有本地映像存储中映像的详细映像视图,可以可视化影响映像的所有已知漏洞。
所有这些安全功能均由相同的技术提供支持: Docker Scout。这些功能可帮助您全面了解供应链安全,并为修复这些漏洞提供可行的建议。
结论
构建安全镜像是一个持续的过程。请考虑本指南中重点介绍的建议和最佳实践,以规划和构建高效、可扩展且安全的映像。
总结本指南涵盖的主题:
- 从您信任的基本映像开始。选择基础映像时,请注意官方映像和经过验证的发布商徽章。
- 保护您的代码及其依赖项。
- 选择仅包含所需包的最小基础映像。
- 使用多阶段构建来优化您的图像。
- 确保仔细监控和管理添加到映像中的工具和依赖项。
- 确保在开发生命周期的多个阶段扫描图像。
- 经常检查您的图像是否存在漏洞。