将 Docker Scout 与 Azure Container Registry 集成

将 Docker Scout 与 Azure 容器注册表 (ACR) 集成后,您即可查看托管在 ACR 仓库中的镜像的洞察信息。在将 Docker Scout 与 ACR 集成并为某个仓库启用 Docker Scout 后,向该仓库推送镜像会自动触发镜像分析。您可以通过 Docker Scout 仪表板或 docker scout CLI 命令查看镜像洞察信息。

工作原理

为帮助您将 Azure 容器注册表与 Docker Scout 集成,您可以使用自定义的 Azure 资源管理器 (ARM) 模板,该模板将自动为您在 Azure 中创建所需的基础设施:

  • 用于镜像推送和删除事件的 EventGrid 主题和订阅。
  • 用于注册表的只读授权令牌,用于列出仓库并拉取镜像。

当在 Azure 中创建好资源后,您可以在集成的 ACR 实例中为镜像仓库启用集成。启用某个仓库后,推送新镜像将自动触发镜像分析。分析结果将显示在 Docker Scout 仪表板中。

如果您在已包含镜像的仓库中启用集成,Docker Scout 将自动拉取并分析最新镜像版本。

ARM 模板

下表描述了配置资源。

注意

创建这些资源会在 Azure 账户上产生少量的持续费用。 表中的 费用 列表示在集成一个每日推送 100 个镜像的 ACR 注册表时,这些资源的估算月度费用。

出口流量费用根据使用情况有所不同,但约为每GB 0.1美元, 前100GB免费。

Azure资源成本
事件网格系统主题订阅 Azure 容器注册表事件(镜像推送和镜像删除)免费
事件订阅通过 Webhook 订阅将事件网格事件发送至 Scout每百万条消息 0.60 美元。前 10 万条免费。
注册表令牌用于Scout列出仓库并从镜像仓库拉取镜像的只读令牌免费

以下 JSON 文档展示了 Docker Scout 用于创建 Azure 资源的 ARM 模板。

{
   "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
      "DockerScoutWebhook": {
         "metadata": {
            "description": "EventGrid's subscription Webhook"
         },
         "type": "String"
      },
      "RegistryName": {
         "metadata": {
            "description": "Name of the registry to add Docker Scout"
         },
         "type": "String"
      },
      "systemTopics_dockerScoutRepository": {
         "defaultValue": "docker-scout-repository",
         "metadata": {
            "description": "EventGrid's topic name"
         },
         "type": "String"
      }
   },
   "resources": [
      {
         "apiVersion": "2023-06-01-preview",
         "identity": {
            "type": "None"
         },
         "location": "[resourceGroup().location]",
         "name": "[parameters('systemTopics_dockerScoutRepository')]",
         "properties": {
            "source": "[extensionResourceId(resourceGroup().Id , 'Microsoft.ContainerRegistry/Registries', parameters('RegistryName'))]",
            "topicType": "Microsoft.ContainerRegistry.Registries"
         },
         "type": "Microsoft.EventGrid/systemTopics"
      },
      {
         "apiVersion": "2023-06-01-preview",
         "dependsOn": [
            "[resourceId('Microsoft.EventGrid/systemTopics', parameters('systemTopics_dockerScoutRepository'))]"
         ],
         "name": "[concat(parameters('systemTopics_dockerScoutRepository'), '/image-change')]",
         "properties": {
            "destination": {
               "endpointType": "WebHook",
               "properties": {
                  "endpointUrl": "[parameters('DockerScoutWebhook')]",
                  "maxEventsPerBatch": 1,
                  "preferredBatchSizeInKilobytes": 64
               }
            },
            "eventDeliverySchema": "EventGridSchema",
            "filter": {
               "enableAdvancedFilteringOnArrays": true,
               "includedEventTypes": [
                  "Microsoft.ContainerRegistry.ImagePushed",
                  "Microsoft.ContainerRegistry.ImageDeleted"
               ]
            },
            "labels": [],
            "retryPolicy": {
               "eventTimeToLiveInMinutes": 1440,
               "maxDeliveryAttempts": 30
            }
         },
         "type": "Microsoft.EventGrid/systemTopics/eventSubscriptions"
      },
      {
         "apiVersion": "2023-01-01-preview",
         "name": "[concat(parameters('RegistryName'), '/docker-scout-readonly-token')]",
         "properties": {
            "credentials": {},
            "scopeMapId": "[resourceId('Microsoft.ContainerRegistry/registries/scopeMaps', parameters('RegistryName'), '_repositories_pull_metadata_read')]"
         },
         "type": "Microsoft.ContainerRegistry/registries/tokens"
      }
   ],
   "variables": {}
}

集成注册表

  1. 前往 ACR 集成页面, 位于 Docker Scout 仪表盘。

  2. 如何集成 部分中,输入您要集成的注册表的 注册表主机名

  3. 选择 下一步

  4. 选择 部署到 Azure 以在 Azure 中打开模板部署向导。

    如果您尚未登录,系统可能会提示您登录到 Azure 帐户。

  5. 在模板向导中,配置您的部署:

    • 资源组:输入您用于容器注册表的同一资源组。Docker Scout 资源必须部署到与注册表相同的资源组中。

    • 注册表名称:该字段已预填充为注册表主机名的子域名。

  6. 选择 查看 + 创建,然后 创建 以部署模板。

  7. 请等待部署完成。

  8. 部署详情 部分点击新创建的 容器注册表令牌 类型资源。为此令牌生成一个新密码。

    或者,使用 Azure 中的搜索功能导航到您要集成的 容器注册表资源,并 为创建的访问令牌生成新密码。

  9. 复制生成的密码并返回 Docker Scout 仪表板以完成集成。

  10. 将生成的密码粘贴到 Registry token 字段中。

  11. 选择 启用集成

选择 启用集成 后,Docker Scout 会执行连接测试以验证集成。如果验证成功,您将被重定向到 Azure 注册表摘要页面,该页面显示当前组织的所有 Azure 集成。

接下来,在仓库设置中为您想要分析的仓库启用 Docker Scout。

激活仓库后,您推送的镜像将由 Docker Scout 进行分析。分析结果显示在 Docker Scout 仪表板中。 如果您的仓库已包含镜像,Docker Scout 会自动拉取并分析 最新的镜像版本。

移除集成

重要

在 Docker Scout Dashboard 中移除集成并不会自动移除在 Azure 中创建的资源。

删除 ACR 集成:

  1. 转到 Docker Scout 仪表板上的 ACR 集成页面

  2. 找到您想要移除的 ACR 集成,然后选择 Remove 按钮。

  3. 在打开的对话框中,选择 移除 进行确认。

  4. 在 Docker Scout 仪表板中移除集成后,也请移除与该集成相关的 Azure 资源:

    • 容器镜像仓库的 docker-scout-readonly-token 令牌。
    • docker-scout-repository 事件网格系统主题。