Quiero construir un sistema muy simple (pensando en algunas líneas de Python) que convierte una etiqueta docker determinada (por ejemplo, ubuntu:latest ) en el resumen SHA256 de la imagen a la que apunta actualmente la etiqueta.
Soy consciente de que si tenemos instalado Docker, podemos simplemente pull y luego enumerar el resumen de la imagen extraída. Estaba pensando si esto se puede lograr sin realmente tirar de la imagen.
El cliente de Docker no (parece) mostrar esta funcionalidad, por lo que deberá usar un SDK de cliente de Registro. Estoy usando Golang y no he podido encontrar un SDK que sea fácil de usar y funcione en todos los registros (estoy interesado en usar Google Container Registry además de Docker Hub). Puede tener más éxito con Python.
He estado trabajando en un proyecto con manifiestos de imágenes de contenedores y escribí una publicación en Medium sobre cómo enumerar manifiestos y resúmenes de manifiestos. Espero que te sea útil:
https://medium.com/google-cloud/adventures-w-docker-manifiestos-78f255d662ff
NB Hay algunas inconsistencias con la implementación de Docker Hub de la API HTTP v2 de Docker Registry . FWIW, Google Container Registry (GCR) implementa con precisión la API de registro. Trabajo para Google aunque no en el equipo de GCR.
Puede usar crane para obtener el manifiesto de la imagen y luego usar skopeo para calcular el resumen.
$ crane manifest ubuntu:18.04 | skopeo manifest-digest /dev/stdin sha256:86510528ab9cd7b64209cbbe6946e094a6d10c6db21def64a93ebdd20011de1d Alternativamente, puede obtener el mismo resumen de la salida de skopeo inspect
$ skopeo inspect docker://ubuntu:18.04 | jq -r .Digest sha256:86510528ab9cd7b64209cbbe6946e094a6d10c6db21def64a93ebdd20011de1dO si desea hacerlo a mano sin ninguna de las herramientas mencionadas anteriormente, intente esto:
$ curl -s -L \ -H "Accept: application/vnd.docker.distribution.manifest.v2+json,application/vnd.docker.distribution.manifest.list.v2+json" \ -H "Authorization: Bearer $(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull" | jq -r .token)" \ https://index.docker.io/v2/library/ubuntu/manifests/18.04 | sha256sum 86510528ab9cd7b64209cbbe6946e094a6d10c6db21def64a93ebdd20011de1d - De hecho, una solicitud HEAD es suficiente para obtener el hash manifiesto
$ curl -s -L -I \ -H "Accept: application/vnd.docker.distribution.manifest.v2+json,application/vnd.docker.distribution.manifest.list.v2+json" \ -H "Authorization: Bearer $(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull" | jq -r .token)" \ https://index.docker.io/v2/library/ubuntu/manifests/18.04 | grep ^Docker-Content-Digest | awk '{print $2}' sha256:86510528ab9cd7b64209cbbe6946e094a6d10c6db21def64a93ebdd20011de1d