# Digests de imagen


## ¿Qué son los digests de imágenes de Docker?

Un digest de imagen de Docker es un identificador criptográfico único (hash SHA-256)
que representa el contenido de una imagen de Docker. A diferencia de las etiquetas (tags),
que se pueden reutilizar o cambiar, un digest es inmutable y garantiza que se descargue
exactamente la misma imagen cada vez. Esto garantiza la consistencia en diferentes
entornos y despliegues.

Por ejemplo, el digest para la imagen `nginx:latest` podría verse así:

```text
sha256:94a00394bc5a8ef503fb59db0a7d0ae9e1110866e8aee8ba40cd864cea69ea1a
```

Este digest identifica de forma exclusiva la versión específica de la imagen `nginx:latest`,
garantizando que cualquier cambio en el contenido de la imagen dé como resultado un digest diferente.

## ¿Por qué son importantes los digests de imágenes?

El uso de digests de imagen en lugar de etiquetas ofrece varias ventajas:

- Inmutabilidad: Una vez que se construye una imagen y se genera su digest, el contenido
  vinculado a ese digest no puede cambiar. Esto significa que si descargas una imagen
  utilizando su digest, puedes tener la seguridad de que estás recuperando exactamente
  la misma imagen que se construyó originalmente.

- Seguridad: Los digests ayudan a prevenir ataques a la cadena de suministro al garantizar
  que el contenido de la imagen no haya sido manipulado. Incluso un pequeño cambio en el
  contenido de la imagen dará como resultado un digest completamente diferente.

- Consistencia: El uso de digests garantiza que se utilice la misma imagen en diferentes
  entornos, lo que reduce el riesgo de discrepancias entre los entornos de desarrollo,
  preproducción (staging) y producción.

## Digests de las Docker Hardened Images

Al utilizar digests de imagen para hacer referencia a las DHI, puedes garantizar que tus
aplicaciones siempre utilicen exactamente la misma versión de imagen segura, mejorando la
seguridad y el cumplimiento.

## Visualizar el digest de una imagen

### Utilizar la CLI de Docker

Para ver el digest de una imagen de Docker, puedes utilizar el siguiente comando. Reemplaza
`<image-name>:<tag>` con el nombre y la etiqueta de la imagen.

```console
$ docker buildx imagetools inspect <image-name>:<tag>
```

### Utilizar la interfaz de usuario de Docker Hub

1. Ve a [Docker Hub](https://hub.docker.com/) e inicia sesión.
2. Navega al espacio de nombres de tu organización y abre el repositorio DHI replicado.
3. Selecciona la pestaña **Tags** para ver las variantes de la imagen.
4. Cada etiqueta en la lista incluye un campo **Digest** que muestra el valor SHA-256 de la imagen.

## Descargar una imagen por su digest

Descargar una imagen por su digest garantiza que estás descargando la versión exacta de la
imagen identificada por el digest especificado.

Para descargar una imagen de Docker utilizando su digest, utiliza el siguiente comando. Reemplaza
`<image-name>` con el nombre de la imagen y `<digest>` con el digest de la imagen.

```console
$ docker pull <image-name>@sha256:<digest>
```

Por ejemplo, para descargar una imagen `docs/dhi-python:3.13` utilizando su digest de
`94a00394bc5a8ef503fb59db0a7d0ae9e1110866e8aee8ba40cd864cea69ea1a`, ejecutarías:

```console
$ docker pull docs/dhi-python@sha256:94a00394bc5a8ef503fb59db0a7d0ae9e1110866e8aee8ba40cd864cea69ea1a
```

## Imágenes multiplataforma y manifiestos

Las Docker Hardened Images se publican como imágenes multiplataforma, lo que significa
que una única etiqueta de imagen (como `docs/dhi-python:3.13`) puede admitir múltiples
sistemas operativos y arquitecturas de CPU, como `linux/amd64`, `linux/arm64` y más.

En lugar de apuntar a una sola imagen, una etiqueta multiplataforma apunta a una lista de
manifiestos (también llamada índice), que es un objeto de nivel superior que hace referencia
a múltiples digests de imagen, uno para cada plataforma compatible.

Cuando inspeccionas una imagen multiplataforma utilizando `docker buildx imagetools inspect`, verás algo como esto:

```text
Name:      docs/dhi-python:3.13
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest:    sha256:6e05...d231

Manifests:
  Name:        docs/dhi-python:3.13@sha256:94a0...ea1a
  Platform:    linux/amd64
  ...

  Name:        docs/dhi-python:3.13@sha256:7f1d...bc43
  Platform:    linux/arm64
  ...
```

- El digest de la lista de manifiestos (`sha256:6e05...d231`) identifica la imagen
  multiplataforma global.
- Cada plataforma-specific imagen tiene su propio digest (por ejemplo, `sha256:94a0...ea1a`
  para `linux/amd64`).

### Por qué es importante

- Reproducibilidad: Si estás construyendo o ejecutando contenedores en diferentes
  arquitecturas, el uso de una etiqueta por sí sola se resolverá en el digest de imagen
  correspondiente a tu plataforma.
- Verificación: Puedes descargar y verificar un digest de imagen específico para tu
  plataforma para asegurarte de que estás utilizando la versión exacta de la imagen, no solo
  la lista de manifiestos.
- Aplicación de políticas: Al aplicar políticas basadas en digests con Docker Scout,
  cada variante de plataforma se evalúa individualmente utilizando su digest.
