Highlight
Container machine 是 Containerization 框架的新功能,在 macOS 上提供轻量级、持久化的 Linux 环境,支持自动用户映射、文件系统共享和无缝工作流集成。
核心内容
在 macOS 上开发 Linux 服务端应用时,开发者一直面临一个尴尬的选择。
传统虚拟机(VM)提供完整的 Linux 环境和持久化状态,但启动慢、资源占用高。Docker 等容器方案轻量快速,但每次启动都是全新环境,修改不持久保存。更重要的是,在这两种方案和 macOS 之间切换时,总需要处理文件同步、用户权限、路径映射等问题,打断了开发心流。
Apple 在 WWDC 25 开源的 Containerization 框架提供了一个新思路——用轻量级虚拟机实现容器级别的隔离和启动速度。在此基础上,WWDC 26 推出的 Container machine 结合了容器的轻量和虚拟机的持久性,同时通过深度 macOS 集成解决了平台切换的摩擦。
Container machine 的设计围绕四个原则:轻量快速、易于管理、状态持久、原生集成。它使用与容器相同的 OCI 镜像格式,可以瞬间启动并保持修改。自动用户映射让 Linux 环境中的用户名与 macOS 一致,文件系统自动共享,当前工作目录自动对应。这些设计让 Linux 环境感觉像是 macOS 的自然延伸。
详细内容
Container machine 建立在 Containerization 框架之上。每个 Container machine 运行在独立的轻量级虚拟机中,使用标准的 OCI 镜像,是 container 工具的一级特性。
基本命令(4:41)
container machine 命令提供概览,展示可执行的操作:
container machine
关键点:
- 显示 create、run、stop 等可用操作
- 不带参数时作为帮助信息使用
创建新的 Container machine:
container machine create --name demo --set-default alpine
关键点:
--name指定机器名称--set-default设为默认机器,后续命令无需重复指定名称alpine是常用的轻量级 Linux 镜像- 使用与容器相同的 OCI 镜像格式
在 Container machine 中执行命令:
container machine run echo hi
关键点:
- 在 Linux 环境中执行单条命令
- 命令执行完毕后返回
查看系统类型差异:
container machine run uname
关键点:
- macOS 上
uname返回 “Darwin” - Container machine 中返回 “Linux”
- 证明代码运行在 Linux 环境中
自动集成特性(5:39)
Container machine 自动镜像 macOS 的用户名和当前工作目录:
# 在 macOS 上
whoami # 返回当前用户名
pwd # 显示当前用户目录
在 Container machine 中运行相同命令,会返回相同的用户名和路径。
关键点:
- 自动用户创建(user mapping)
- 文件系统自动共享
- 工作目录保持一致
- 无需手动配置映射关系
启动交互式 shell:
container machine run
关键点:
- 不带参数时启动交互式会话
- 进入完整的 Linux shell 环境
- 可以执行多步骤操作
列出和管理机器(8:01)
container machine list
关键点:
- 显示所有 Container machine 的名称
- 显示每个机器的 IP 地址
- 显示资源使用信息
- IP 地址用于网络访问
跨平台开发工作流(7:03)
演示展示了一个典型的跨平台开发场景:用 Xcode 在 macOS 上编辑代码,在 Linux 环境中构建运行,用 Safari 测试结果。
项目结构:
Package.swift
Source/
Public/ # 静态资源
在 Container machine 中运行 Vapor 服务器:
container machine run
swift run
关键点:
- 通过共享文件系统访问项目文件
- Container machine 有独立网络
- 从 macOS 访问需要使用机器的 IP 地址
Vapor 配置需要设置为监听外部接口(使用 Container machine 的 IP 地址)。
关键点:
- 在 Xcode 中修改配置
- 修改立即在 Container machine 中可用
- 无需重启或重新加载
工作流程展示:
- 在 Xcode 中编辑代码
- 在 Container machine 中构建运行
- 在 Safari 中访问测试
- 用 Icon Composer 修改图标
- 刷新 Safari 即可看到更新
- 无需文件复制或同步操作
架构设计(1:00)
Containerization 框架提供了:
- 存储 API
- 网络 API
- 执行 API
- Linux init 系统
每个容器获得基于虚拟机的隔离,启动时间在亚秒级别。
关键点:
- 轻量级虚拟机提供性能优势
- 虚拟机级别的安全隔离
- 快速启动支持频繁切换
核心启发
-
微服务本地开发环境
- 每个微服务一个 Container machine,独立工具链和依赖
- 避免”在我的机器上能跑”问题
- 入口:
container machine create --name service-a
-
CI/CD 流水线预演
- 用 Container machine 复制生产 Linux 环境
- 本地验证部署脚本和配置
- 入口:使用生产环境的 OCI 镜像创建机器
-
跨语言项目统一开发
- macOS 处理前端,Container machine 运行后端服务
- 共享项目文件,无需同步
- 入口:安装对应语言的工具链镜像
-
工具链版本隔离
- 不同项目使用不同版本的 Node.js、Python、Go
- 无需版本管理工具,每个机器独立环境
- 入口:基于工具链版本创建专用机器
-
安全沙箱测试
- 在隔离的 Linux 环境中测试不受信任的代码
- 虚拟机级隔离保护宿主机
- 入口:
container machine run执行测试命令
关联 Session
- 121 What’s new in Siri — Agent 系统架构可能受益于容器化部署
- 242 Build agentic apps — Agentic app 的本地服务端组件可用 Container machine 开发
- 268 Optimize your app’s responsiveness — Instruments 分析本地运行的 Linux 服务
- 319 Meet Private Cloud Compute — PCC 架构中的容器化技术
- 241 Meet Foundation Models — 大型模型本地部署的容器化方案
评论
GitHub Issues · utterances