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

Sintaxis de Dockerfile personalizada

Frontend de Dockerfile

BuildKit admite la carga dinámica de frontends desde imágenes de contenedores. Para utilizar un frontend de Dockerfile externo, la primera línea de tu Dockerfile debe establecer la directiva syntax apuntando a la imagen específica que deseas utilizar:

# syntax=[remote image reference]

Por ejemplo:

# syntax=docker/dockerfile:1
# syntax=docker.io/docker/dockerfile:1
# syntax=example.com/user/repo:tag@sha256:abcdef...

También puedes usar el argumento de compilación predefinido BUILDKIT_SYNTAX para establecer la referencia de la imagen del frontend en la línea de comandos:

$ docker build --build-arg BUILDKIT_SYNTAX=docker/dockerfile:1 .

Esto define la ubicación de la sintaxis de Dockerfile que se utiliza para compilar el Dockerfile. El backend de BuildKit permite utilizar sin problemas implementaciones externas que se distribuyen como imágenes de Docker y se ejecutan dentro de un entorno aislado (sandbox) de contenedor.

Las implementaciones personalizadas de Dockerfile te permiten:

  • Obtener correcciones de errores automáticamente sin actualizar el demonio de Docker
  • Asegurarte de que todos los usuarios utilicen la misma implementación para compilar tu Dockerfile
  • Usar las últimas características sin actualizar el demonio de Docker
  • Probar nuevas características o características de terceros antes de que se integren en el demonio de Docker
  • Utilizar definiciones de compilación alternativas o crear las tuyas propias
  • Compilar tu propio frontend de Dockerfile con características personalizadas
Note

BuildKit incluye un frontend de Dockerfile integrado, pero se recomienda utilizar una imagen externa para garantizar que todos los usuarios utilicen la misma versión en el builder y para recibir correcciones de errores automáticamente sin esperar a una nueva versión de BuildKit o de Docker Engine.

Lanzamientos oficiales

Docker distribuye versiones oficiales de las imágenes que se pueden utilizar para compilar Dockerfiles en el repositorio docker/dockerfile en Docker Hub. Hay dos canales donde se publican las nuevas imágenes: stable (estable) y labs.

Canal estable (Stable channel)

El canal stable sigue el versionado semántico. Por ejemplo:

  • docker/dockerfile:1 - se mantiene actualizado con la última versión menor y de parche 1.x.x.
  • docker/dockerfile:1.2 - se mantiene actualizado con la última versión de parche 1.2.x y deja de recibir actualizaciones una vez que se publica la versión 1.3.0.
  • docker/dockerfile:1.2.1 - inmutable: nunca se actualiza.

Recomendamos utilizar docker/dockerfile:1, que siempre apunta a la última versión estable de la sintaxis de la versión 1, y recibe actualizaciones tanto de versión menor como de parche para el ciclo de lanzamiento de la versión 1. BuildKit comprueba automáticamente si hay actualizaciones de la sintaxis al realizar una compilación, asegurándose de que estés utilizando la versión más reciente.

Si se utiliza una versión específica, como 1.2 o 1.2.1, el Dockerfile debe actualizarse manualmente para seguir recibiendo correcciones de errores y nuevas características. Las versiones antiguas del Dockerfile siguen siendo compatibles con las nuevas versiones del builder.

Canal labs (Labs channel)

El canal labs proporciona acceso temprano a características de Dockerfile que aún no están disponibles en el canal stable. Las imágenes labs se publican al mismo tiempo que los lanzamientos estables y siguen el mismo patrón de versión, pero utilizan el sufijo -labs, por ejemplo:

  • docker/dockerfile:labs - último lanzamiento en el canal labs.
  • docker/dockerfile:1-labs - igual que dockerfile:1, con las características experimentales habilitadas.
  • docker/dockerfile:1.2-labs - igual que dockerfile:1.2, con las características experimentales habilitadas.
  • docker/dockerfile:1.2.1-labs - inmutable: nunca se actualiza. Igual que dockerfile:1.2.1, con características experimentales habilitadas.

Elige el canal que mejor se adapte a tus necesidades. Si deseas beneficiarte de las nuevas características, utiliza el canal labs. Las imágenes en el canal labs contienen todas las características del canal stable, además de las características de acceso temprano. Las características estables en el canal labs siguen el versionado semántico, pero las características de acceso temprano no lo hacen, y las nuevas versiones pueden no ser compatibles con las anteriores (retrocompatibles). Fija la versión para evitar tener que lidiar con cambios de ruptura.

Otros recursos

Para obtener documentación sobre las características de labs, compilaciones maestras (master builds) y lanzamientos de características nocturnos (nightly), consulta la descripción en el repositorio de origen de BuildKit en GitHub. Para obtener una lista completa de las imágenes disponibles, visita el repositorio docker/dockerfile en Docker Hub, y el repositorio docker/dockerfile-upstream en Docker Hub para compilaciones de desarrollo.