Cómo encontrar el digest (sha256) de una imagen Docker multi-plataforma
Digests de imágenes de contenedor
Un digest de imagen de contenedor puede emplearse para identificar de forma única e inmutable una imagen de contenedor. El digest es normalmente un hash SHA-256 del manifiesto de la imagen de contenedor. Usar el digest en lugar de la etiqueta para referenciar una imagen tiene algunas ventajas:
- El digest es inmutable, por lo que la imagen referenciada por el digest nunca cambiará.
- Contrariamente, las etiquetas de imagen pueden reutilizarse, por lo que la misma etiqueta puede referenciar diferentes imágenes. Esto puede llevar a resultados inesperados al descargar una imagen.
- Las herramientas de escaneo pueden usarse para comprobar si una imagen tiene vulnerabilidades, pero si la imagen se actualiza, los resultados del escaneo estarán desactualizados.
- El digest es único, por lo que no hay posibilidad de referenciar la imagen equivocada.
- Algunas plataformas de contenedores en la nube requieren el digest para referenciar una imagen.
Encontrar el digest de una imagen de contenedor estándar es fácil.
- El digest puede ser visible desde la interfaz web del registro de imágenes de contenedor.
- El digest se muestra al descargar una imagen.
- El digest puede encontrarse usando múltiples comandos
docker
.
Digests de imágenes multi-plataforma
Sin embargo, al usar imágenes multi-plataforma, el digest mostrado al descargar la imagen puede no ser el digest del manifiesto de la imagen, sino el digest de la imagen para tu plataforma específica. Dado que queremos asegurarnos de que referenciamos la misma imagen para todas las plataformas, necesitamos encontrar el digest del manifiesto de la imagen multi-plataforma.
Para este propósito, podemos usar el plugin Docker buildx que normalmente se incluye con el CLI de Docker. Este enfoque también tiene la ventaja de que no necesitamos descargar la imagen para encontrar el digest.
El siguiente comando imprime el digest del manifiesto de una imagen multi-plataforma con nombre image/name
y etiqueta version
alojada en el registro docker.io
:
docker buildx imagetools inspect docker.io/image/name:version --format "{{json .Manifest}}"
Si tienes jq
disponible, puedes usar el siguiente comando para imprimir solo el digest del manifiesto de la imagen:
docker buildx imagetools inspect docker.io/image/name:tag --format "{{json .Manifest}}" | jq -r '.digest'
Por ejemplo, este sería el resultado de la ejecución para la imagen marcnuri/yakd:0.0.4
:
$ docker buildx imagetools inspect docker.io/marcnuri/yakd:0.0.4 --format "{{json .Manifest}}" | jq -r '.digest'
sha256:a3f540278e4c11373e15605311851dd9c64d208f4d63e727bccc0e39f9329310