自定义 Dockerfile 语法

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...

您还可以使用预定义的 build 参数来设置 frontend image 参考:BUILDKIT_SYNTAX

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

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

自定义 Dockerfile 实现允许您:

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

注意

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

官方发布

Docker 分发可用于构建的镜像的正式版本 Docker Hub 上存储库下的 Dockerfile。有两个 发布新镜像的通道:和 .docker/dockerfilestablelabs

稳定通道

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

  • docker/dockerfile:1- 使用最新的次要版本和补丁保持更新 释放。1.x.x
  • docker/dockerfile:1.2- 使用最新的补丁版本保持更新, 并在版本发布后停止接收更新。1.2.x1.3.0
  • docker/dockerfile:1.2.1- immutable:永不更新。

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

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

Labs 频道

该频道提供对尚不可用的 Dockerfile 功能的早期访问 在频道中可用。 同时发布镜像 作为稳定版本,并遵循相同的版本模式,但使用后缀,例如:labsstablelabs-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- immutable:永不更新。与 相同,但启用了实验性功能。dockerfile:1.2.1

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

其他资源

有关功能、主构建和夜间功能的文档 版本,请参阅 GitHub 上 BuildKit 源码仓库中的描述。 有关可用镜像的完整列表,请访问 Docker Hub 上的 docker/dockerfile 存储库。 以及 Docker Hub 上的 docker/dockerfile-upstream 存储库,用于开发版本。labs