将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": {}
}
集成注册表
访问Docker Scout仪表盘上的ACR集成页面。
在“如何集成”部分,输入您要集成的注册表的注册表主机名。
选择下一步。
选择**部署到 Azure**,在 Azure 中打开模板部署向导。
如果您尚未登录 Azure 帐户,系统可能会提示您登录。
在模板向导中,配置您的部署
**资源组**:输入与您用于容器注册表相同的资源组。Docker Scout 资源必须部署到与注册表相同的资源组。
**注册表名称**:该字段已预先填充注册表主机名的子域。
选择**查看 + 创建**,然后选择**创建**以部署模板。
等待部署完成。
在**部署详细信息**部分,单击新创建的类型为**容器注册表令牌**的资源。为此令牌生成一个新密码。
或者,使用 Azure 中的搜索功能导航到您要集成的**容器注册表**资源,并为创建的访问令牌生成新密码。
复制生成的密码,然后返回 Docker Scout 仪表板以完成集成。
将生成的密码粘贴到**注册表令牌**字段中。
选择**启用集成**。
选择**启用集成**后,Docker Scout 将执行连接测试以验证集成。如果验证成功,您将被重定向到 Azure 注册表摘要页面,该页面显示您当前组织的所有 Azure 集成。
接下来,在资源库设置中激活您想要分析的代码库。
激活代码库后,您推送的镜像将由 Docker Scout 进行分析。分析结果将显示在 Docker Scout 仪表板中。如果您的代码库已包含镜像,Docker Scout 将自动拉取并分析最新的镜像版本。
删除集成
重要
在 Docker Scout 仪表板中删除集成不会自动删除在 Azure 中创建的资源。
要删除 ACR 集成
在 Docker Scout 仪表板中访问ACR 集成页面。
找到您要删除的 ACR 集成,然后选择**删除**按钮。
在打开的对话框中,选择**删除**确认。
在 Docker Scout 仪表板中删除集成后,还要删除与集成相关的 Azure 资源。
- 容器注册表的
docker-scout-readonly-token
令牌。 docker-scout-repository
事件网格系统主题。
- 容器注册表的