Azure 容器注册表集成

通过将 Docker Scout 与 Azure 容器注册表 (ACR) 集成,您可以查看 ACR 存储库中托管的映像的映像见解。将 Docker Scout 与 ACR 集成并为存储库激活 Docker Scout 后,将镜像推送到存储库会自动触发镜像分析。您可以使用 Docker Scout Dashboard 或docker scoutCLI 命令查看图像见解。

怎么运行的

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

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

在 Azure 中创建资源后,您可以在集成 ACR 实例中启用映像存储库的集成。启用存储库后,推送新图像会自动触发图像分析。分析结果显示在 Docker Scout Dashboard 中。

如果您在已包含映像的存储库上启用集成,Docker Scout 会自动提取并分析最新的映像版本。

ARM模板

下表描述了配置资源。

笔记

创建这些资源会在 Azure 帐户上产生少量的经常性费用。表中的“成本”列表示集成每天推送 100 个图像的 ACR 注册表时估计的每月资源成本。

出口成本根据使用情况而有所不同,但每 GB 约为 0.1 美元,并且前 100 GB 是免费的。

天蓝色资源成本
事件网格系统主题订阅 Azure 容器注册表事件(镜像推送和镜像删除)自由的
活动订阅通过 Webhook 订阅将事件网格事件发送到 Scout每 100 万条消息 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. 转至 Docker Scout 仪表板上的ACR 集成页面。

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

  3. 选择下一步

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

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

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

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

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

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

  7. 等待部署完成。

  8. “部署详细信息”部分中,单击新创建的Containerregistry token类型的资源。为此令牌生成新密码。

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

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

  10. 将生成的密码粘贴到注册表令牌字段中。

  11. 选择启用集成

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

接下来,在存储库设置中为要分析的存储库激活 Docker Scout 。

激活存储库后,您推送的镜像将由 Docker Scout 进行分析。分析结果显示在 Docker Scout Dashboard 中。如果您的存储库已包含映像,Docker Scout 会自动提取并分析最新的映像版本。

删除集成

重要的

删除 Docker Scout 仪表板中的集成不会自动删除在 Azure 中创建的资源。

要删除 ACR 集成:

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

  2. 找到您要删除的 ACR 集成,然后选择“删除” 按钮。

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

  4. 删除 Docker Scout Dashboard 中的集成后,还要删除与集成相关的 Azure 资源:

    • docker-scout-readonly-token容器注册表的令牌。
    • 事件docker-scout-repository网格系统主题。