Docker Scout 快速入门

Docker Scout 分析镜像内容并生成详细的软件包报告 以及它检测到的漏洞。它可以为您提供 有关如何修复 Image Analysis 发现的问题的建议。

本指南采用易受攻击的容器镜像,并向您展示如何使用 Docker 侦察 以识别和修复漏洞,比较一段时间内的镜像版本, 并与您的团队分享结果。

第 1 步:设置

此示例项目包含 一个易受攻击的 Node.js 应用程序,您可以使用它来跟踪。

  1. 克隆其存储库:

    $ git clone https://github.com/docker/scout-demo-service.git
    
  2. 移动到目录中:

    $ cd scout-demo-service
    
  3. 确保您已登录到 Docker 帐户, 通过运行命令或使用 Docker Desktop 登录。docker login

  4. 构建镜像并将其推送到 、 其中 是您推送到的 Docker Hub 命名空间。<ORG_NAME>/scout-demo:v1<ORG_NAME>

    $ docker build --push -t <ORG_NAME>/scout-demo:v1 .
    

第 2 步:启用 Docker Scout

默认情况下,Docker Scout 会分析所有本地镜像。要分析镜像,请在 remote repositories 中,您需要先启用它。 您可以从 Docker Hub、Docker Scout Dashboard 和 CLI 执行此操作。在概述指南中了解如何操作

  1. 使用命令登录到 Docker 帐户,或使用 Docker Desktop 中的 Sign in (登录) 按钮。docker login

  2. 接下来,使用命令向 Docker Scout 注册您的组织。docker scout enroll

    $ docker scout enroll <ORG_NAME>
        ✓ Successfully enrolled organization <ORG_NAME> with Docker Scout Free
    
  3. 使用命令为您的镜像存储库启用 Docker Scout。docker scout repo enable

    $ docker scout repo enable --org <ORG_NAME> <ORG_NAME>/scout-demo
    

步骤 3:分析镜像漏洞

构建后,使用 CLI 命令查看漏洞 由 Docker Scout 检测到。docker scout

本指南的示例应用程序使用易受攻击的 Express 版本。 以下命令显示了您刚刚镜像中影响 Express 的所有 CVE 建立:

$ docker scout cves --only-package express

默认情况下,Docker Scout 会分析您最近构建的镜像, 因此,在这种情况下,无需指定镜像的名称。

CLI 参考文档中了解有关该命令的更多信息。docker scout cves

步骤 4:修复应用程序漏洞

Docker Scout 建议的解决方法是更新 底层易受攻击的 Express 版本升级到 4.17.3 或更高版本。

  1. 使用新的包版本更新文件。package.json

       "dependencies": {
    -    "express": "4.17.1"
    +    "express": "4.17.3"
       }
    
  2. 使用新标签重新构建镜像并将其推送到 Docker Hub 存储库:

    $ docker build --push -t <ORG_NAME>/scout-demo:v2 .
    

现在,在 Docker Desktop 中查看镜像的最新标记,即 Docker Scout Dashboard 或 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 组织。docker scout config

$ 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 步:提高合规性

该命令的输出显示还有改进的空间。 某些策略无法成功评估 () 因为镜像缺乏出处和 SBOM 证明。 该镜像还未通过一些评估的检查。quickviewNo data

策略评估不仅仅是检查漏洞。 以策略为例。 此策略通过确保 默认情况下,images 未设置为以超级用户身份运行。Default non-root userroot

要解决此策略冲突问题,请通过添加说明并指定非 root 用户来编辑 Dockerfile:USER

  CMD ["node","/app/app.js"]
  EXPOSE 3000
+ USER appuser

此外,为了获得更完整的策略评估结果, 您的镜像应附有 SBOM 和出处证明。 Docker Scout 使用来源证明来确定镜像的状况 构建,以便它可以提供更好的评估结果。

在构建具有证明的镜像之前, 您必须启用 containerd 镜像存储(或使用驱动程序创建自定义构建器)。 经典镜像存储不支持清单列表、 这就是将出处证明附加到镜像的方式。docker-container

在 Docker Desktop 中打开 Settings。在 General (常规) 部分下,确保 选中 Use containerd for pull and storage images 选项。 请注意,更改镜像存储会暂时隐藏 inactive image store (非活动镜像存储),直到您切换回来。

启用 containerd 镜像存储后,使用新标签重新构建镜像。 这一次,添加 and 标志。v3--provenance=true--sbom=true

$ docker build --provenance=true --sbom=true --push -t <ORG_NAME>/scout-demo:v3 .

第 7 步:在 Dashboard 中查看

使用证明推送更新的镜像后,可以查看 通过不同的视角获得结果:Docker Scout 仪表板。

  1. 打开 Docker Scout 仪表板
  2. 使用您的 Docker 帐户登录。
  3. 选择 Images 在左侧导航栏中。

images (镜像) 页面列出了启用了 Scout 的存储库。 在列表中选择镜像以打开 Image details (镜像详细信息) 侧边栏。 边栏显示存储库的最后一个推送标签的合规性概述。

注意

如果策略结果尚未显示,请尝试刷新页面。 如果这是您的 首次使用 Docker Scout Dashboard。

检查 Up-to-date Base Images 策略。 此策略检查您使用的基础镜像是否是最新的。 它当前处于 non-compliant 状态, 因为示例镜像使用旧版本作为基础镜像。alpine

选择策略名称旁边的 View fix (查看修复) 按钮,了解有关违规的详细信息。 以及如何解决这一问题的建议。 在这种情况下,建议的操作是启用 Docker Scout 的 GitHub 集成, 这有助于使您的基础镜像自动保持最新状态。

提示

您无法为本指南中使用的演示应用程序启用此集成。 随意将代码推送到您拥有的 GitHub 存储库, 并在那里尝试集成!

总结

本快速入门指南仅涉及某些方面的一些 Docker Scout 可以支持软件供应链管理:

  • 如何为您的存储库启用 Docker Scout
  • 分析镜像中的漏洞
  • 策略和合规性
  • 修复漏洞并提高合规性

下一步是什么?

还有更多内容等你去发现,从第三方集成、 到策略自定义和实时运行时环境监控。

请查看以下部分: