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

Vista general de Docker Build

Tabla de contenidos

Docker Build implementa una arquitectura cliente-servidor, donde:

  • Cliente: Buildx es el cliente y la interfaz de usuario para ejecutar y gestionar compilaciones.
  • Servidor: BuildKit es el servidor, o builder, que maneja la ejecución de la compilación.

Cuando ejecutas una compilación, el cliente Buildx envía una solicitud de compilación al backend de BuildKit. BuildKit procesa las instrucciones de compilación y ejecuta los pasos de la compilación. El resultado de la compilación se envía de vuelta al cliente o se sube a un registro, como Docker Hub.

Tanto Buildx como BuildKit se instalan junto con Docker Desktop y Docker Engine de forma predeterminada. Cuando ejecutas el comando docker build, utilizas Buildx para ejecutar una compilación mediante el BuildKit predeterminado que viene con Docker.

Buildx

Buildx es la herramienta de CLI que utilizas para ejecutar compilaciones. El comando docker build es un envoltorio (wrapper) alrededor de Buildx. Al ejecutar docker build, Buildx interpreta las opciones de compilación y envía una solicitud de compilación al backend de BuildKit.

El cliente Buildx puede hacer más que ejecutar compilaciones. También puedes utilizar Buildx para crear y gestionar backends de BuildKit, conocidos como constructores (builders). Además, admite funciones para gestionar imágenes en registros y para ejecutar múltiples compilaciones simultáneamente.

Docker Buildx se instala por defecto con Docker Desktop. También puedes compilar el plugin de CLI desde el código fuente, o descargar un binario desde el repositorio de GitHub e instalarlo manualmente. Consulta el README de Buildx en GitHub para obtener más información.

Note

Aunque docker build invoca a Buildx internamente, existen diferencias sutiles entre este comando y el comando canónico docker buildx build. Para más detalles, consulta Diferencias entre docker build y docker buildx build.

BuildKit

BuildKit es el proceso demonio (daemon) que ejecuta las tareas de compilación.

La ejecución de una compilación comienza al invocar el comando docker build. Buildx interpreta tu comando de compilación y envía una solicitud de compilación al backend de BuildKit. La solicitud de compilación incluye:

  • El Dockerfile
  • Argumentos de compilación (build arguments)
  • Opciones de exportación
  • Opciones de almacenamiento en caché

BuildKit procesa las instrucciones de compilación y ejecuta los pasos de la compilación. Mientras BuildKit ejecuta la compilación, Buildx supervisa el estado de la misma e imprime el progreso en la terminal.

Si la compilación requiere recursos del cliente, como archivos locales o secretos de compilación, BuildKit solicita a Buildx los recursos necesarios.

Esta es una de las razones por las que BuildKit es más eficiente en comparación con el constructor heredado (legacy builder) utilizado en versiones anteriores de Docker. BuildKit solo solicita los recursos que la compilación necesita cuando son requeridos. En cambio, el constructor heredado siempre realizaba una copia completa del sistema de archivos local.

Entre los ejemplos de recursos que BuildKit puede solicitar a Buildx se incluyen:

  • Contextos de compilación del sistema de archivos local
  • Secretos de compilación
  • Sockets SSH
  • Tokens de autenticación de registro

Para obtener más información sobre BuildKit, consulta BuildKit.