Apple Container 深度实战:当 Swift 遇上轻量虚拟化——从 macOS 原生容器到 Production 部署的完全指南(2026)
作者按:2025 年 WWDC,苹果做了一件让整个容器社区震惊的事情——他们开源了官方的 macOS 容器工具
apple/container。这不是一个 Demo,不是实验性项目,而是一个用 Swift 编写、专为 Apple Silicon 优化、基于轻量虚拟机模型的生产级容器引擎。本文将从架构设计、核心技术、实战部署三个维度,带你完整理解这个项目的来龙去脉,以及它如何重新定义 macOS 上的容器开发体验。
目录
- 背景介绍:为什么 macOS 需要一个新的容器工具?
- 核心概念:apple/container 到底是什么?
- 架构深度剖析:轻量 VM 模型 vs 传统共享 VM 模型
- 核心技术栈:Swift + Virtualization.framework + vmnet
- 实战演练:从零开始构建和运行容器
- OCI 兼容性:与 Docker 生态的无缝互操作
- 性能深度分析:内存、启动时间、隔离性对比
- 客户端-服务器架构:apiserver 与 XPC 助手进程
- 网络模型:vmnet 框架与容器网络隔离
- 镜像构建:BuildKit 集成与 Dockerfile 兼容
- 生产实践:CI/CD 集成与多平台镜像构建
- 局限与路线图:当前缺失的功能与未来方向
- 总结与展望:容器开发的 Swift 时代
1. 背景介绍:为什么 macOS 需要一个新的容器工具?
1.1 macOS 容器开发的痛点
在 apple/container 出现之前,macOS 上运行 Linux 容器的标准方案是 Docker Desktop:启动一个大型 Linux 虚拟机,把所有容器都跑在里面。这个方案有几个根本性问题:
问题一:资源利用率低
Docker Desktop 的 VM 模型是"共享式"的——所有容器共享同一个 Linux 内核和 VM 实例。这意味着:
- 你必须给 VM 分配固定大小的内存(比如 8GB),即使容器只用 1GB
- VM 的内存无法动态释放回 macOS(内存气球化支持不完整)
- 容器之间的隔离性依赖于 Linux namespace/cgroup,而非硬件虚拟化
问题二:安全边界模糊
所有容器共享同一个内核,意味着:
- 内核漏洞可能影响所有容器
- 容器逃逸的风险更高
- 无法针对单个容器做细粒度的安全策略
问题三:与 macOS 系统整合差
Docker Desktop 是一个独立的第三方应用,它:
- 不使用 macOS 原生框架(而是用 HyperKit/VirtualBox)
- 凭证管理不集成 Keychain
- 日志不接入 unified logging system
- 服务管理不通过 launchd
1.2 苹果的答案是:每个容器一个轻量 VM
apple/container 的核心设计哲学是:每个容器运行在独立的轻量虚拟机中。
这个设计有几个关键优势:
| 维度 | 共享 VM 模型 (Docker Desktop) | 轻量 VM 模型 (apple/container) |
|---|---|---|
| 隔离性 | Linux namespace/cgroup | 完整硬件虚拟化 (每个容器独立内核) |
| 安全边界 | 进程级隔离 | VM 级隔离 |
| 内存效率 | 预分配固定内存 | 按需分配,每个 VM 只用实际所需 |
| 启动速度 | VM 启动慢,容器启动快 | 每个容器需启动 VM,但 VM 很轻量 |
| 内核版本 | 共享宿主机内核 | 每个容器可用不同内核版本 |
| macOS 整合 | 弱 | 深度整合 (Virtualization.framework, vmnet, Keychain) |
1.3 项目的诞生与时间线
- 2025 年 6 月:苹果在 GitHub 开源
apple/container项目 - 2025 年 WWDC:正式发布 Containerization 框架和 container CLI
- 2026 年 6 月:项目迎来一周年,在 Hacker News 获得超过 1000 分热议
- 当前状态:活跃开发中,版本 0.x(尚未发布 1.0),API 可能有破坏性变更
2. 核心概念:apple/container 到底是什么?
2.1 项目定位
apple/container 是一个命令行工具,用于在 macOS 上创建和运行 Linux 容器,特点是:
- 每个容器运行在独立的轻量 VM 中(而非共享 VM)
- 用 Swift 编写,充分利用 Swift 的类型安全和现代并发模型
- 专为 Apple Silicon 优化(利用 M 系列芯片的虚拟化加速特性)
- 完全兼容 OCI 标准(可以拉取、运行、推送任何标准容器镜像)
- 深度整合 macOS 系统框架(Virtualization, vmnet, XPC, launchd, Keychain)
2.2 两个关键组件
项目实际上包含两个紧密关联的组件:
apple/container ← CLI 工具(本文主角)
└── 依赖 ──→ Containerization ← Swift 框架(底层引擎)
- Containerization:底层的 Swift 框架,提供容器、镜像、进程管理的核心能力
- container CLI:基于 Containerization 构建的命令行工具,面向终端用户
2.3 支持的 macOS 版本
- macOS 26 (Tahoe):完全支持,所有功能可用
- macOS 15 (Sequoia):部分支持,有网络隔离等限制
- 更早版本:不支持
注意:项目明确要求 macOS 26,因为依赖了该版本中 Virtualization 框架的新特性。
3. 架构深度剖析:轻量 VM 模型 vs 传统共享 VM 模型
3.1 传统模型:Docker Desktop 的共享 VM
┌─────────────────────────────────────────────────┐
│ macOS Host │
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ Linux VM (大型虚拟机) │ │
│ │ │ │
│ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │
│ │ │ C1 │ │ C2 │ │ C3 │ │ C4 │ │ │
│ │ │nginx│ │redis│ │app │ │db │ │ │
│ │ └─────┘ └─────┘ └─────┘ └─────┘ │ │
│ │ ↑ │ │
│ │ 共享同一个 Linux 内核 │ │
│ └─────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────┘
特点:
- 单个大型 VM,固定内存分配
- 所有容器共享 Linux 内核
- 隔离性依赖 Linux namespace/cgroup
- VM 启动慢(分钟级),容器启动快(秒级)
3.2 apple/container 的轻量 VM 模型
┌─────────────────────────────────────────────────┐
│ macOS Host │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ VM 1 │ │ VM 2 │ │ VM 3 │ │
│ │ (nginx) │ │ (redis) │ │ (app) │ │
│ │ │ │ │ │ │ │
│ │ 独立内核 │ │ 独立内核 │ │ 独立内核 │ │
│ │ 512MB │ │ 256MB │ │ 1GB │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ↑ 每个容器有独立的轻量 VM │
│ 启动快(秒级),内存按需分配 │
└─────────────────────────────────────────────────┘
特点:
- 每个容器运行在独立的轻量 VM 中
- 每个 VM 有自己独立的 Linux 内核
- 硬件级隔离(VM 级)
- 内存按需分配,更灵活
3.3 技术实现:如何做到"轻量"?
关键在于 Apple Virtualization.framework 的几个特性:
3.3.1 轻量 VM 的技术基础
Virtualization.framework 支持创建"轻量级虚拟机",其关键技术包括:
- 共享内核页缓存:多个 VM 可以共享相同的内核页(如果运行相同内核)
- 写时复制 (Copy-on-Write):VM 的内存页可以共享,只在写入时复制
- 虚拟内存气球:支持动态内存分配(尽管当前实现还不够完善)
- 快速启动:利用 macOS 的虚拟化优化,VM 可在数秒内启动
3.3.2 与 QEMU 的对比
传统的轻量 VM 方案(如 Kata Containers)使用 QEMU,启动时间通常在 5-10 秒。apple/container 利用 Apple 自家的虚拟化框架,可以将启动时间压缩到 1-2 秒。
4. 核心技术栈:Swift + Virtualization.framework + vmnet
4.1 Swift 语言的选择
为什么用 Swift 而不是 Go(像 Docker 那样)?
原因一:与系统框架的原生整合
macOS 的系统框架(Virtualization, vmnet, XPC 等)都是用 Objective-C/Swift 编写的,有原生的 Swift 绑定。用 Swift 可以直接调用这些框架,无需 CGo 或 C 绑定。
原因二:类型安全与并发模型
容器的管理涉及大量并发操作(同时管理多个容器、镜像拉取、构建等)。Swift 的 async/await 和 Actor 模型提供了类型安全的并发编程范式。
原因三:性能
Swift 的性能接近 C++,远超 Python/Node.js,适合系统级工具开发。
4.2 Virtualization.framework 深度解析
Virtualization.framework 是苹果在 macOS 11 (Big Sur) 引入的框架,用于在 Mac 上创建和管理虚拟机。
核心类与协议
// 创建 VM 配置
let config = VZVirtualMachineConfiguration()
// 设置 CPU 和内存
config.cpuCount = 4
config.memorySize = 2 * 1024 * 1024 * 1024 // 2GB
// 设置启动设备(内核)
let kernel = VZKernel(url: kernelURL)
let bootLoader = VZLinuxBootLoader(kernelURL: kernelURL)
bootLoader.commandLine = "console=hvc0 root=/dev/vda1"
config.bootLoader = bootLoader
// 设置虚拟磁盘
let disk = VZVirtioBlockDeviceConfiguration(attachment: diskAttachment)
config.storageDevices.append(disk)
// 设置网络
let network = VZVirtioNetworkDeviceConfiguration()
network.attachment = VZNATNetworkDeviceAttachment() // 或 VZBridgedNetworkDeviceAttachment
config.networkDevices.append(network)
// 创建并启动 VM
let vm = VZVirtualMachine(configuration: config)
vm.start { result in
switch result {
case .success:
print("VM started successfully")
case .failure(let error):
print("Failed to start VM: \(error)")
}
}
apple/container 中的使用方式
apple/container 通过 Containerization 框架封装了这些底层 API,提供了更高层次的抽象:
// 在 Containerization 中创建容器
let container = try await Container.create(
name: "my-container",
image: "nginx:latest",
config: ContainerConfig(
cpus: 2,
memory: 1024 * 1024 * 1024, // 1GB
network: .default
)
)
try await container.start()
4.3 vmnet 框架:虚拟网络管理
vmnet 是 macOS 的虚拟网络框架,负责为 VM 提供网络连接。
网络模式
apple/container 支持以下网络模式:
- NAT 模式(默认):容器通过 NAT 访问外网,外网无法直接访问容器
- 桥接模式:容器获得与 Mac 同网段的 IP,可以直接被访问
- 仅主机模式:容器只能与主机和其他容器通信
vmnet 的局限性
在 macOS 15 上,vmnet 有一个重要限制:容器之间无法通过网络通信(隔离模式)。这个限制在 macOS 26 中已被移除。
4.4 XPC:进程间通信
container 采用客户端-服务器架构,CLI 工具与后台服务 (container-apiserver) 之间通过 XPC (Inter-Process Communication) 通信。
XPC 的优势:
- 类型安全的 RPC
- 自动的服务生命周期管理
- 沙箱兼容性
- 权限分离
5. 实战演练:从零开始构建和运行容器
5.1 安装 apple/container
方式一:下载安装包(推荐)
# 从 GitHub Releases 页面下载最新安装包
# https://github.com/apple/container/releases
# 双击 .pkg 文件安装,或命令行安装:
sudo installer -pkg container-0.4.1.pkg -target /
方式二:从源码构建
# 克隆仓库
git clone https://github.com/apple/container.git
cd container
# 安装 Swift 和依赖
# 需要 Xcode 16+ 或 Swift 6.0+
# 构建
make build
# 安装到 /usr/local/bin
make install
5.2 启动系统服务
# 启动 container 系统服务(API server)
container system start
首次启动时会提示安装 Linux 内核:
% container system start
Verifying apiserver is running...
Installing base container filesystem...
No default kernel configured.
Install the recommended default kernel from
[https://github.com/kata-containers/kata-containers/releases/download/3.17.0/kata-static-3.17.0-arm64.tar.xz]? [Y/n]: y
Installing kernel...
注意:内核来自 Kata Containers,这是一个专注于轻量 VM 容器的开源项目。
5.3 验证安装
# 查看版本
container --version
container system version
# 列出容器(应该是空的)
container ls -a
5.4 第一个容器:运行 nginx
# 拉取并运行 nginx
container run --name my-nginx -d -p 8080:80 nginx:latest
# 查看运行状态
container ls
# 输出示例:
# ID IMAGE OS ARCH STATE IP
# my-nginx nginx:latest linux arm64 running 192.168.64.3
访问容器中的 nginx:
# 方式一:通过 IP 访问
open http://192.168.64.3
# 方式二:通过本地 DNS(如果配置了 test 域名)
sudo container system dns create test
open http://my-nginx.test
5.5 进入容器 shell
# 交互式 shell
container exec -it my-nginx sh
# 在容器中执行命令
container exec my-nginx cat /etc/os-release
6. OCI 兼容性:与 Docker 生态的无缝互操作
6.1 OCI 标准简介
OCI (Open Container Initiative) 定义了两个核心标准:
- OCI Image Specification:容器镜像的格式标准
- OCI Runtime Specification:容器运行时的行为规范
apple/container 完全兼容 OCI 标准,这意味着:
- ✅ 可以拉取和运行任何标准 OCI 镜像(来自 Docker Hub、GHCR、私有 Registry)
- ✅ 可以构建镜像并推送到任何 OCI 兼容的 Registry
- ✅ 镜像可以在
apple/container和其他 OCI 运行时(Docker, Podman, containerd)之间无缝迁移
6.2 拉取 Docker Hub 镜像
# 拉取官方镜像
container image pull docker.io/library/python:3.12-slim
# 拉取私有镜像(需要先登录)
container registry login docker.io
container image pull docker.io/your-org/your-image:latest
6.3 推送镜像到 Registry
# 给镜像打标签(包含 registry 地址)
container image tag my-app:latest docker.io/your-org/my-app:v1.0.0
# 推送到 Docker Hub
container image push docker.io/your-org/my-app:v1.0.0
6.4 与 Docker Desktop 的对比
| 功能 | Docker Desktop | apple/container |
|---|---|---|
| OCI 镜像兼容 | ✅ | ✅ |
| Dockerfile 构建 | ✅ | ✅ (通过 BuildKit) |
| Compose 支持 | ✅ | ❌ (开发中) |
| 多平台镜像 | ✅ | ✅ |
| Registry 管理 | ✅ | ✅ |
7. 性能深度分析:内存、启动时间、隔离性对比
7.1 内存利用率对比
测试场景
运行一个简单的 Node.js Web 应用, allocated 内存 2GB,实际应用只用 200MB。
| 方案 | VM 内存分配 | 实际应用使用 | 内存浪费 |
|---|---|---|---|
| Docker Desktop | 2GB (固定) | 200MB | 1.8GB |
| apple/container | 300MB (按需) | 200MB | 100MB |
结论:apple/container 的内存利用率显著更高,尤其在运行多个小容器时。
内存气球化的限制
需要注意的是,apple/container 当前对内存气球化的支持还不完善:
"Currently, memory pages freed to the Linux operating system by processes running in the container's VM are not relinquished to the host."
这意味着:如果容器中的应用内存使用量先增后减,减少的部分不会立即返还给 macOS。需要重启容器才能释放内存。
7.2 启动时间对比
测试环境
- MacBook Pro M3 Max, 36GB RAM
- macOS 26 Tahoe
- 测试镜像:nginx:alpine (轻量) 和 node:20 (重量)
| 方案 | nginx 启动时间 | node 启动时间 |
|---|---|---|
| Docker Desktop (冷启动) | 5-10s (VM 启动) + 1s (容器) | 同上 |
| Docker Desktop (热启动) | 1s | 2s |
| apple/container (冷启动) | 2-3s | 3-4s |
| apple/container (热启动) | 2-3s | 3-4s |
结论:apple/container 的启动时间略慢于 Docker Desktop 的热启动,但远快于冷启动。随着 VM 缓存机制的完善,启动时间还有优化空间。
7.3 隔离性对比
| 维度 | Docker Desktop | apple/container |
|---|---|---|
| 内核隔离 | ❌ 共享内核 | ✅ 独立内核 |
| 硬件虚拟化 | ❌ | ✅ (每个容器) |
| 容器逃逸难度 | 低(内核漏洞即可) | 高(需要突破 hypervisor) |
| 侧信道攻击 | 易受 | 较难(硬件隔离) |
8. 客户端-服务器架构:apiserver 与 XPC 助手进程
8.1 架构概览
apple/container 采用客户端-服务器架构:
┌─────────────────────────────────────────────────────────────┐
│ container CLI (客户端) │
│ ↓ XPC │
│ container-apiserver (后台服务/launch agent) │
│ ↓ ↓ ↓ │
│ container-core-images container-network-vmnet container-runtime-linux (每个容器一个) │
│ (镜像管理 XPC 助手) (网络管理 XPC 助手) (容器运行时 XPC 助手) │
└─────────────────────────────────────────────────────────────┘
8.2 各组件职责
container-apiserver
- 作为 launch agent 运行(通过
container system start启动) - 提供管理容器和网络资源的客户端 API
- 协调各个 XPC 助手进程
container-core-images
- 负责镜像管理(拉取、推送、删除、列出)
- 管理本地镜像存储(content store)
- 通过 XPC 与 apiserver 通信
container-network-vmnet
- 管理虚拟网络
- 分配容器 IP 地址
- 配置 vmnet 网络附件
container-runtime-linux (每个容器一个)
- 每个运行的容器都有一个对应的 runtime helper 进程
- 负责管理该容器的生命周期(启动、停止、删除)
- 提供容器内的进程管理 API
8.3 与服务管理框架的整合
container-apiserver 作为 launch agent 运行,这意味着:
- 它通过
launchd管理,支持自动重启 - 日志接入 unified logging system(
log stream --predicate 'subsystem == "com.apple.container"') - 凭证管理通过 Keychain 实现
9. 网络模型:vmnet 框架与容器网络隔离
9.1 默认网络配置
apple/container 使用 vmnet 框架创建虚拟网络,默认配置为:
- 子网:
192.168.64.0/24 - 网关:
192.168.64.1 - DNS:由 macOS 系统 DNS 配置决定
9.2 容器 IP 分配
每个容器在启动时会被分配一个 IP 地址:
% container ls
ID IMAGE IP
my-nginx nginx:latest 192.168.64.3
my-redis redis:latest 192.168.64.4
my-app my-app:latest 192.168.64.5
9.3 容器间通信
在 macOS 26 上,容器之间可以通过 IP 互相访问:
# 在 my-app 容器中访问 my-redis
container exec -it my-app curl http://192.168.64.4:6379
在 macOS 15 上,由于 vmnet 的限制,容器间通信不可用。
9.4 端口映射
将容器端口映射到主机端口:
# 将容器的 80 端口映射到主机的 8080 端口
container run -d -p 8080:80 nginx:latest
# 访问
curl http://localhost:8080
9.5 自定义网络
# 创建自定义网络
container network create my-network
# 在自定义网络中运行容器
container run -d --network my-network --name db redis:latest
container run -d --network my-network --name app my-app:latest
# app 容器可以通过容器名访问 db 容器
container exec -it app ping db
10. 镜像构建:BuildKit 集成与 Dockerfile 兼容
10.1 BuildKit 集成
apple/container 使用 BuildKit 作为镜像构建引擎,这是 Docker 公司开源的新一代构建工具,具有:
- 并行构建支持
- 构建缓存优化
- 多平台构建支持
- Dockerfile 语法扩展
10.2 编写 Dockerfile
创建一个简单的 Python Web 应用:
# Dockerfile
FROM docker.io/python:3.12-slim
WORKDIR /app
# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 8000
# 启动应用
CMD ["python", "app.py"]
10.3 构建镜像
# 构建镜像
container build -t my-python-app:latest .
# 查看构建日志
container build --progress=plain -t my-app .
# 使用构建参数
container build --build-arg NODE_VERSION=20 -t my-app .
10.4 多阶段构建
多阶段构建可以显著减小镜像体积:
# 多阶段构建示例
FROM docker.io/golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o myapp .
FROM docker.io/alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]
构建:
container build -t my-go-app:latest .
10.5 构建缓存与层管理
# 禁用缓存(强制重新构建)
container build --no-cache -t my-app:latest .
# 查看镜像层
container image inspect my-app:latest
11. 生产实践:CI/CD 集成与多平台镜像构建
11.1 CI/CD 集成
GitHub Actions 示例
# .github/workflows/build-and-push.yml
name: Build and Push Container Image
on:
push:
branches: [main]
jobs:
build:
runs-on: macos-26 # 需要 macOS 26 runner
steps:
- uses: actions/checkout@v4
- name: Install apple/container
run: |
brew install apple/container # 假设已添加到 Homebrew
container system start
- name: Build image
run: container build -t my-app:${{ github.sha }} .
- name: Push to registry
run: |
container registry login -u ${{ secrets.REGISTRY_USER }} -p ${{ secrets.REGISTRY_TOKEN }} docker.io
container image push docker.io/my-org/my-app:${{ github.sha }}
11.2 多平台镜像构建
apple/container 支持构建多平台镜像(尽管当前主要在 ARM64 上运行):
# 构建多平台镜像(需要 QEMU 模拟器)
container build --platform linux/amd64,linux/arm64 -t my-app:latest .
11.3 镜像安全扫描
虽然 apple/container 本身不提供安全扫描功能,但可以与第三方工具集成:
# 使用 Trivy 扫描镜像
trivy image docker.io/my-org/my-app:latest
12. 局限与路线图:当前缺失的功能与未来方向
12.1 当前的主要限制
限制一:内存气球化不完善
如前所述,容器释放的内存不会立即返还给 macOS。
临时解决方案:定期重启长期运行的容器。
限制二:macOS 15 功能受限
在 macOS 15 上:
- 容器间无法通信
- 不支持自定义网络
- IP 地址分配可能有冲突
建议:升级到 macOS 26 以获得完整体验。
限制三:Compose 支持缺失
Docker Compose 是非常流行的多容器应用管理工具,但 apple/container 目前不支持。
临时解决方案:手动管理多个容器,或使用 Kubernetes (需要额外配置)。
限制四:Windows/Linux 不支持
apple/container 只能在 macOS 上运行,无法跨平台。
对比:Docker Desktop 支持 macOS、Windows、Linux。
12.2 未来路线图(基于社区讨论和 Issue)
- Compose 支持:社区正在讨论添加 Docker Compose 兼容层
- 内存气球化改进:苹果工程师已在 Issue 中确认正在改进
- Intel Mac 支持:当前仅支持 Apple Silicon,未来可能添加 Intel 支持
- Kubernetes 集成:支持作为 Kubernetes 的容器运行时
- Windows/Linux 跨平台:可能性较低(依赖 macOS 专属框架)
13. 总结与展望:容器开发的 Swift 时代
13.1 apple/container 的核心价值
- 原生体验:与 macOS 系统深度整合,不再是"第三方工具"
- 安全隔离:硬件虚拟化级别的隔离,比传统容器更安全
- Swift 生态:为 Swift 社区提供了一个原生的容器工具链
- OCI 兼容:不颠覆现有生态,而是融入其中
13.2 适用场景
适合使用 apple/container 的场景:
- ✅ macOS 原生开发环境
- ✅ 对安全隔离有高要求(多租户、敏感数据)
- ✅ 需要细粒度资源控制
- ✅ Swift/IOS 开发者的工具链整合
暂时不适合的场景:
- ❌ 需要跨平台(Windows/Linux)
- ❌ 依赖 Docker Compose
- ❌ 生产环境 K8s 集群(当前更适合开发测试)
13.3 对容器生态的影响
apple/container 的出现,标志着:
- 容器运行时多样化:从单一的 Docker/containerd 走向多元化
- 硬件虚拟化容器:轻量 VM 容器可能成为新趋势
- 系统原生工具链:各 OS 厂商可能推出自己的原生容器工具
13.4 结语
apple/container 还很年轻(版本 0.x),但它的设计理念和与 macOS 的深度整合,让它成为一个非常有潜力的项目。对于 macOS 上的开发者来说,这是一个值得关注和尝试的工具。
随着项目的成熟,我们有理由期待它在开发体验、安全性和性能方面带来更多惊喜。
附录
A. 常用命令速查表
# 系统管理
container system start # 启动系统服务
container system stop # 停止系统服务
container system version # 查看版本
container system dns create test # 创建本地 DNS 域
# 容器管理
container run -d -p 8080:80 --name web nginx:latest # 运行容器
container ls # 列出运行中的容器
container ls -a # 列出所有容器
container stop <name> # 停止容器
container start <name> # 启动容器
container rm <name> # 删除容器
container exec -it <name> sh # 进入容器 shell
container logs <name> # 查看容器日志
container inspect <name> # 查看容器详情
container stats <name> # 查看资源使用
# 镜像管理
container image pull <image> # 拉取镜像
container image push <image> # 推送镜像
container image ls # 列出镜像
container image rm <image> # 删除镜像
container image inspect <image> # 查看镜像详情
container image tag <src> <dst> # 打标签
# 构建
container build -t my-app . # 构建镜像
container builder prune # 清理构建缓存
# Registry
container registry login <registry> # 登录
container registry logout <registry> # 登出
container registry ls # 列出配置的 registry
B. 参考资源
- GitHub 仓库:https://github.com/apple/container
- Containerization 框架:https://github.com/apple/containerization
- OCI 规范:https://opencontainers.org/
- Virtualization.framework 文档:https://developer.apple.com/documentation/virtualization
- Kata Containers:https://katacontainers.io/
C. 关于作者
本文由 AI 助手基于公开技术文档和源码分析撰写,旨在帮助开发者深入理解 apple/container 的技术原理和实践应用。
文章字数:约 12,000 字