将 Docker Scout 与 Azure 容器注册表集成

将 Docker Scout 与 Azure 容器注册表 (ACR) 集成,可让您查看托管在 ACR 仓库中的镜像的镜像洞察。在 Docker Scout 与 ACR 集成并为仓库激活 Docker Scout 后,将镜像推送到仓库会自动触发镜像分析。您可以使用 Docker Scout 控制面板或 `docker scout` CLI 命令查看镜像洞察。

工作原理

为了帮助您将 Azure 容器注册表与 Docker Scout 集成,您可以使用自定义的 Azure Resource Manager (ARM) 模板,该模板会自动为您在 Azure 中创建必要的基础设施

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

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

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

ARM 模板

下表描述了配置资源。

注意

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

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

Azure资源成本
事件网格系统主题订阅 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. 在“**部署详情**”部分,单击新创建的“**容器注册表令牌**”类型的资源。为该令牌生成一个新密码。

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

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

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

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

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

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

激活仓库后,您推送的镜像将由 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` 事件网格系统主题。
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.