自定义 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_SYNTAXbuild 参数设置 frontend image 参考:

$ docker build --build-arg BUILDKIT_SYNTAX=docker/dockerfile:1 .

这定义了用于构建 Dockerfile 文件。BuildKit 后端允许无缝使用外部 作为 Docker 镜像分发并在 容器沙箱环境。

自定义 Dockerfile 实现允许您:

  • 自动获取错误修复,而无需更新 Docker 守护程序
  • 确保所有用户都使用相同的实现来构建 Dockerfile
  • 使用最新功能,而无需更新 Docker 守护程序
  • 在将新功能或第三方功能集成到 Docker 守护程序之前,请先试用它们
  • 使用替代构建定义,或创建自己的构建定义
  • 使用自定义功能构建您自己的 Dockerfile 前端

注意

BuildKit 附带了一个内置的 Dockerfile 前端,但建议使用 使用外部镜像以确保所有用户在 构建器并自动获取错误修复,而无需等待新的 BuildKit 或 Docker Engine 的版本。

官方发布

Docker 分发可用于构建的镜像的正式版本 Dockerfile 下的docker/dockerfile存储库。有两个 发布新镜像的频道:stablelabs.

稳定通道

stable通道遵循语义版本控制。 例如:

  • docker/dockerfile:1- 保持最新信息1.x.xminor patch 释放。
  • docker/dockerfile:1.2- 保持最新信息1.2.x补丁版本、 并在版本发布后停止接收更新1.3.0发布。
  • docker/dockerfile:1.2.1- immutable:永不更新。

我们建议使用docker/dockerfile:1,它始终指向最新的 版本 1 语法的稳定版本,并同时接收 “minor” 和 “patch” 版本 1 发布周期的更新。BuildKit 会自动检查 更新语法,确保您使用的是 最新版本。

如果使用特定版本,例如1.21.2.1中,Dockerfile 需要 以继续接收错误修复和新功能。老 Dockerfile 的版本仍然与新版本的 建筑工人。

Labs 频道

labs频道提供对尚不可用的 Dockerfile 功能的早期访问 在stable渠道。labs同时发布镜像 作为稳定版本,并遵循相同的版本模式,但使用-labssuffix 中,例如:

  • docker/dockerfile:labs- 最新版本labs渠道。
  • docker/dockerfile:1-labs- 与dockerfile:1,实验性 已启用功能。
  • docker/dockerfile:1.2-labs- 与dockerfile:1.2,实验性 已启用功能。
  • docker/dockerfile:1.2.1-labs- immutable:永不更新。等同dockerfile:1.2.1,并启用实验性功能。

选择最适合您需求的渠道。如果您想从 新功能,请使用labs渠道。镜像labs频道包含 中的所有功能stable频道,以及抢先体验功能。 Stable 功能labs通道跟随语义版本控制, 但抢先体验功能没有,新版本可能不会倒退 相容。固定版本以避免处理重大更改。

其他资源

有关labs功能、主 Build 和 Nightly 功能 版本,请参阅 GitHub 上 BuildKit 源码仓库中的描述。 有关可用镜像的完整列表,请访问docker/dockerfileDocker Hub 上的存储库, 和docker/dockerfile-upstreamDocker Hub 上的存储库用于开发版本。