发布于 2026-01-05 5 阅读
0

使用这些酷炫工具确保 Docker 镜像的质量 DEV 全球展示挑战赛,由 Mux 呈现:展示你的项目!

使用这些实用工具确保 Docker 镜像的质量

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

当我们谈到软件测试时,大多数时候都是在测试应用程序代码,以确保其安全性符合我们定义的代码质量指标和功能/业务要求。

单元测试或集成测试等概念同样适用于基础设施相关的代码。

测试虚拟机和裸机系统可能非常复杂,而且非常耗时耗力,但使用容器则要容易得多。

接下来,我将介绍一些可以用来确保 Docker 镜像质量的工具。

哈多林特

Hadolint是一个 Dockerfile 代码检查工具。

它可以用来确保你的 Dockerfile 不包含结构错误,并遵循官方最佳实践

它还在底层使用了ShellCheck ,这是一个 shell 脚本的静态分析工具,用于验证 Dockerfile“RUN”指令中存在的 shell 代码,这非常方便。

编写一个完善的 Dockerfile 是创建高质量镜像的第一步。

容器结构测试

容器结构测试是谷歌开发的一种用于验证镜像结构的工具。它可以被视为容器的单元测试框架。

这些测试可用于检查映像中命令的输出,以及验证文件系统的元数据和内容。

您可以在 YAML 文件中定义测试,然后针对本地现有镜像或某个镜像仓库运行该工具。

一个简单的元数据测试,用于检查环境变量、标签、端口等是否存在,可以定义如下:

metadataTest:
  env:
    - key: foo
      value: baz
  labels:
    - key: 'com.example.vendor'
      value: 'ACME Incorporated'
  exposedPorts: ["8080", "2345"]
  volumes: ["/test"]
  entrypoint: []
  cmd: ["/bin/bash"]
  workdir: "/app"
Enter fullscreen mode Exit fullscreen mode

Goss 和 DGoss

Goss是另一个基于 YAML 的服务器配置验证工具。它使用 Go 语言编写,可用于测试从虚拟机到容器的各种系统。Dgoss是一个封装,方便用户在容器环境中使用 Goss。

以下是一个使用 Goss 进行测试定义的示例:

port:
  tcp:22:
    listening: true
    ip:
    - 0.0.0.0
  tcp6:22:
    listening: true
    ip:
    - '::'
service:
  sshd:
    enabled: true
    running: true
user:
  sshd:
    exists: true
    uid: 74
    gid: 74
    groups:
    - sshd
    home: /var/empty/sshd
    shell: /sbin/nologin
group:
  sshd:
    exists: true
    gid: 74
process:
  sshd:
    running: true
Enter fullscreen mode Exit fullscreen mode

如你所见,它真的很容易理解。

它与“容器结构测试”非常相似,但提供了更丰富的功能,可以验证服务、用户、包、组,甚至 HTTP 端点等内容。虽然您也可以使用“容器结构测试”编写自己的命令来实现这些功能,但 goss 已经提供了开箱即用的功能。

我觉得两者都是不错的选择。我还没实际用过Goss。你可以试试看更喜欢哪个 ;)

厨房 CI

Kitchen CI是测试基础设施代码的常用工具之一

Kitchen 提供了一个测试框架,可以在一个或多个平台上隔离地执行基础架构代码。

驱动程序插件架构用于在各种云提供商和虚拟化技术(例如 Vagrant、Amazon EC2 和 Docker)上运行代码。

它支持许多测试框架,例如InSpecServerspec

它基于 Ruby,比 Goss 或 Structure Test 要复杂得多,也需要更多的依赖项。尽管如此,它仍然是一个非常强大的工具,值得您了解一下。

使用 Clair 进行安全测试

在使用容器时,安全性是一个经常被忽视但非常重要的方面。Docker 镜像底层仍然运行着像 Ubuntu 或 Alpine 这样的操作系统,其中可能包含存在已知安全漏洞的软件包,这些漏洞需要被监控和修复。

Clair是一个开源项目,可以帮助你找到 Docker 镜像中的这些漏洞。

它包含一个定期更新的数据库,以便能够找到最新发现的问题。

您可以轻松地将其集成到您的 CI 流水线中,以便在出现任何漏洞时收到通知。

最近我还发现了Anchore,它与 Anchore 非常相似,但除了开源解决方案外,它还提供带有仪表盘和其他功能的企业解决方案。

使用 Dive 控制图像大小

拥有体积小且经过优化的图片对于加快构建速度至关重要。

Dive是一个非常酷的工具,它允许你探索 Docker 镜像,查看其各层的内容等等。

了解图像图层的组织方式,并找到缩小最终图像尺寸的方法,会很有帮助。

更酷的是,你可以在 CI 系统上运行它,并配置它根据与图像大小相关的一些指标来使构建失败。


结论

除了应用程序代码之外,测试基础设施代码对于避免出现意外问题也至关重要。

在较为传统的系统中,这并不总是容易的,而且在时间和资源方面可能会付出很高的代价。

借助 Docker 和这些工具,可以非常简单快捷地实现一些基本测试,以确保所需的软件包已安装、指定的端口正在监听以及所需的服务正在运行。

这些测试可以让你更有信心,确保整个系统能够按预期运行。


你还知道哪些我文章里没提到的好用工具吗?欢迎分享。

感谢阅读。

文章来源:https://dev.to/brpaz/ensure-the-quality-of-your-docker-images-with-these-cool-tools-1bh7