Пользовательский синтаксис Dockerfile

Внешний интерфейс докерфайла

BuildKit поддерживает загрузку фронтендов динамически из образов контейнеров. Чтобы использовать внешний фронтенд Dockerfile, в первой строке вашего Dockerfile нужно установить синтаксическая директива, указывающий на конкретный образ, который вы хотите использовать:

# syntax=[remote image reference]

Например:

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

Это определяет местоположение синтаксиса Dockerfile, который используется для сборки Dockerfile. Бэкенд BuildKit позволяет легко использовать внешние реализации, которые распространяются как образы Docker и выполняются внутри контейнерной среды песочницы.

Пользовательские реализации Dockerfile позволяют:

  • Автоматическое получение исправлений без обновления демона Docker

  • Убедиться, что все пользователи используют одну и ту же реализацию для создания вашего Dockerfile

  • Используйте новейшие функции без обновления демона Docker

  • Опробовать новые функции или функции сторонних разработчиков до того, как они будут интегрированы в демон Docker

  • Используйте альтернативные определения сборки или создаёт свои собственные

    Примечание

    BuildKit также поставляется со встроенным фронтендом Dockerfile, но рекомендуется использовать внешний образ, чтобы убедиться, что все пользователи используют одну и ту же версию на сборщике, и получать исправления автоматически, не дожидаясь новой версии BuildKit или Docker Engine.

Официальные релизы

Docker распространяет официальные версии образов, которые могут быть использованы для сборки Docker-файлов, в репозитории docker/dockerfile на Docker Hub. Существует два канала, по которым выпускаются новые образы: stable и labs.

Стабильный канал

Канал stable следует за семантическое управление версиями. Например:

  • docker/dockerfile:1 — обновлено последним минором 1.x.x и выпуском патча.

  • docker/dockerfile:1.2 — обновляется с выходом последнего патча 1.2.x, и перестает получать обновления после выхода версии 1.3.0.

  • docker/dockerfile:1.2.1 — неизменяемый: никогда не обновляется.

Мы рекомендуем использовать docker/dockerfile:1, который всегда указывает на последний стабильный релиз синтаксиса версии 1 и получает как «минорные», так и «патчевые» обновления для цикла релиза версии 1. BuildKit автоматически проверяет наличие обновлений синтаксиса при выполнении сборки, гарантируя, что вы используете самую актуальную версию.

Если используется определенная версия, например, 1.2 или 1.2.1, Dockerfile необходимо обновлять вручную, чтобы продолжать получать исправления ошибок и новые возможности. Старые версии Dockerfile остаются совместимыми с новыми версиями билдера.

Лабораторный канал

Канал labs предоставляет ранний доступ к функциям Dockerfile, которые ещё не доступны в канале stable. Образы labs выпускаются в то же время, что и стабильные релизы, и следуют той же схеме версий, но используют суффикс -labs, например:

  • docker/dockerfile:labs — последний релиз на канале labs.

  • docker/dockerfile:1-labs — то же, что и dockerfile:1, с включенными экспериментальными функциями.

  • docker/dockerfile:1.2-labs — то же, что и dockerfile:1.2, с включенными экспериментальными функциями.

  • docker/dockerfile:1.2.1-labs — неизменяемый: никогда не обновляется. То же, что и dockerfile:1.2.1, с включенными экспериментальными функциями.

Выбрать канал, который лучше всего соответствует вашим потребностям. Если вы хотите воспользоваться новыми функциями, используйте канал labs. Образы в канале labs содержат все функции канала stable, а также функции раннего доступа. Стабильные функции в канале labs соответствуют семантическое управление версиями, а функции раннего доступа — нет, а более новые версии могут быть несовместимы с предыдущими версиями. Закрепите версию, чтобы избежать критических изменений.

Другие ресурсы

Документацию по «лабораторным» функциям, мастер-сборкам и ночным выпускам функций см. в описании в исходный репозиторий BuildKit на GitHub. Полный список доступных образов см. на страницах репозиторий docker/dockerfile на Docker Hub и репозиторий docker/dockerfile-upstream на DockerHub для сборок разработки.