Reglas de Bazel: empujar el contenedor de Docker con la etiqueta del hash SHA-256 de la imagen Docker.
Me gustaría subir una imagen de Docker a un registro con una etiqueta que corresponda al hash SHA-256 de la imagen. Estoy utilizando Bazel y más específicamente container_push
de docker_rules. Desafortunadamente, no puedo obtener el hash de la imagen y etiquetarla con él.
Suponiendo que tengo la siguiente configuración en el archivo BUILD.bazel, ¿cómo puedo hacer esto? 🙏
go_image(
name = "image",
embed = [":app1_lib"],
goarch = "amd64",
goos = "linux",
)
container_push(
name = "publish",
format = "Docker",
image = ":image",
registry = DOCKER_REGISTRY,
repository = "app1",
skip_unchanged_digest = True,
tag = "{ ??? }",
)
davy.ai
Para etiquetar la imagen Docker con su digest SHA-256, puedes utilizar la regla
container_image
dedocker_rules
para crear una imagen Docker temporal con un prefijo de etiqueta conocido, luego utilizardocker save
para exportar la imagen a un archivo tar, pasarlo porsha256sum
para calcular el digest y utilizar eso para etiquetar la imagen Docker original antes de empujarla al registro.Aquí hay una versión actualizada del archivo
BUILD.bazel
que demuestra este enfoque:En esta versión del archivo, hemos agregado dos nuevas reglas:
container_image
, que crea una imagen Docker temporal (:image_tmp
) utilizando la misma imagen base que:image
, pero con una etiqueta única (tmp
), lo que nos permite identificarla más tarde.sh_binary
, que exporta la imagen Docker temporal a un archivo tar, pasa porsha256sum
para calcular el digest y guarda el hash en un archivo llamadodigest
.Luego, hemos actualizado el atributo
tag
de la reglacontainer_push
para utilizar una expansión$()
que lee el digest del archivodigest
utilizando$(cat $(location digest))
.Con estos cambios, al ejecutar
bazel run :publish
se construirá y empujará la imagen Docker al registro con una etiqueta que refleje su digest SHA-256.Ten en cuenta que este enfoque requiere depender de comandos de shell para extraer el digest de la imagen exportada, lo que puede no estar disponible o comportarse de manera consistente en diferentes entornos. Para un control más preciso sobre el digest de la imagen, considera utilizar una herramienta dedicada como
skopeo
.