# Integrar Docker Scout con Azure Container Registry


Integrar Docker Scout con Azure Container Registry (ACR) te permite ver
información detallada de las imágenes alojadas en los repositorios de ACR. Después de integrar Docker
Scout con ACR y activar Docker Scout para un repositorio, enviar (`push`) una imagen
al repositorio activa automáticamente el análisis de la imagen. Puedes ver la información
detallada de las imágenes utilizando el Docker Scout Dashboard o los comandos de la CLI `docker scout`.

## Cómo funciona

Para ayudarte a integrar tu Azure Container Registry con Docker Scout, puedes
usar una plantilla personalizada de Azure Resource Manager (ARM) que crea automáticamente
la infraestructura necesaria en Azure para ti:

- Un EventGrid Topic y una suscripción para eventos de envío (`push`) y eliminación de imágenes.
- Un token de autorización de solo lectura para el registro, utilizado para listar repositorios
  e ingestar las imágenes.

Cuando se hayan creado los recursos en Azure, puedes habilitar la integración
para los repositorios de imágenes en la instancia de ACR integrada. Una vez que hayas habilitado un
repositorio, el envío de nuevas imágenes activa el análisis de imágenes automáticamente. Los
resultados del análisis aparecen en el Docker Scout Dashboard.

Si habilitas la integración en un repositorio que ya contiene imágenes,
Docker Scout descarga (`pull`) y analiza la última versión de la imagen automáticamente.

### Plantilla ARM

La siguiente tabla describe los recursos de configuración.

> [!NOTE]
>
> La creación de estos recursos genera un pequeño costo recurrente en la cuenta de Azure.
> La columna **Costo** de la tabla representa un costo mensual estimado de los
> recursos al integrar un registro ACR que recibe 100 imágenes enviadas al
> día.
>
> El costo de salida (egreso) varía según el uso, pero es de aproximadamente $0.1 por GB, y
> los primeros 100 GB son gratuitos.

| Azure                   | Recurso                                                                                                 | Costo                                                                 |
| ----------------------- | ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| Event Grid system topic | Suscribirse a eventos de Azure Container Registry (envío y eliminación de imágenes)                     | Gratis                                                                |
| Event subscription      | Enviar eventos de Event Grid a Scout a través de una suscripción de Webhook                             | $0.60 por cada 1 millón de mensajes. Los primeros 100 mil son gratis. |
| Registry Token          | Token de solo lectura utilizado para que Scout liste los repositorios y descargue imágenes del registro | Gratis                                                                |

El siguiente documento JSON muestra la plantilla ARM que utiliza Docker Scout para crear
los recursos de Azure.

**Plantilla JSON**







```json
{
   "$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": {}
}

```







## Integrar un registro

1. Ve a la [página de integración de ACR](https://scout.docker.com/settings/integrations/azure/) en el
   Docker Scout Dashboard.
2. En la sección **How to integrate**, ingresa el **Registry hostname** del
   registro que quieres integrar.
3. Selecciona **Next**.
4. Selecciona **Deploy to Azure** para abrir el asistente de implementación de plantillas en Azure.

   Es posible que se te pida iniciar sesión en tu cuenta de Azure si aún no lo has
   hecho.

5. En el asistente de la plantilla, configura tu implementación:
   - **Resource group**: ingresa el mismo grupo de recursos que estás usando para el
     registro de contenedores. Los recursos de Docker Scout deben implementarse en el
     mismo grupo de recursos que el registro.

   - **Registry name**: el campo está precompletado con el subdominio del
     nombre de host del registro.

6. Selecciona **Review + create** y luego **Create** para implementar la plantilla.

7. Espera hasta que se complete la implementación.
8. En la sección **Deployment details**, selecciona el recurso recién creado
   del tipo **Container registry token**. Genera una contraseña nueva para este token.

   De manera alternativa, usa la función de búsqueda en Azure para navegar al
   recurso **Container registry** que deseas integrar y
   genera la contraseña nueva para el token de acceso creado.

9. Copia la contraseña generada y regresa al Docker Scout Dashboard para
   finalizar la integración.

10. Pega la contraseña generada en el campo **Registry token**.
11. Selecciona **Enable integration**.

Después de seleccionar **Enable integration**, Docker Scout realiza una prueba de conexión
para verificar la integración. Si la verificación es exitosa, se te
redirigirá a la página de resumen del registro de Azure, que te muestra todas tus
integraciones de Azure para la organización actual.

A continuación, activa Docker Scout para los repositorios que quieras analizar en la
[configuración de repositorios](https://scout.docker.com/settings/repos/).

Después de activar los repositorios, las imágenes que envíes serán analizadas por Docker
Scout. Los resultados del análisis aparecen en el Docker Scout Dashboard.
Si tu repositorio ya contiene imágenes, Docker Scout descarga y analiza la
última versión de la imagen automáticamente.

## Eliminar una integración

> [!IMPORTANT]
>
> Eliminar la integración en el Docker Scout Dashboard no
> elimina automáticamente los recursos creados en Azure.

Para eliminar una integración de ACR:

1. Ve a la [página de integración de ACR](https://scout.docker.com/settings/integrations/azure/)
   en el Docker Scout Dashboard.
2. Busca la integración de ACR que deseas eliminar y selecciona el botón **Remove**.
3. En el diálogo que se abre, confirma seleccionando **Remove**.
4. Después de eliminar la integración en el Docker Scout Dashboard, elimina también
   los recursos de Azure relacionados con la integración:
   - El token `docker-scout-readonly-token` para el registro de contenedores.
   - El Event Grid System Topic `docker-scout-repository`.

