自定義 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。有兩個釋出新映象的通道:stablelabs

穩定版通道

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.21.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 倉庫 中的開發構建。