自定义 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
build 参数设置
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
存储库。有两个
发布新镜像的频道:stable
和labs
.
稳定通道
这stable
通道遵循语义版本控制。
例如:
docker/dockerfile:1
- 保持最新信息1.x.x
minor 和 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.2
或1.2.1
中,Dockerfile 需要
以继续接收错误修复和新功能。老
Dockerfile 的版本仍然与新版本的
建筑工人。
Labs 频道
这labs
频道提供对尚不可用的 Dockerfile 功能的早期访问
在stable
渠道。labs
同时发布镜像
作为稳定版本,并遵循相同的版本模式,但使用-labs
suffix 中,例如:
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/dockerfile
Docker Hub 上的存储库,
和docker/dockerfile-upstream
Docker Hub 上的存储库用于开发版本。