ByteNoteByteNote
Apple 容器有了原生 GUI:试试 Contained
字

字节笔记本

2026年10月5日 · 约 9 分钟读完

Apple 容器有了原生 GUI:试试 Contained

API中转
¥120

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 无障碍等细节。

Contained 的容器卡片网格与菜单栏(截图自项目仓库)

二、容器管理:玻璃卡片与七个详情页

容器列表是一组玻璃卡片网格。每张卡片可以自定义颜色、渐变、图标和昵称,带应用管理的健康徽章,还有一条可选的实时迷你图(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 视图,数据保留时长可以配置。

Contained 功能版图:容器管理、镜像构建、进阶能力与原生体验

四、和 Docker Desktop 比,差异在哪

对比项Apple Container 加 ContainedDocker Desktop
引擎来源Apple 官方开源工具第三方商业软件
架构Apple Silicon 原生虚拟化,每容器一个轻量 VMLinux 虚拟机套壳
资源占用系统级,较轻VM 加 Docker 引擎,较重
图形界面Contained,原生 SwiftUIElectron 应用
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 侧保持干净。

Contained 架构与调用链:SwiftUI 应用通过 shell out 调用 container CLI

六、谁适合用,怎么装

如果你手上有 Apple Silicon Mac,已经升级到 macOS 26,平时用容器做开发或测试,又厌倦了 Docker Desktop 的资源占用,或者单纯喜欢原生 macOS 体验,Contained 值得一试。

安装路径很直接:

bash
# 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),数据与功能描述以上游文档为准。

相关文章

分享: