自定义 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...
这定义了用于构建 Dockerfile 的 Dockerfile 语法的位置。 BuildKit 后端允许无缝使用作为 Docker 映像分发并在容器沙箱环境中执行的外部实现。
自定义 Dockerfile 实现允许您:
- 自动修复错误,无需更新 Docker 守护进程
- 确保所有用户都使用相同的实现来构建 Dockerfile
- 使用最新功能,无需更新 Docker 守护进程
- 在将新功能或第三方功能集成到 Docker 守护程序之前先尝试它们
- 使用 替代构建定义,或创建您自己的
笔记
BuildKit 还附带内置的 Dockerfile 前端,但建议使用外部映像,以确保所有用户在构建器上使用相同的版本,并自动获取错误修复,而无需等待新版本的 BuildKit 或 Docker Engine。
官方发布
Docker 分发了可用于docker/dockerfile
在 Docker Hub 上的存储库下构建 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
频道提供对频道中尚未提供的 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
遵循
语义版本控制,但早期访问功能则不然,并且较新的版本可能无法向后兼容。固定版本以避免处理重大更改。
其他资源
有关功能、主构建和夜间功能发布的文档,请参阅GitHub 上的 BuildKit 源存储库labs
中的说明
。有关可用映像的完整列表,请访问
Docker Hub 上的存储库以及
Docker Hub 上的
用于开发版本的存储库。docker/dockerfile
docker/dockerfile-upstream