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
CATEGORIES