当前位置:首页>Linux>Mac 上跑 Linux 容器不再靠 Docker!苹果开源 container,每个容器独立虚拟机VM

Mac 上跑 Linux 容器不再靠 Docker!苹果开源 container,每个容器独立虚拟机VM

  • 2026-09-08 21:08:00
Mac 上跑 Linux 容器不再靠 Docker!苹果开源 container,每个容器独立虚拟机VM

Apple 近期在 GitHub 上开源了一个名为 container 的工具,用于在 Mac 上创建和运行 Linux 容器。该项目用 Swift 编写,专门针对 Apple silicon 进行了优化,目前已获得 41.5k star。

仓库地址:https://github.com/apple/container

什么是 container?

container 是一个命令行工具,可以让你在 Mac 上构建、运行 Linux 容器,并与 OCI 标准容器镜像仓库交互。它支持拉取和推送 OCI 兼容的容器镜像,你构建出来的镜像也能在其他任何 OCI 兼容的工具中运行。

底层实现上,container 依赖 Apple 同步开源的 Containerization Swift package,负责容器、镜像和进程的底层管理。

与 Docker Desktop 的核心区别

一般在 macOS 上跑 Linux 容器,通常的做法是启动一个共享的 Linux 虚拟机,把所有容器都塞进去跑。container 的做法不同——每创建一个容器,就启动一个独立的轻量虚拟机。这个设计带来了几个具体的好处:

安全性:每个容器拥有完整 VM 级别的隔离,使用的核心工具和动态库集合极小,攻击面大幅缩减。

隐私性:使用 container 挂载宿主机数据时,只需把必要的数据挂进对应的 VM。用共享 VM 的方案时,你需要把所有"将来可能用到"的数据一次性挂进 VM,再在容器内选择性挂载。

性能:container 创建的容器比完整 VM 占用的内存更少,启动时间与跑在共享 VM 里的容器相当。

系统架构

container 深度集成了 macOS 的核心框架:

  • Virtualization framework:管理 Linux 虚拟机及其挂载的设备
  • vmnet framework:管理容器接入的虚拟网络
  • XPC:进程间通信
  • Launchd:服务管理
  • Keychain services:镜像仓库凭据存取
  • 统一日志系统:应用日志

在进程组织上,CLI 通过客户端库与 container-apiserver 通信。container-apiserver 是一个 launch agent,执行 container system start 后启动,container system stop 后终止。它启动时会拉起两个 XPC helper:container-core-images 负责镜像管理和本地内容存储,container-network-vmnet 负责虚拟网络。每创建一个容器,都会再启动一个 container-runtime-linux helper,专门暴露该容器的管理 API。

安装与使用

系统要求:需要 Apple silicon Mac,官方支持 macOS 26,不支持更旧版本的 macOS(macOS 15 可以运行,但存在网络隔离、多网络、IP 地址分配等已知限制,官方不会修复)。

从 GitHub release 页面 下载最新的签名安装包,双击安装,按提示输入管理员密码(安装目标路径为 /usr/local)。

安装完成后,启动系统服务:

container system start

升级时需先停止服务,再执行更新脚本:

container system stop/usr/local/bin/update-container.shcontainer system start

如需降级,先卸载再指定版本安装:

/usr/local/bin/uninstall-container.sh -k   # -k 保留用户数据/usr/local/bin/update-container.sh -v 0.3.0

当前限制

内存回收:macOS Virtualization framework 对 memory ballooning 的支持不完整。VM 内 Linux 进程释放的内存页目前无法归还给宿主机。如果跑了大量内存密集型容器,可能需要定期重启容器来降低内存占用。

项目现状

该项目目前处于活跃开发阶段。在达到 1.0.0 之前,稳定性仅在 patch 版本之间有保障(如 0.1.1 到 0.1.2),minor 版本升级可能包含 breaking change。

项目基于 Apache-2.0 协议开源,欢迎贡献。

仓库地址:https://github.com/apple/container

最新文章

随机文章