将Docker Scout与Azure Container Registry集成

将Docker Scout与Azure Container Registry (ACR)集成后,您可以查看托管在ACR仓库中的镜像的镜像洞察。在将Docker Scout与ACR集成并为仓库激活Docker Scout之后,将镜像推送到仓库会自动触发镜像分析。您可以使用Docker Scout仪表盘或docker scout CLI命令查看镜像洞察。

工作原理

为了帮助您将Azure Container Registry与Docker Scout集成,您可以使用自定义Azure资源管理器(ARM)模板,该模板会自动为您在Azure中创建必要的基础设施。

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

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

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

ARM模板

下表描述了配置资源。

注意

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

出口成本因使用情况而异,但大约为每GB 0.1美元,前100 GB免费。

Azure资源成本
事件网格系统主题订阅Azure Container Registry事件(镜像推送和镜像删除)免费
事件订阅通过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. 在**部署详细信息**部分,单击新创建的类型为**容器注册表令牌**的资源。为此令牌生成一个新密码。

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

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

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

  11. 选择**启用集成**。

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

接下来,在资源库设置中激活您想要分析的代码库。

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

删除集成

重要

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

要删除 ACR 集成

  1. 在 Docker Scout 仪表板中访问ACR 集成页面

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

  3. 在打开的对话框中,选择**删除**确认。

  4. 在 Docker Scout 仪表板中删除集成后,还要删除与集成相关的 Azure 资源。

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