新的 Dockerfile 格式化工具解決格式化需求,但存在侷限性

BigGo Editorial Team
新的 Dockerfile 格式化工具解決格式化需求,但存在侷限性

容器開發社群一直在討論一種名為 dockerfmt 的新工具,該工具旨在標準化並改進 Dockerfile 格式。這個構建在內部 buildkit 解析器之上的工具,試圖為 Dockerfile 帶來與開發人員在其他程式語言中所期望的相同的自動格式化功能。

現代 Dockerfile 格式化及其侷限性

Dockerfmt 為使用容器定義的開發人員提供了幾個有用的功能,包括使用 mvdan/sh 格式化 RUN 步驟、支援基本的 heredocs,以及處理 run 步驟中的內聯註釋。該工具提供了命令列選項,用於檢查格式化、將格式化輸出寫回檔案、控制縮排以及確保檔案以尾隨換行符結束。然而,社群成員指出了幾個可能影響其採用的侷限性。根據文件,RUN 解析器不支援命令分組或分號,對長 JSON 命令沒有換行功能,並且不支援 #escape=X 指令。

一位社群成員強調了這些侷限性,指出:

「我堅定地站在使用 RUN set -e ;\ export DEBIAN_FRONTEND=noninteractive ;\ 等等這一陣營 - 所以我猜這個工具不適合我」

dockerfmt 的主要特點

  • 使用 mvdan/sh 格式化 RUN 步驟
  • 支援基本的 heredocs
  • 支援 run 步驟中的內聯註釋
  • 提供 JS 繫結

侷限性

  • RUN 解析器不支援命令中的分組或分號
  • 不支援長 JSON 命令的換行
  • 不支援 escape=X 指令

命令選項

  • -c, --check:檢查檔案是否已格式化
  • -w, --write:將格式化後的輸出寫回檔案
  • -1, --indent uint:縮排的空格數(預設為 4)
  • -n, --newline:檔案以換行符結尾

不斷發展的容器構建工具生態系統

圍繞 dockerfmt 的討論已擴充套件到關於容器映象構建生態系統的更廣泛對話。社群成員辯論了繼續使用 Dockerfile 與使用 Podman、Buildah、buildpacks、Nix、kaniko、ko、bazel 和 apko 等替代方案的優缺點。與傳統的 Dockerfile 相比,每種替代方案都提供了不同的權衡。例如,Buildah 被強調為提供相同的熟悉工具(RUN、ADD 等),但在更強大的 shell 環境中執行,儘管以犧牲自動層快取為代價。

社群採用和整合

該工具已經在開發者社群獲得了一些關注。一位評論者提到將 dockerfmt 整合到他們稱為 Qlty CLI 的通用程式碼檢查和格式化工具中,並指出該外掛只花了大約十分鐘就新增完成。這種快速整合表明 dockerfmt 具有簡單明瞭的 API,使工具構建者容易訪問。

一些使用者指出了 dockerfmt 專案本身不包含 Dockerfile 的諷刺之處,這使得開發人員難以在容器化環境中快速測試該工具。專案維護者對這一反饋做出了回應,承諾很快釋出該二進位制檔案的 Docker 版本。

隨著透過 LLMs 進行的自動程式碼生成變得越來越普遍,像 dockerfmt 這樣的工具可能對於維護跨專案的乾淨、一致的程式碼變得越來越重要。在所有語言和配置檔案中標準化格式有助於保持差異的整潔,並使程式碼庫更易於維護,特別是在協作環境中。

參考:dockerfmt