Builders
Un builder (constructor) es un demonio de BuildKit que puedes utilizar para ejecutar tus compilaciones. BuildKit es el motor de compilación que procesa los pasos del Dockerfile para generar una imagen de contenedor u otros artefactos.
Puedes crear y gestionar builders, inspeccionarlos e incluso conectarte a builders que se estén ejecutando de forma remota. Interactúas con los builders utilizando la CLI de Docker.
Builder predeterminado
Docker Engine crea automáticamente un builder que se convierte en el backend predeterminado para tus compilaciones. Este builder utiliza la biblioteca de BuildKit integrada en el demonio y no requiere ninguna configuración.
El builder predeterminado está vinculado directamente al demonio de Docker y a su
contexto (context). Si cambias el contexto de Docker, tu builder default hará referencia al nuevo contexto de Docker.
Drivers de compilación
Buildx implementa un concepto de drivers de compilación (build drivers) para referirse a diferentes configuraciones de builders. El builder predeterminado creado por el demonio utiliza el driver docker.
Buildx admite los siguientes drivers de compilación:
docker: utiliza la biblioteca de BuildKit integrada en el demonio de Docker.docker-container: crea un contenedor BuildKit dedicado utilizando Docker.kubernetes: crea pods de BuildKit en un clúster de Kubernetes.remote: se conecta directamente a un demonio de BuildKit gestionado manualmente.
Builder seleccionado
El builder seleccionado hace referencia al builder que se utiliza por defecto cuando ejecutas comandos de compilación.
Cuando ejecutas una compilación o interactúas con los builders de alguna manera mediante la CLI, puedes usar la bandera opcional --builder o la variable de entorno BUILDX_BUILDER para especificar un builder por su nombre. Si no especificas ningún builder, se utilizará el builder seleccionado.
Utiliza el comando docker buildx ls para ver las instancias de builders disponibles. El asterisco (*) junto al nombre de un builder indica cuál es el builder seleccionado.
$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
default * docker
default default running v0.11.6 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
my_builder docker-container
my_builder0 default running v0.11.6 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
Seleccionar un builder diferente
Para alternar entre builders, utiliza el comando docker buildx use <nombre>.
Después de ejecutar este comando, el builder que especifiques se seleccionará automáticamente cuando inicies compilaciones.
Diferencia entre docker build y docker buildx build
Aunque docker build es un alias de docker buildx build, existen diferencias sutiles entre ambos comandos. Con Buildx, el cliente de compilación y el demonio (BuildKit) están desacoplados. Esto significa que puedes utilizar múltiples builders desde un único cliente, incluso si son remotos.
El comando docker build siempre utiliza de forma predeterminada el builder integrado que viene con Docker Engine, para garantizar la compatibilidad con versiones anteriores de la CLI de Docker. Por otro lado, el comando docker buildx build comprueba si has configurado un builder diferente como predeterminado antes de enviar tu compilación a BuildKit.
Para utilizar el comando docker build con un builder que no sea el predeterminado, debes especificar el builder explícitamente:
Utilizando la bandera
--builder:$ docker build --builder mi_builder .O mediante la variable de entorno
BUILDX_BUILDER:$ BUILDX_BUILDER=mi_builder docker build .
En general, recomendamos que utilices el comando docker buildx build cuando desees utilizar builders personalizados. Esto garantiza que la configuración de tu builder seleccionado se interprete correctamente.
Información adicional
- Para obtener información sobre cómo interactuar y gestionar builders, consulta Gestionar builders.
- Para conocer los diferentes tipos de builders, consulta Drivers de compilación.