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

Usar Bake con contextos adicionales

Además de la clave principal context que define el contexto de compilación, cada objetivo (target) también puede definir contextos con nombre adicionales con un mapa definido con la clave contexts. Estos valores se asignan a la bandera --build-context en el comando de compilación.

Dentro del Dockerfile, estos contextos se pueden utilizar con la instrucción FROM o con la bandera --from.

Los valores de contexto admitidos son:

  • Directorios del sistema de archivos local
  • Imágenes de contenedores
  • URLs de Git
  • URLs HTTP
  • Nombre de otro objetivo (target) en el archivo de Bake

Fijar la imagen de alpine

Dockerfile
# syntax=docker/dockerfile:1
FROM alpine
RUN echo "Hello world"
docker-bake.hcl
target "app" {
  contexts = {
    alpine = "docker-image://alpine:3.13"
  }
}

Usar un directorio de origen secundario

Dockerfile
FROM golang
COPY --from=src . .
docker-bake.hcl
# Ejecutar `docker buildx bake app` hará que `src` no apunte
# a alguna etapa de compilación previa, sino al sistema de archivos del cliente, fuera del contexto.
target "app" {
  contexts = {
    src = "../path/to/source"
  }
}

Usar un objetivo (target) como contexto de compilación

Para usar el resultado de un objetivo como contexto de compilación de otro, especifica el nombre del objetivo con el prefijo target:.

baseapp.Dockerfile
FROM scratch
Dockerfile
# syntax=docker/dockerfile:1
FROM baseapp
RUN echo "Hello world"
docker-bake.hcl
target "base" {
  dockerfile = "baseapp.Dockerfile"
}

target "app" {
  contexts = {
    baseapp = "target:base"
  }
}

En la mayoría de los casos, simplemente deberías utilizar un único Dockerfile multi-etapa (multi-stage) con múltiples objetivos para lograr un comportamiento similar. Este caso de uso solo se recomienda cuando tienes múltiples Dockerfiles que no se pueden fusionar fácilmente en uno solo.