Open Source

Apple Container:在 Mac 上以 VM 形式运行 Linux 容器的开源工具

Apple Container 是 Apple 开发的开源 CLI 工具,用于在 Apple Silicon Mac 上以轻量级虚拟机形式创建和运行 Linux 容器。

Keeping this site alive takes effort — your support means everything.
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分! 無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!
Apple Container:在 Mac 上以 VM 形式运行 Linux 容器的开源工具

多年来,在 macOS 上运行 Linux 容器一直需要一个 VM 层——Docker Desktop 的 Linux VM、Podman 的 podman-machine 或 Lima 基于 QEMU 的方法。这些解决方案可行,但会带来开销和复杂性。Apple Container 采取根本不同的方法,使用 Apple 原生的 Virtualization.framework 将 Linux 容器直接作为轻量级虚拟机运行,消除了单独的 VM 管理层。

Apple Container 以 Apache 2.0 许可证作为开源项目发布,代表了 Apple 正式进入容器工具领域。该工具使用 Swift 编写,提供了一个简洁的命令行界面,用于在 Apple Silicon Mac 上创建、运行和管理 Linux 容器作为 VM。它利用与 macOS 自身虚拟化功能相同的 Virtualization.framework,确保了原生性能和与主机操作系统的紧密集成。

该项目受到了开发者社区的广泛关注,特别是那些长期寻求能与 Apple 自身工具集成质量相匹配的第一方容器运行时的 macOS 用户。通过基于 Virtualization.framework 而非 QEMU 或 HyperKit 构建,Apple Container 在文件系统操作、网络和设备访问方面实现了显著更好的性能。


Apple Container 的架构与传统方法相比如何?

Apple Container 与传统 macOS 容器运行时之间的架构差异是显著的,反映了根本不同的设计理念。

graph LR
    subgraph "传统方法 (Docker Desktop)"
        A[Docker CLI] --> B[Docker Engine]
        B --> C[Linux VM\n(经由 HyperKit/QEMU)]
        C --> D[VM 中的容器]
    end
    subgraph "Apple Container 方法"
        E[applectl CLI] --> F[Virtualization.framework]
        F --> G[轻量级 Linux VM]
        G --> H[原生 VM 中的容器]
    end

在传统方法中,容器运行时(Docker Engine、containerd)在一个 Linux VM 内部运行,而该 VM 本身通过一个 hypervisor 在 Mac 上运行。这意味着每个容器操作都要经过两个虚拟化层。Apple Container 完全跳过了中间层:每个容器都是自己的轻量级 VM,由 Virtualization.framework 直接创建和管理,没有中间运行时。


Apple Container 提供哪些功能?

Apple Container 内置一组丰富的功能,旨在使 macOS 上的 Linux 容器管理感觉原生且无缝。

功能描述优点
VM 原生容器每个容器作为专属 Linux VM 运行性能、隔离性
Rosetta 2 支持在 Apple Silicon 上运行 x86_64 Linux 二进制文件兼容性
文件共享主机到 VM 的目录挂载数据交换
端口转发自动从主机映射端口到 VM服务访问
卷管理持久化的 VM 存储数据持久性
快照/恢复VM 状态捕获和恢复开发工作流程
网络隔离每个 VM 的网络配置安全性、测试
系统资源限制每个 VM 的 CPU 和内存分配资源管理

这些功能的结合使 Apple Container 不仅适用于开发,也适用于测试、CI/CD,甚至是在 macOS 基础设施上的轻量级生产工作负载。


Apple Container 如何处理网络?

容器环境中的网络传统上很复杂,特别是在主机和容器之间建立桥接时。Apple Container 通过 Virtualization.framework 的原生网络支持简化了这一点。

网络功能实现方式使用案例
端口转发自动 NAT 与端口映射暴露容器服务
仅主机网络隔离的 VM 网络开发和测试
共享网络VM 共享主机的网络堆栈默认模式
桥接网络VM 在同一子网上多容器通信
自定义 DNS每个 VM 的 DNS 配置内部服务发现

网络模型设计为开箱即用,无需配置——运行 applectl run nginx 会自动将端口 80 映射到一个可用的主机端口、创建共享网络接口并设置 DNS 解析。高级用户可以通过配置文件或 CLI 标志来自定义网络。


Apple Container 与其他 macOS 容器工具相比如何?

macOS 上的容器运行时领域包括几个成熟的选择,各有不同的取舍。

工具底层技术性能集成度开源
Apple ContainerVirtualization.framework原生深度 macOS是 (Apache 2.0)
Docker DesktopHyperKit/QEMU中等良好部分
PodmanQEMU/podman-machine中等良好
LimaQEMU良好中等
OrbStack自定义 hypervisor极佳深度 macOS

Apple Container 的关键优势在于它使用 Apple 自己的原生虚拟化框架,这意味着它可以从每次 macOS 更新中受益,无需第三方内核扩展或 hypervisor 组件。取舍在于它目前仅支持 Apple Silicon Mac,不支持 Intel 架构的 Mac。


FAQ

什么是 Apple Container? Apple Container 是 Apple 开发的开源 CLI 工具,用于在 Apple Silicon Mac 上以轻量级虚拟机形式创建和运行 Linux 容器,使用 Virtualization.framework 达到原生性能。

Apple Container 与 Docker Desktop 有何不同? Apple Container 使用 Apple 的 Virtualization.framework 将容器以原生 VM 形式运行,而不是通过运行容器运行时的 Linux VM。这提供了更紧密的 macOS 集成、更好的性能和原生 Apple Silicon 支持。

Apple Container 支持哪些 Linux 发行版? Apple Container 支持多种 Linux 发行版,包括 Ubuntu、Fedora、Alpine 和 Debian。它可以自动下载和缓存根文件系统镜像,并支持自定义镜像。

Apple Container 是开源的吗? 是的,Apple Container 完全以 Apache 2.0 许可证开源。源代码可在 GitHub 上获取,社区可以贡献改进和扩展功能。

Apple Container 的系统要求是什么? Apple Container 需要配备 Apple Silicon(M1、M2、M3、M4 系列)且运行 macOS 14.0 或更新版本的 Mac,因为它依赖于较新版 macOS 中引入的 Virtualization.framework API。


延伸阅读

TAG
CATEGORIES