ContainerManager 是一款原生 macOS 桌面应用,为 Apple 官方的 Containerization 框架提供直观的图形化管理界面。无需依赖 Docker Desktop,直接通过 container CLI 管理容器的完整生命周期。
核心特性:
- 容器生命周期管理(创建、启动、停止、重启、删除)
- 镜像管理(本地浏览、远程搜索、拉取、构建)
- 数据卷管理(创建、检查、清理无引用卷)
- 镜像仓库配置与搜索(Docker Hub、GHCR、GCR 等预设支持)
- 容器内嵌终端(基于 SwiftTerm)
- 实时资源监控(CPU / 内存)
- 亮色 / 暗色主题切换
| 项目 | 要求 |
|---|---|
| macOS | 26 (Tahoe) 或更高版本 |
| Xcode | 26+(编译所需) |
| Swift | 6.2+ |
| 运行时 | Apple Containerization CLI (container) |
Apple Containerization 框架仅在 macOS 26+ 上可用。
确保已安装 Apple Containerization 框架并配置好 container CLI 工具。
git clone https://github.com/zxxryu/ContainerManager.git
cd ContainerManager方式一:Xcode 构建(推荐)
# 直接打开 Xcode 工程
open ContainerManager.xcodeproj
# 或使用命令行构建
xcodebuild -project ContainerManager.xcodeproj \
-scheme ContainerManager \
-configuration Release \
build方式二:一键构建 DMG 安装包
./build_app.sh构建产物:
App Bundle:.build/xcode/Build/Products/Release/ContainerManager.appDMG 安装包:dist/ContainerManager-{版本号}.dmg
构建完成后直接运行 App Bundle,或将 DMG 中的 ContainerManager.app 拖拽到 /Applications 目录。
ContainerManager-AppBundle/
├── ContainerManager/
│ ├── ContainerManagerApp.swift # App 入口,窗口与菜单配置
│ ├── ContentView.swift # 主视图,NavigationSplitView 布局
│ ├── Assets.xcassets/ # 图标资源
│ ├── Resources/
│ │ └── Info.plist # 应用配置信息
│ ├── Models/ # 数据模型
│ │ ├── ContainerModels.swift # 容器、端口映射、资源使用等
│ │ ├── ImageModels.swift # 镜像、搜索结果、拉取进度等
│ │ ├── RegistryModels.swift # 仓库配置、预设仓库
│ │ ├── SystemModels.swift # 系统状态、网络配置、错误类型
│ │ ├── TaskModels.swift # 异步任务跟踪
│ │ └── VolumeModels.swift # 数据卷、日志模式
│ ├── Services/ # 服务层
│ │ ├── ContainerCLIService.swift # container CLI 封装(核心)
│ │ ├── ConfigurationService.swift # 配置持久化(UserDefaults)
│ │ └── RegistrySearchService.swift # 仓库搜索(OCI / Docker Hub API)
│ ├── ViewModels/ # ViewModel 层
│ │ ├── ContainerViewModel.swift # 容器列表管理
│ │ ├── ImageViewModel.swift # 镜像管理
│ │ ├── RegistryViewModel.swift # 仓库配置管理
│ │ ├── VolumeViewModel.swift # 数据卷管理
│ │ └── TaskManager.swift # 全局任务管理器
│ └── Views/ # SwiftUI 视图
│ ├── Containers/ # 容器相关视图
│ ├── Images/ # 镜像相关视图
│ ├── Volumes/ # 数据卷相关视图
│ ├── Registries/ # 仓库相关视图
│ ├── Settings/ # 设置页面
│ └── Shared/ # 共享 UI 组件
├── Package.swift # SwiftPM 依赖声明
├── project.yml # XcodeGen 工程配置
├── build_app.sh # 一键构建 + DMG 打包脚本
├── regenerate_project.sh # XcodeGen 重新生成工程
└── dist/ # 构建产物(DMG)
采用 MVVM (Model-View-ViewModel) 架构,基于 SwiftUI 的 @Observable 宏实现数据绑定。
┌─────────────────────────────────────────────────┐
│ Views (SwiftUI) │
│ ContainerListView / ImageView / VolumeListView │
│ RegistryListView / SettingsView / Shared │
└────────────────────┬────────────────────────────┘
│
┌────────────────────▼────────────────────────────┐
│ ViewModels (@Observable) │
│ ContainerVM / ImageVM / VolumeVM │
│ RegistryVM / TaskManager │
└────────────────────┬────────────────────────────┘
│
┌────────────────────▼────────────────────────────┐
│ Services │
│ ContainerCLIService ──► container CLI (Process) │
│ ConfigurationService ──► UserDefaults │
│ RegistrySearchService ──► HTTP (OCI / Docker) │
└──────────────────────────────────────────────────┘
应用通过 Process 调用 container CLI 与容器运行时交互,CLI 输出支持 JSON、JSON Lines、表格等多种格式的自动解析。
- 列表展示容器状态、端口映射、资源使用(CPU / 内存)
- 按状态筛选(全部 / 运行中 / 已停止),支持搜索
- 创建容器:镜像选择、环境变量、端口映射、卷挂载、资源限制、平台选择
- 完整生命周期操作:启动、停止、重启、强制终止、删除
- 容器内嵌终端(底部面板 / 弹窗)
- 实时日志查看(启动日志 / 运行日志)
- 容器详情检查(网络、环境变量、卷挂载、标签等)
- 容器克隆(基于已有容器配置创建新容器)
- 本地镜像列表(仓库、标签、大小、平台)
- 远程镜像搜索(支持 Docker Hub 专有搜索 API 及 OCI Catalog)
- 拉取镜像(实时进度显示)
- 从 Dockerfile 构建镜像
- 支持选择目标仓库拉取
- 命名卷 / 匿名卷分类展示
- 创建卷(支持容量、日志模式、标签、驱动选项)
- 卷详情检查(挂载点、驱动选项、原始 JSON)
- 批量删除与清理无引用卷
- 磁盘使用统计
- 预设仓库:Docker Hub、GHCR、GCR、AWS ECR、Quay.io、阿里云、腾讯云、华为云
- 自定义仓库添加与编辑
- 仓库连接测试(延迟检测)
- 仓库登录认证
- OCI 标准目录浏览
| 设置项 | 说明 |
|---|---|
| 自动启动系统服务 | 启动时自动启动 Containerization 服务 |
| 刷新间隔 | 1-30 秒可调 |
| 仅显示运行中的容器 | 快速筛选 |
| 默认 CPU / 内存 | 新建容器的默认资源配置 |
| 主题 | 跟随系统 / 浅色 / 深色 |
| 依赖 | 版本 | 用途 |
|---|---|---|
| Apple Containerization | >= 0.34.0 | Apple 官方容器管理框架 |
| SwiftTerm | 1.0.0 | 终端模拟器,容器内终端交互 |
| 快捷键 | 功能 |
|---|---|
⌘ N |
新建容器 |
⌘ ⇧ P |
拉取镜像 |
⌘ R |
刷新列表 |
⌘ 1 / ⌘ 2 / ⌘ 3 |
切换侧边栏视图 |
⌘ , |
打开设置 |
如果需要重新生成 Xcode 工程:
brew install xcodegen
./regenerate_project.sh工程使用 project.yml 通过 XcodeGen 定义,支持 SwiftPM 依赖管理。Package.swift 声明了所有外部依赖,构建时自动解析。
本项目基于 MIT License 开源。
Built with ❤️ using SwiftUI and Apple Containerization
