Docker Scout 快速入门
Docker Scout 分析镜像内容并生成检测到的软件包和漏洞的详细报告。它可以为你提供关于如何修复通过镜像分析发现的问题的建议。
本指南使用一个存在漏洞的容器镜像,并向你展示如何使用 Docker Scout 识别和修复漏洞,比较不同版本的镜像,以及与你的团队共享结果。
步骤 1: 设置
这个示例项目 包含一个存在漏洞的 Node.js 应用,你可以用来跟着操作。
克隆其仓库
$ git clone https://github.com/docker/scout-demo-service.git
进入目录
$ cd scout-demo-service
确保你已登录到 Docker 账户,可以通过运行
docker login
命令或使用 Docker Desktop 登录。构建镜像并将其推送到
<ORG_NAME>/scout-demo:v1
,其中<ORG_NAME>
是你推送到的 Docker Hub 命名空间。$ docker build --push -t <ORG_NAME>/scout-demo:v1 .
步骤 2: 启用 Docker Scout
Docker Scout 默认分析所有本地镜像。要分析远程仓库中的镜像,你需要先启用它。你可以通过 Docker Hub、Docker Scout 控制面板和 CLI 来完成此操作。在概述指南中了解如何操作。
使用
docker login
命令登录到 Docker 账户,或使用 Docker Desktop 中的“登录”按钮。接下来,使用
docker scout enroll
命令将你的组织注册到 Docker Scout。$ docker scout enroll <ORG_NAME>
使用
docker scout repo enable
命令为你的镜像仓库启用 Docker Scout。$ docker scout repo enable --org <ORG_NAME> <ORG_NAME>/scout-demo
步骤 3: 分析镜像漏洞
构建后,使用 docker scout
CLI 命令查看 Docker Scout 检测到的漏洞。
本指南中的示例应用使用了一个存在漏洞的 Express 版本。以下命令显示了你刚刚构建的镜像中影响 Express 的所有 CVE:
$ docker scout cves --only-package express
Docker Scout 默认分析最近构建的镜像,因此在这种情况下无需指定镜像名称。
在CLI 参考文档中了解更多关于 docker scout cves
命令的信息。
步骤 4: 修复应用漏洞
Docker Scout 建议的修复方法是将底层存在漏洞的 express 版本更新到 4.17.3 或更高版本。
使用新的软件包版本更新
package.json
文件。"dependencies": { - "express": "4.17.1" + "express": "4.17.3" }
使用新标签重建镜像并将其推送到你的 Docker Hub 仓库:
$ docker build --push -t <ORG_NAME>/scout-demo:v2 .
现在,在 Docker Desktop、Docker Scout 控制面板或 CLI 中查看镜像的最新标签,你会看到你已修复了漏洞。
$ docker scout cves --only-package express
✓ Provenance obtained from attestation
✓ Image stored for indexing
✓ Indexed 79 packages
✓ No vulnerable package detected
## Overview
│ Analyzed Image
────────────────────┼───────────────────────────────────────────────────
Target │ mobywhale/scout-demo:v2
digest │ ef68417b2866
platform │ linux/arm64
provenance │ https://github.com/docker/scout-demo-service.git
│ 7c3a06793fc8f97961b4a40c73e0f7ed85501857
vulnerabilities │ 0C 0H 0M 0L
size │ 19 MB
packages │ 1
## Packages and Vulnerabilities
No vulnerable packages detected
步骤 5: 评估策略合规性
虽然基于特定软件包检查漏洞很有用,但这并不是改进供应链行为的最有效方法。
Docker Scout 还支持策略评估,这是一个更高级的概念,用于检测和修复镜像中的问题。策略是一套可自定义的规则,组织可以使用它来跟踪镜像是否符合其供应链要求。
由于策略规则是每个组织特有的,因此你必须指定要评估对照的组织策略。使用 docker scout config
命令配置你的 Docker 组织。
$ docker scout config organization <ORG_NAME>
✓ Successfully set organization to <ORG_NAME>
现在你可以运行 quickview
命令来获取刚刚构建的镜像的合规性状态概述。镜像会根据默认策略配置进行评估。
$ docker scout quickview
...
Policy status FAILED (2/6 policies met, 2 missing data)
Status │ Policy │ Results
─────────┼──────────────────────────────────────────────┼──────────────────────────────
✓ │ No copyleft licenses │ 0 packages
! │ Default non-root user │
! │ No fixable critical or high vulnerabilities │ 2C 16H 0M 0L
✓ │ No high-profile vulnerabilities │ 0C 0H 0M 0L
? │ No outdated base images │ No data
? │ Supply chain attestations │ No data
状态列中的感叹号表示违反了策略。问号表示没有足够的元数据来完成评估。对勾标记表示合规。
步骤 6: 提高合规性
quickview
命令的输出显示仍有改进空间。某些策略无法成功评估(无数据),因为镜像缺少源头和 SBOM 证明。镜像还在一些评估中未能通过检查。
策略评估不仅仅是检查漏洞。以“Default non-root user”(默认非 root 用户)策略为例。此策略通过确保镜像默认不会以 root
超级用户身份运行来帮助提高运行时安全性。
为了解决此策略违规问题,通过添加 USER
指令并指定一个非 root 用户来编辑 Dockerfile:
CMD ["node","/app/app.js"]
EXPOSE 3000
+ USER appuser
此外,为了获得更完整的策略评估结果,你的镜像应该附带 SBOM 和源头证明。Docker Scout 使用源头证明来确定镜像的构建方式,从而提供更好的评估结果。
在构建带有证明的镜像之前,必须启用 containerd 镜像存储(或使用 docker-container
驱动程序创建自定义构建器)。经典镜像存储不支持 manifest lists,而源头证明就是通过 manifest lists 附加到镜像的。
在 Docker Desktop 中打开“设置”。在“通用”部分下,确保选中了“Use containerd for pulling and storing images”(使用 containerd 拉取和存储镜像)选项。请注意,更改镜像存储会暂时隐藏非活动镜像存储的镜像和容器,直到你切换回来。
启用 containerd 镜像存储后,使用新的 v3
标签重新构建镜像。这次,添加 --provenance=true
和 --sbom=true
标志。
$ docker build --provenance=true --sbom=true --push -t <ORG_NAME>/scout-demo:v3 .
步骤 7: 在控制面板中查看
推送带有证明的更新镜像后,是时候从另一个角度查看结果了:Docker Scout 控制面板。
- 打开Docker Scout 控制面板。
- 使用你的 Docker 账户登录。
- 在左侧导航栏中选择“镜像”。
镜像页面列出了已启用 Scout 的仓库。选择列表中的镜像以打开“镜像详细信息”侧边栏。侧边栏会显示仓库最新推送标签的合规性概述。
注意
如果策略结果尚未出现,请尝试刷新页面。如果这是你第一次使用 Docker Scout 控制面板,结果可能需要几分钟才会显示。
检查“Up-to-Date Base Images”(最新基础镜像)策略。此策略检查你使用的基础镜像是否最新。它目前处于不合规状态,因为示例镜像使用了旧版本的 alpine 作为基础镜像。
选择策略名称旁边的“View fix”(查看修复)按钮,查看违规详情以及如何解决的建议。在这种情况下,推荐的操作是启用Docker Scout 的 GitHub 集成,这有助于自动保持基础镜像最新。
提示
你无法为本指南中使用的 demo 应用启用此集成。欢迎将代码推送到你拥有的 GitHub 仓库中,并在那里尝试此集成!
总结
本快速入门指南仅浅尝了 Docker Scout 如何支持软件供应链管理的一些方面:
- 如何为你的仓库启用 Docker Scout
- 分析镜像漏洞
- 策略和合规性
- 修复漏洞和提高合规性
下一步?
还有更多内容等你发现,从第三方集成到策略自定义,以及实时运行时环境监控。
查看以下部分: