
字节笔记本
2026年10月5日 · 约 9 分钟读完
Apple 容器有了原生 GUI:试试 Contained
Apple 官方为 Mac 带来了自己的容器方案:开源工具 container(github.com/apple/container),用 Swift 编写、专为 Apple Silicon 优化,通过轻量级虚拟机直接运行 Linux 容器,每个容器一个独立轻量 VM,兼容 Docker Hub 等 OCI 镜像源。它有官方出身和不错的性能,但它只有命令行。对习惯图形界面的开发者来说,日常管理容器总归少了点顺手的感觉。
Contained 就是来补上这块拼图的。
一、Contained 是什么
Contained(仓库 tdeverx/contained-app)是 Apple container CLI 的原生 macOS 图形前端,用 SwiftUI 从零构建,整体采用 macOS 26 的 Liquid Glass 设计语言。按项目 README 的定位,它是容器的一块 Liquid Glass 控制面板:既覆盖 Docker Desktop 的日常工作流,也覆盖 container 命令行更完整的命令面,全程不离开 Mac 原生观感。
核心价值一句话:Apple 原生容器引擎,配一个原生 GUI,不装 Docker Desktop。
项目目前功能已经齐备,正处于打磨 1.0 的阶段,README 里挂着一份逐屏验收清单,逐项检查 Liquid Glass 一致性、空态与错误态、键盘与 VoiceOver 无障碍等细节。

二、容器管理:玻璃卡片与七个详情页
容器列表是一组玻璃卡片网格。每张卡片可以自定义颜色、渐变、图标和昵称,带应用管理的健康徽章,还有一条可选的实时迷你图(sparkline),CPU、内存、网络、磁盘的指标随手可见。启动、停止、重启这些生命周期操作直接在卡片上完成。
点进单个容器有七个详情标签:概览、日志、终端(基于 SwiftTerm)、统计、历史、文件和检查(Inspect)。过去要开好几个终端窗口敲 docker 命令才能看到的日志、进程状态和文件内容,现在都在同一个原生窗口里。
三、镜像、构建与进阶能力
镜像侧的能力相当完整:拉取镜像,内置 Docker Hub 搜索;构建镜像,BuildKit 日志流式输出;标签、推送、保存、加载一应俱全,还支持文件系统导出。卷、网络、镜像仓库登录、系统服务控制也有对应界面,外加一个专门的清理中心(Prune Center)。
真正让 Contained 区别于「套壳 CLI」的是进阶能力:
- 模板库:保存常用的运行配置,一键复用,还内置了一批起始模板;
- Compose 导入:导入 compose.yaml 后,为每个 service 生成预填好的可编辑运行表单;
- 统一编辑表单:把 container run 的参数映射成可视化表单,CPU 和内存可以按宿主机的实际上限做约束,还有「露出命令行」的实时预览,边点边学 CLI;
- 应用级重启与健康检查:container CLI 目前没有原生的 --restart 和 healthcheck,Contained 在应用层自己实现了这两件事;
- 持久历史:SwiftData 存储事件与指标,每个容器有 History 标签,全局还有用 Swift Charts 绘制的 Activity 视图,数据保留时长可以配置。

四、和 Docker Desktop 比,差异在哪
| 对比项 | Apple Container 加 Contained | Docker Desktop |
|---|---|---|
| 引擎来源 | Apple 官方开源工具 | 第三方商业软件 |
| 架构 | Apple Silicon 原生虚拟化,每容器一个轻量 VM | Linux 虚拟机套壳 |
| 资源占用 | 系统级,较轻 | VM 加 Docker 引擎,较重 |
| 图形界面 | Contained,原生 SwiftUI | Electron 应用 |
| OCI 镜像兼容 | 支持 | 支持 |
| Compose | 经 Contained 导入 | 原生支持 |
| 费用 | 工具与 GUI 都免费 | 个人免费,企业需付费订阅 |
需要说明的是,两者并不是完全等价的替代关系:Docker Desktop 的生态更成熟,功能面更广;Apple Container 胜在系统级轻量、启动快和原生体验,很适合开发、测试这类日常场景。如果你的工作流深度依赖 Docker Desktop 的高级特性,迁移前值得先评估一遍自己的容器栈。
五、技术架构:壳调 CLI 而非私有框架
代码按 Swift Package 组织成两个 target:
- ContainedCore(库):模型、container CLI 封装、宽容解码器和命令构建器。解码器以捕获的真实 CLI 输出做校验基准,整个库不含 UI,全部可测试;
- Contained(可执行体):SwiftUI 应用本体,包括设计系统、可观察状态仓库、功能视图和 SwiftData 历史存储。
核心设计是 shell out:Contained 不链接任何私有框架,而是调用 container CLI 并解析它的 JSON 输出。好处有三点:跨 CLI 版本升级更稳健;行为容易验证,测试直接对着真实 CLI 输出做;不依赖 Apple 未公开的 API。
另一个值得留意的细节:个性化数据(颜色、图标、昵称)只存在应用本地,不会写回容器 label,CLI 侧保持干净。

六、谁适合用,怎么装
如果你手上有 Apple Silicon Mac,已经升级到 macOS 26,平时用容器做开发或测试,又厌倦了 Docker Desktop 的资源占用,或者单纯喜欢原生 macOS 体验,Contained 值得一试。
安装路径很直接:
# 1. 安装 Apple container CLI(1.0.0 及以上,需在 PATH 中)
# 参考官方仓库:https://github.com/apple/container
# 2. 下载 Contained 的 DMG 安装包
# https://github.com/tdeverx/contained-app/releases应用内通过 Sparkle 提供三条更新通道:Stable、Beta 和 Nightly,分别对应正式版、预发布版和每次提交后的最新构建,可以按胆量选择。
想动手改代码的话,它本身就是一个 Swift Package,用 Xcode 直接打开 Package.swift 即可,仓库自带的 bundle.sh 脚本能组装出可运行的 Contained.app。
最后必须提醒:Contained 采用 PolyForm Noncommercial License 1.0.0。源码公开,可以自由使用、修改和分享,但仅限非商业用途,项目名称与品牌也已保留。个人开发者放心用,商业场景需要另作安排。
小结
一句话总结:Contained 是 Apple container CLI 的原生 SwiftUI 图形前端,Liquid Glass 风格,覆盖 Docker Desktop 的日常功能,让 Apple Silicon 上管理 Linux 容器多了一个更轻、更原生的选择。
这类「用系统原生框架替代 Electron 重型应用」的做法,正在成为 macOS 工具圈的常见路径,而 Contained 替代的不只是一个界面,还有 Docker Desktop 在 Mac 上承担的角色。
本文信息来自 Contained 项目仓库(github.com/tdeverx/contained-app)与 Apple container 项目页(github.com/apple/container),数据与功能描述以上游文档为准。



