自定義 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
倉庫以獲取開發構建。