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

Exportadores local y tar

Los exportadores local y tar generan el sistema de archivos raíz del resultado de la compilación en un directorio local. Son útiles para producir artefactos que no son imágenes de contenedor.

  • local exporta archivos y directorios.
  • tar exporta lo mismo, pero empaqueta la exportación en un archivo tar.

Sinopsis

Compila utilizando los exportadores local y tar:

$ docker buildx build --output type=local[,parameters] .
$ docker buildx build --output type=tar[,parameters] .

La siguiente tabla describe los parámetros disponibles:

ParámetroTipoPredeterminadoDescripción
destStringRuta a la que copiar los archivos
platform-splitBooleantrueSolo para el exportador local. Divide las salidas multi-plataforma en subdirectorios de plataforma.

Compilaciones multi-plataforma con el exportador local

El parámetro platform-split controla cómo se organizan las salidas de compilación multi-plataforma.

Considera este Dockerfile que crea archivos específicos de la plataforma:

FROM busybox AS build
ARG TARGETOS
ARG TARGETARCH
RUN mkdir /out && echo foo > /out/hello-$TARGETOS-$TARGETARCH

FROM scratch
COPY --from=build /out /

Dividir por plataforma (predeterminado)

Por defecto, el exportador local crea un subdirectorio separado para cada plataforma:

$ docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --output type=local,dest=./output \
  .

Esto produce la siguiente estructura de directorios:

output/
├── linux_amd64/
│   └── hello-linux-amd64
└── linux_arm64/
    └── hello-linux-arm64

Fusionar todas las plataformas

Para fusionar archivos de todas las plataformas en el mismo directorio, establece platform-split=false:

$ docker buildx build \
  --platform linux/amd64,linux/arm64 \
  --output type=local,dest=./output,platform-split=false \
  .

Esto produce una estructura de directorios plana:

output/
├── hello-linux-amd64
└── hello-linux-arm64

Los archivos de todas las plataformas se fusionan en un único directorio. Si múltiples plataformas producen archivos con nombres idénticos, la exportación fallará con un error.

Compilaciones de una sola plataforma

Las compilaciones de una sola plataforma se exportan directamente al directorio de destino sin crear un subdirectorio de plataforma:

$ docker buildx build \
  --platform linux/amd64 \
  --output type=local,dest=./output \
  .

Esto produce:

output/
└── hello-linux-amd64

Para incluir el subdirectorio de plataforma incluso en compilaciones de una sola plataforma, establece explícitamente platform-split=true:

$ docker buildx build \
  --platform linux/amd64 \
  --output type=local,dest=./output,platform-split=true \
  .

Esto produce:

output/
└── linux_amd64/
    └── hello-linux-amd64

Lectura adicional

Para obtener más información sobre los exportadores local o tar, consulta el README de BuildKit.