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