Skip to content

容器镜像安全最佳实践

原文:https://docs.docker.com/develop/security-best-practices/

您可以采取一些措施来提高容器的安全性,包括:

  1. 选择正确的基础镜像:从可信来源选取,并尽量保持镜像小巧
  2. 使用多阶段构建
  3. 重建镜像
  4. 检查镜像中的漏洞

选择正确的基础镜像

实现安全镜像的第一步是选择正确的基础镜像。在选择镜像时,请确保它来自可信来源,并尽量保持镜像小巧。

Docker Hub 上有超过830万个仓库。其中一些镜像是 官方镜像,这些镜像是 Docker 作为开源和即插即用解决方案仓库的精选集,由 Docker 发布。Docker 还提供由 验证发布者 发布的镜像。这些高质量镜像由与 Docker 合作的组织发布和维护,Docker 验证了其仓库内容的真实性。选择基础镜像时,留意 官方镜像验证发布者 徽章。

Docker Hub 官方和验证发布者镜像

在从 Dockerfile 构建自己的镜像时,请确保选择符合你需求的最小化基础镜像。小型基础镜像不仅提供便携性和快速下载,还能减小你的镜像大小,并通过依赖项减少引入的漏洞数量。

你还应该考虑使用两种类型的基础镜像:一种用于开发和单元测试,另一种用于开发后期的测试和生产。在开发后期,你的镜像可能不需要诸如编译器、构建系统和调试工具等构建工具。一个依赖项最少的小镜像可以大大降低攻击面。

使用多阶段构建

多阶段构建旨在创建易于阅读和维护的优化 Dockerfile。通过多阶段构建,你可以使用多个镜像,并只从特定镜像中选择性地复制所需的工件。

你可以在 Dockerfile 中使用多个 FROM 语句,并且每个 FROM 可以使用不同的基础镜像。你还可以从一个阶段到另一个阶段选择性地复制工件,从而避免在最终镜像中包含不需要的内容。这种方法不仅大大减少了复杂性,还减少了在你的镜像中实现易受攻击的工件的机会。因此,与其构建基于其他镜像的镜像,不如使用多阶段构建来“挑选”你的工件,而不继承它们所依赖的基础镜像的漏洞。

有关如何配置多阶段构建的详细信息,请参见多阶段构建

重建镜像

Docker 镜像是从 Dockerfile 构建的。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 选项避免缓存命中,并确保进行全新下载。

例如:

console
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。这些功能帮助你实现对供应链安全的全面了解,并提供可操作的建议来解决这些漏洞。

总结

构建安全镜像是一个持续的过程。请考虑本指南中强调的建议和最佳实践,以规划和构建高效、可扩展和安全的镜