自定義 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
通道提供了對尚未在 stable
通道中提供的 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
倉庫,以及 Docker Hub 上的 docker/dockerfile-upstream
倉庫 中的開發構建。