# Integrar Docker Scout con Artifactory Container Registry


Integrar Docker Scout con JFrog Artifactory te permite indexar y analizar
imágenes de Artifactory. Esta integración funciona a través de un proceso de larga
ejecución `docker scout watch`. Descarga imágenes de los repositorios seleccionados
(opcionalmente filtrados), puede recibir devoluciones de llamada de webhook (callbacks) de Artifactory
y envía datos de la imagen a Docker Scout. Puedes ver los resultados en el Docker Scout Dashboard o
con la CLI de `docker scout`.

## Cómo funciona

Ejecutas [`docker scout watch`](/reference/cli/docker/scout/watch/) en un host que
controlas y configuras la cadena de registro específica de Artifactory a través de `--registry
"key=value,..."`. El proceso de observación (watch) puede:

- Observar repositorios específicos o un registro completo
- Opcionalmente ingestar todas las imágenes existentes una sola vez
- Actualizar periódicamente las listas de repositorios
- Recibir devoluciones de llamada de webhook de Artifactory en el puerto local que elijas

Después de la integración, Docker Scout descarga y analiza automáticamente las imágenes
que envíes al registro de Artifactory. Los metadatos de tus imágenes se almacenan en la
plataforma de Docker Scout, pero Docker Scout no almacena las imágenes de contenedor
en sí. Para obtener más información sobre cómo maneja Docker Scout los datos de las imágenes, consulta
[Data handling](/scout/deep-dive/data-handling/).

### Opciones de la cadena de registro específicas de Artifactory

Estas opciones `type=artifactory` anulan el comportamiento genérico del registro para la opción `--registry`:

| Clave            | Requerido | Descripción                                                                                                   |
| ---------------- | :-------: | ------------------------------------------------------------------------------------------------------------- |
| `type`           |    Sí     | Debe ser `artifactory`.                                                                                       |
| `registry`       |    Sí     | Nombre de host del registro de Docker/OCI (por ejemplo, `example.jfrog.io`).                                  |
| `api`            |    Sí     | URL base de la API REST de Artifactory (por ejemplo, `https://example.jfrog.io/artifactory`).                 |
| `repository`     |    Sí     | Repositorio a observar (reemplaza a `--repository`).                                                          |
| `includes`       |    No     | Globs a incluir (por ejemplo, `*/frontend*`).                                                                 |
| `excludes`       |    No     | Globs a excluir (por ejemplo, `*/legacy/*`).                                                                  |
| `port`           |    No     | Puerto local para escuchar las devoluciones de llamada del webhook.                                           |
| `subdomain-mode` |    No     | `true` o `false`; coincide con el diseño de Docker de Artifactory (subdominio frente a ruta del repositorio). |

## Integrar un registro de Artifactory

Usa los siguientes pasos para integrar tu registro de Artifactory con Docker
Scout.

1. Elige el host en el que ejecutarás `docker scout watch`.

   El host debe tener acceso local o de red a tu registro privado y poder
   acceder a la API de Scout (`https://api.scout.docker.com`) a través de internet. Si
   estás utilizando devoluciones de llamada de webhook, Artifactory también debe poder comunicarse con el
   host del cliente de Scout en el puerto configurado.
   Invalida la opción `--workers` (por defecto: `3`) para un rendimiento óptimo en función
   del tamaño del host y de la carga de trabajo prevista.

2. Asegúrate de estar ejecutando la última versión de Scout.

   Comprueba tu versión actual:

   ```console
   $ docker scout version
   ```

   Si es necesario, [instala la última versión de Scout](https://docs-docker.esdocu.com/scout/install/).

3. Configura tus credenciales de Artifactory.

   Almacena las credenciales que usará el cliente de Scout para autenticarse con
   Artifactory. El siguiente es un ejemplo que utiliza variables de entorno. Reemplaza
   `<user>` y `<password-or-access-token>` con tus valores reales.

   ```console
   $ export DOCKER_SCOUT_ARTIFACTORY_API_USER=<user>
   $ export DOCKER_SCOUT_ARTIFACTORY_API_PASSWORD=<password-or-access-token>
   ```

   > [!TIP]
   >
   > Como buena práctica, crea un usuario dedicado con acceso de solo lectura y utiliza
   > un token de acceso en lugar de una contraseña.

   Almacena la credencial que usará Artifactory para autenticar las devoluciones de llamada de
   webhook. El siguiente es un ejemplo que utiliza una variable de entorno. Reemplaza
   `<random-64-128-character-secret>` con un secreto real.

   ```console
   $ export DOCKER_SCOUT_ARTIFACTORY_WEBHOOK_SECRET=<random-64-128-character-secret>
   ```

   > [!TIP]
   >
   > Como buena práctica, genera una cadena aleatoria de alta entropía de 64 a 128 caracteres.

4. Configura tus credenciales de Scout.
   1. Genera un token de acceso de organización para acceder a Scout. Para obtener
      más detalles, consulta [Create an organization access
      token](/enterprise/security/access-tokens/#create-an-organization-access-token).
   2. Inicia sesión en Docker usando el token de acceso de organización.

      ```console
      $ docker login --username <your_organization_name>
      ```

      Cuando se te solicite una contraseña, pega el token de acceso de organización que
      generaste.

   3. Conecta tu entorno local de Docker al servicio de Docker Scout de tu organización.

      ```console
      $ docker scout enroll <your_organization_name>
      ```

5. Indexa las imágenes existentes. Solo necesitas hacer esto una vez.

   Ejecuta `docker scout watch` con la opción `--all-images` para indexar todas las imágenes en el repositorio de Artifactory especificado. El siguiente es un comando de ejemplo:

   ```console
   $ docker scout watch --registry \
   "type=artifactory,registry=example.jfrog.io,api=https://example.jfrog.io/artifactory,include=*/frontend*,exclude=*/dta/*,repository=docker-local,port=9000,subdomain-mode=true" \
   --all-images
   ```

6. Confirma que las imágenes se hayan indexado visualizándolas en el [Scout
   Dashboard](https://scout.docker.com/).

7. Configura las devoluciones de llamada de Artifactory.

   En la interfaz de usuario de Artifactory o a través de la API REST, configura webhooks para eventos de
   envío/actualización de imágenes. Establece el punto de enlace (endpoint) en el host y puerto de
   tu `docker scout watch` e incluye la variable `DOCKER_SCOUT_ARTIFACTORY_WEBHOOK_SECRET` para
   la autenticación.

   Para obtener más información, consulta la [documentación de Webhooks de JFrog
   Artifactory](https://jfrog.com/help/r/jfrog-platform-administration-documentation/webhooks)
   o la [documentación de la API REST de Webhooks de JFrog Artifactory](https://jfrog.com/help/r/jfrog-rest-apis/webhooks).

8. Observa continuamente si hay imágenes nuevas o actualizadas.

   Ejecuta `docker scout watch` con la opción `--refresh-registry` para buscar nuevas
   imágenes a indexar.

   El comando `docker scout watch` es un proceso de larga ejecución que debe
   continuar ejecutándose indefinidamente en segundo plano para recibir webhooks y
   buscar nuevas imágenes. Si lo ejecutas directamente en una terminal y cierras la
   sesión, el proceso se detendrá.

   The following is an example command. Puedes ejecutar el proceso como un servicio del
   sistema, por ejemplo, usando `systemd` o `nohup`, para asegurarte de que continúe
   ejecutándose en segundo plano.

   ```console
   $ docker scout watch --registry \
   "type=artifactory,registry=example.jfrog.io,api=https://example.jfrog.io/artifactory,include=*/frontend*,exclude=*/dta/*,repository=docker-local,port=9000,subdomain-mode=true" \
   --refresh-registry
   ```

9. Opcional. Configura la integración de Scout para recibir notificaciones en tiempo real desde plataformas de
   colaboración populares. Para más detalles, consulta [Integrar Docker Scout con
   Slack](/scout/integrations/team-collaboration/slack/).

