Open Source

Dockerc:將 Docker 容器映像編譯為獨立可攜式二進位檔

Dockerc 是一個用 Zig 編寫的工具,可將 Docker 映像編譯為獨立的可攜式二進位執行檔,無需 Docker 或任何執行環境即可執行。

Keeping this site alive takes effort — your support means everything.
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分! 無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!
Dockerc:將 Docker 容器映像編譯為獨立可攜式二進位檔

Docker 容器解決了「在我機器上能跑」的問題,但卻引入了一個新問題:「在安裝了 Docker 的機器上能跑」。容器需要 Docker daemon、containerd,或至少需要一個容器執行環境。對於分發命令列工具、桌面應用程式或部署工件來說,這種依賴是一項負擔。Dockerc 採用了一種截然不同的方法——它將整個 Docker 映像編譯為獨立的二進位執行檔。

用 Zig 編寫,位於 github.com/NilsIrl/dockerc,Dockerc 讀取 Docker 映像的各層,並產生一個單一的、自包含的二進位檔,其中嵌入了檔案系統、入口點和執行時期設定。執行時,二進位檔會將自己解壓縮到記憶體中的檔案系統(透過 tmpfs),設定程序命名空間,然後執行應用程式。不需要 Docker、不需要 containerd、也不需要 root 權限。

這種方法對於將 CLI 工具、自動化腳本和工具應用程式分發到 Docker 不可用的環境特別有吸引力——CI 執行器、鎖定的伺服器、氣隙系統或終端使用者的機器。產生的二進位檔可在具有相同核心架構的 Linux 系統之間移植。

什麼是 Dockerc?

Dockerc 是一個將 Docker 容器映像編譯為獨立、可攜式二進位執行檔的工具。它用 Zig 編寫,產生靜態連結的二進位檔,其中嵌入了完整的容器檔案系統。產生的二進位檔可在任何相同架構的 Linux 系統上執行,無需 Docker、containerd 或任何其他容器執行環境。

如何使用 Dockerc?

使用方式遵循直接的編譯後執行模式:

# 將 Docker 映像編譯為二進位檔
dockerc --image alpine:latest --output myapp.bin

# 執行產生的二進位檔(不需要 Docker)
./myapp.bin

# 帶參數編譯
dockerc --image nginx:alpine --output webserver.bin --entrypoint nginx

編譯過程會提取映像層、建立 squashfs 檔案系統,並將其嵌入用 Zig 編寫的最小啟動器二進位檔中。

支援哪些架構?

Dockerc 的架構支援取決於工具的編譯目標和來源映像的平台。

主機架構目標架構狀態
x86_64 Linuxx86_64 容器完整支援
x86_64 LinuxARM64 容器實驗性(QEMU 使用者模式)
ARM64 LinuxARM64 容器完整支援
ARM64 Linuxx86_64 容器實驗性
macOSLinux 容器僅交叉編譯
WindowsLinux 容器不支援

核心限制在於 Linux 核心系統呼叫的相容性。產生的二進位檔會在無模擬的情況下原生執行,因此二進位檔的架構必須與主機核心匹配。

Dockerc 有哪些限制?

雖然功能強大,但 Dockerc 有重要的限制需要了解。

面向限制緩解措施
檔案大小二進位檔包含完整容器檔案系統使用精簡/alpine 基礎映像
啟動時間首次執行時將檔案系統提取到 tmpfs小映像時影響極小
掛載支援無磁碟區掛載手動複製檔案進出
網路繼承主機網路堆疊配合主機防火牆規則使用
GPU 存取無直接 GPU 穿透使用主機函式庫
持久儲存僅記憶體(tmpfs)明確的儲存/載入機制
訊號處理基本支援主程序

對於 CLI 工具、批次作業和無狀態工作負載,這些限制很少造成問題。對於有狀態服務或 GPU 應用程式,傳統的容器設定更為合適。

可以從原始碼建置 Dockerc 嗎?

可以。Dockerc 用 Zig 編寫,從原始碼建置需要 Zig 編譯器:

# 克隆儲存庫
git clone https://github.com/NilsIrl/dockerc.git
cd dockerc

# 使用 Zig 建置
zig build

# 二進位檔位於 ./zig-out/bin/dockerc
./zig-out/bin/dockerc --version

預建置的二進位檔也可從 GitHub Releases 頁面取得,供不想安裝 Zig 工具鏈的使用者使用。

常見問題

什麼是 Dockerc?

Dockerc 是一個用 Zig 編寫的工具,可將 Docker 映像編譯為獨立、可攜式的二進位執行檔。這些二進位檔可在任何 Linux 系統上執行,無需安裝 Docker 或任何容器執行環境。

如何使用 Dockerc?

使用 dockerc --image <name> --output <file> 將映像編譯為二進位檔。產生的二進位檔直接用 ./<file> 執行。Docker 映像中的入口點和預設指令會保留下來。

支援哪些架構?

x86_64 和 ARM64 Linux 主機可以編譯和執行其原生架構的二進位檔。跨架構支援(例如在 x86_64 上執行 ARM64 容器)透過 QEMU 使用者模式提供實驗性支援。macOS 和 Windows 不支援作為執行時期目標。

Dockerc 有哪些限制?

產生的二進位檔包含完整的容器檔案系統(檔案較大)、在記憶體中執行(預設無持久儲存),且不支援磁碟區掛載或 GPU 穿透。最適合 CLI 工具和無狀態工作負載。

可以從原始碼建置 Dockerc 嗎?

可以。克隆儲存庫並執行 zig build。您需要安裝 Zig 編譯器。預建置的二進位檔也可從 GitHub Releases 取得。

延伸閱讀

TAG