自定义Dockerfile语法
Dockerfile 前端
BuildKit 支持从容器镜像动态加载前端。要使用外部 Dockerfile 前端,您的 Dockerfile 的第一行需要设置指向要使用的特定镜像的 syntax
指令
# syntax=[remote image reference]
例如
# syntax=docker/dockerfile:1
# syntax=docker.io/docker/dockerfile:1
# syntax=example.com/user/repo:tag@sha256:abcdef...
您也可以使用预定义的 BUILDKIT_SYNTAX
构建参数在命令行上设置前端镜像引用。
$ docker build --build-arg BUILDKIT_SYNTAX=docker/dockerfile:1 .
这定义了用于构建 Dockerfile 的 Dockerfile 语法的路径。BuildKit 后端允许无缝使用作为 Docker 镜像分发并在容器沙箱环境中执行的外部实现。
自定义 Dockerfile 实现允许您:
- 无需更新 Docker 守护程序即可自动获取错误修复
- 确保所有用户都使用相同的实现来构建您的 Dockerfile
- 无需更新 Docker 守护程序即可使用最新功能
- 在将新功能或第三方功能集成到 Docker 守护程序之前试用它们
- 使用 替代构建定义,或创建您自己的
- 使用自定义功能构建您自己的 Dockerfile 前端
注意
BuildKit 附带内置的 Dockerfile 前端,但建议使用外部镜像以确保所有用户在构建器上使用相同的版本,并自动获取错误修复,而无需等待新版本的 BuildKit 或 Docker Engine。
正式版本
Docker 分发了可在 Docker Hub 上的 docker/dockerfile
存储库下用于构建 Dockerfile 的镜像的官方版本。有两个通道发布新镜像: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 通道
labs
通道提供对稳定通道中尚不可用的 Dockerfile 功能的抢先体验。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
渠道中的稳定功能遵循语义化版本控制,但抢先体验功能并非如此,较新的版本可能不向后兼容。请固定版本以避免处理重大更改。
其他资源
有关labs
功能、主版本构建和每日构建功能版本的文档,请参阅GitHub 上的 BuildKit 源代码库中的说明。有关可用镜像的完整列表,请访问Docker Hub 上的docker/dockerfile
代码库和Docker Hub 上的docker/dockerfile-upstream
代码库(用于开发版本)。