Apple container
Apple 在 2025.06.10 的 WWDC 2025 发布了针对 Apple Silicon 的 Containerization 框架,使开发者能够直接在 Mac 上创建、下载或运行 Linux 容器镜像。
GitHub:https://github.com/apple/container
了解 Containerization - WWDC25:https://developer.apple.com/cn/videos/play/wwdc2025/346/
本人尝试学习其源码,本文首先尝试编译 apple/container。
编译准备
编译遵循文件:https://github.com/apple/container/blob/0.1.0/BUILDING.md
文件指出需要:
- macOS 15 or newer and Xcode 26 Beta
- macOS 26 Beta 1 or newer
检查了Xcode 26 Beta Release Notes,指出:
Xcode 26 beta requires a Mac running macOS Sequoia 15.4 or later.
所以我们的 macOS 需要 Sequoia 15.4 or later。
本文环境:

git clone git@github.com:apple/container.git
git checkout tags/0.1.0
使用Xcode打开项目,等待加载依赖和索引,即可点击左上角开始编译:

编译产物位置
在 Xcode 中点击 Build 按钮后,Xcode 会将产物(build artifacts)放在一个叫做 DerivedData 的目录中。这个目录的位置可能有点深,具体来说:
- 打开 Xcode。
- 在菜单栏选择:Xcode > Settings(或 Preferences...,快捷键 Cmd + ,)。
- 切换到 Locations 选项卡。
- 在 Derived Data 项你会看到一个路径。
如下图,Derived Data 项就是编译产物目录。

编译产物定义
在 XCode 菜单栏「Product -> Scheme -> Edit Scheme... 」(或使用快捷键 ⌘ + < )中,可以看到一次 Build 都编译了哪些 target:

这些 Target 是在项目根目录的 Package.swift
中定义的,下面圈出了可执行文件 container
的 Target 定义,他依赖了一些库,和一些其他的 Target。

同时 path: "Sources/CLI"
指定了 Target 的目录,目录中有程序主入口,如下图圈出的位置:

可以看出,Apple 的 container 使用了和 Docker 一样的 CLI 和 Server 分离的架构设计。可执行文件 container
主要解析了命令行指令和参数,并将指令通过 XPC 的方式发给 APIServer 执行。
具体可以看这个图:
总结
apple/container 这个仓库主要是提供了命令行到虚拟Linux的连接,真正的 runtime-linux 位于 apple/containerization 中。
如果想要学习 Swift 开发命令行程序,可以阅读 apple/container 这个仓库。如果想要学习 Apple 是如何使用 Swift 在 Apple Silicon 上面做虚拟化的,可以阅读 apple/containerization 这个仓库。