Compartir comentarios
Las respuestas se generan en base a la documentación.

Definición remota de archivos de Bake

Puedes compilar archivos de Bake directamente desde un repositorio Git remoto o una URL HTTPS:

$ docker buildx bake "https://github.com/docker/cli.git#v20.10.11" --print
#1 [internal] load git source https://github.com/docker/cli.git#v20.10.11
#1 0.745 e8f1871b077b64bcb4a13334b7146492773769f7       refs/tags/v20.10.11
#1 2.022 From https://github.com/docker/cli
#1 2.022  * [new tag]         v20.10.11  -> v20.10.11
#1 DONE 2.9s

Esto obtiene la definición de Bake de la ubicación remota especificada y ejecuta los grupos u objetivos (targets) definidos en ese archivo. Si la definición de Bake remota no especifica un contexto de compilación, el contexto se establece automáticamente en el repositorio Git remoto. Por ejemplo, este caso utiliza https://github.com/docker/cli.git:

{
  "group": {
    "default": {
      "targets": ["binary"]
    }
  },
  "target": {
    "binary": {
      "context": "https://github.com/docker/cli.git#v20.10.11",
      "dockerfile": "Dockerfile",
      "args": {
        "BASE_VARIANT": "alpine",
        "GO_STRIP": "",
        "VERSION": ""
      },
      "target": "binary",
      "platforms": ["local"],
      "output": ["build"]
    }
  }
}

Usar el contexto local con una definición remota

Al compilar con una definición de Bake remota, es posible que desees consumir archivos locales relativos al directorio donde se ejecuta el comando de Bake. Puedes definir contextos como relativos al contexto del comando utilizando el prefijo cwd://.

https://github.com/dvdksn/buildx/blob/bake-remote-example/docker-bake.hcl
target "default" {
  context = "cwd://"
  dockerfile-inline = <<EOT
FROM alpine
WORKDIR /src
COPY . .
RUN ls -l && stop
EOT
}
$ touch foo bar
$ docker buildx bake "https://github.com/dvdksn/buildx.git#bake-remote-example"
...
 > [4/4] RUN ls -l && stop:
#8 0.101 total 0
#8 0.102 -rw-r--r--    1 root     root             0 Jul 27 18:47 bar
#8 0.102 -rw-r--r--    1 root     root             0 Jul 27 18:47 foo
#8 0.102 /bin/sh: stop: not found

Puedes añadir una ruta al prefijo cwd:// si deseas utilizar un directorio local específico como contexto. Ten en cuenta que si especificas una ruta, esta debe estar dentro del directorio de trabajo donde se ejecuta el comando. Si utilizas una ruta absoluta o una ruta relativa que apunte fuera del directorio de trabajo, Bake lanzará un error.

Contextos locales con nombre

También puedes usar el prefijo cwd:// para definir directorios locales en el contexto de ejecución de Bake como contextos con nombre.

El siguiente ejemplo define el contexto docs como ./src/docs/content, relativo al directorio de trabajo actual desde donde se ejecuta Bake como un contexto con nombre.

docker-bake.hcl
target "default" {
  contexts = {
    docs = "cwd://src/docs/content"
  }
  dockerfile = "Dockerfile"
}

Por el contrario, si omites el prefijo cwd://, la ruta se resolvería de forma relativa al contexto de compilación.

Especificar la definición de Bake que se va a utilizar

Al cargar un archivo de Bake desde un repositorio Git remoto, si el repositorio contiene más de un archivo de Bake, puedes especificar qué definición de Bake deseas utilizar mediante la bandera --file o -f:

docker buildx bake -f bake.hcl "https://github.com/crazy-max/buildx.git#remote-with-local"
...
#4 [2/2] RUN echo "hello world"
#4 0.270 hello world
#4 DONE 0.3s

Combinar definiciones de Bake locales y remotas

También puedes combinar definiciones remotas con locales utilizando el prefijo cwd:// con -f.

Dada la siguiente definición de Bake local en el directorio de trabajo actual:

# local.hcl
target "default" {
  args = {
    HELLO = "foo"
  }
}

El siguiente ejemplo utiliza -f para especificar dos definiciones de Bake:

  • -f bake.hcl: esta definición se carga de forma relativa a la URL de Git.
  • -f cwd://local.hcl: esta definición se carga de forma relativa al directorio de trabajo actual desde donde se ejecuta el comando de Bake.
docker buildx bake -f bake.hcl -f cwd://local.hcl "https://github.com/crazy-max/buildx.git#remote-with-local" --print
{
  "target": {
    "default": {
      "context": "https://github.com/crazy-max/buildx.git#remote-with-local",
      "dockerfile": "Dockerfile",
      "args": {
        "HELLO": "foo"
      },
      "target": "build",
      "output": [
        {
          "type": "cacheonly"
        }
      ]
    }
  }
}

Un caso en el que se hace necesario combinar definiciones de Bake locales y remotas es cuando estás compilando con una definición de Bake remota en GitHub Actions y deseas utilizar la acción metadata-action para generar etiquetas (tags), anotaciones o etiquetas descriptivas (labels). La acción de metadatos genera un archivo de Bake disponible en el contexto local de ejecución de Bake del ejecutor. Para usar tanto la definición remota como el archivo de Bake local de "solo metadatos", especifica ambos archivos y utiliza el prefijo cwd:// para el archivo de Bake de metadatos:

- name: Build
  uses: docker/bake-action@v7
  with:
    files: |
      ./docker-bake.hcl
      cwd://${{ steps.meta.outputs.bake-file }}
    targets: build

Definición remota en un repositorio privado

Si deseas utilizar una definición remota que reside en un repositorio privado, es posible que debas especificar credenciales para que Bake las use al obtener la definición.

Si puedes autenticarte en el repositorio privado utilizando el agente de SSH predeterminado SSH_AUTH_SOCK, entonces no necesitas especificar ningún parámetro de autenticación adicional para Bake. Bake utilizará automáticamente tu socket de agente predeterminado.

Para la autenticación utilizando un token HTTP o agentes SSH personalizados, utiliza las siguientes variables de entorno para configurar la estrategia de autenticación de Bake: