Пользовательский синтаксис 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 для сборок разработки.