# 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](/reference/dockerfile/)
debe establecer la [directiva `syntax`](/reference/dockerfile/#syntax)
apuntando a la imagen específica que deseas utilizar:

```dockerfile
# syntax=[remote image reference]
```

Por ejemplo:

```dockerfile
# 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:

```console
$ 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](https://github.com/moby/buildkit#exploring-llb)
- 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](https://semver.org).
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](https://semver.org),
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](https://github.com/moby/buildkit/blob/master/README.md).
Para obtener una lista completa de las imágenes disponibles, visita el [repositorio `docker/dockerfile` en Docker Hub](https://hub.docker.com/r/docker/dockerfile),
y el [repositorio `docker/dockerfile-upstream` en Docker Hub](https://hub.docker.com/r/docker/dockerfile-upstream)
para compilaciones de desarrollo.


