导读: 2026 年,Apple 正式开源了
container项目 —— 一个专为 Apple Silicon Mac 打造的原生 Linux 容器运行方案。它用 Swift 编写,利用 macOS 内置虚拟化能力,以极轻量级的虚拟机运行 OCI 兼容容器。本文将带你从零开始,了解 Apple Container 与 Docker Desktop 的区别、安装部署、日常使用,以及进阶实战。
Apple Container 是什么?
container 是 Apple 官方开源的一个 CLI 工具,用于在 Mac 上创建和运行 Linux 容器。它的核心特点是:
- 原生 Swift 编写,深度适配 Apple Silicon(M 系列芯片)
- 基于轻量级虚拟机,利用 macOS 26 的虚拟化和网络增强
- OCI 兼容,可以拉取、构建、推送标准容器镜像,与 Docker Hub、GitHub Container Registry 等无缝衔接
- 开源免费,GitHub 仓库 欢迎社区贡献
与 Docker Desktop 的区别
| 特性 | Apple Container | Docker Desktop (Mac) |
|---|---|---|
| 底层技术 | macOS 原生虚拟化 + Swift | Linux VM (HyperKit/VMware) |
| 资源开销 | 极轻量,按需分配 | 较重,常驻后台进程 |
| 网络集成 | 内置 DNS 服务,容器可直接通过 hostname 访问 | 需要端口映射或复杂网络配置 |
| Apple Silicon 优化 | 原生 ARM64 支持 | Rosetta 2 转译 AMD64 镜像 |
| 开源 | ✅ 完全开源 (Apache 2.0) | ❌ 商业软件 |
| 系统要求 | macOS 26 + Apple Silicon | macOS 12+ (Intel/Apple Silicon) |
简单来说,如果你用的是 Apple Silicon Mac 并且主要需求是在本地跑 Linux 容器做开发,Apple Container 是一个更轻量、更原生、更透明的选择。
系统要求
⚠️ Apple Container 需要: - Mac with Apple Silicon(M1/M2/M3/M4) - macOS 26 或更高版本 - 不支持 Intel Mac,也不支持旧版 macOS
安装 Apple Container
方式一:通过安装包安装(推荐)
- 前往 GitHub Release 页面
- 下载最新的
.pkg签名安装包 - 双击
.pkg文件,按照安装向导完成安装 - 安装过程中需要输入管理员密码,安装路径为
/usr/local
方式二:从源码编译
如果你想体验最新版或参与贡献,可以从源码编译:
# 克隆仓库
git clone https://github.com/apple/container.git
cd container
# 参考 BUILDING.md 进行编译
# 需要 Xcode Command Line Tools 和 Swift 5.10+
启动系统服务
安装完成后,启动 container 的系统服务:
container system start
首次启动时,container 会自动提示你安装推荐的 Linux 内核(基于 Kata Containers):
$ 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...
输入 y 即可自动下载安装。安装完成后,验证服务是否正常运行:
$ container list --all
ID IMAGE OS ARCH STATE IP
看到空列表说明服务已就绪,随时可以创建容器了。
快速上手:第一个容器
1. 构建容器镜像
让我们从一个 Dockerfile 开始,构建一个简单的 Python Web 服务器镜像。
# 创建工作目录
mkdir web-test && cd web-test
# 创建 Dockerfile
cat > Dockerfile << 'EOF'
FROM docker.io/python:alpine
WORKDIR /content
RUN apk add curl
RUN echo '<!DOCTYPE html><html><head><title>Hello</title></head><body><h1>Hello from Apple Container!</h1></body></html>' > index.html
CMD ["python3", "-m", "http.server", "80", "--bind", "0.0.0.0"]
EOF
# 构建镜像
container build --tag web-test --file Dockerfile .
构建完成后,查看本地镜像列表:
$ container image list
NAME TAG DIGEST
python alpine b4d299311845
web-test latest 25b99501f174
2. 运行容器
container run --name my-web-server --detach --rm web-test
参数说明:
- --name:给容器起个好记的名字
- --detach:后台运行,不阻塞当前终端
- --rm:容器停止后自动清理
查看运行中的容器:
$ container ls
ID IMAGE OS ARCH STATE IP
buildkit ghcr.io/apple/... linux arm64 running 192.168.64.2
my-web-server web-test:latest linux arm64 running 192.168.64.3
3. 访问容器中的 Web 服务
container 内置了 DNS 服务,可以通过 hostname 直接访问容器。先配置一个本地域名:
sudo container system dns create test
配置完成后,访问容器的两种方式:
# 方式一:通过 IP 地址
open http://192.168.64.3
# 方式二:通过 hostname(更优雅!)
open http://my-web-server.test
这就是 container 的一大亮点 —— 无需手动映射端口,DNS 自动解析容器名到对应 IP。
4. 查看容器资源消耗
# 查看实时统计(类似 top)
container stats my-web-server
# 查看单次快照
container stats --no-stream my-web-server
输出示例:
Container ID Cpu % Memory Usage Net Rx/Tx Block I/O Pids
my-web-server 0.23% 12.45 MiB / 1.00 GiB 856 KiB / 1.2 KiB 2.10 MiB / 512 KiB 2
进阶功能:日常开发工作流
进入容器执行命令
# 在运行中的容器里执行命令
container exec my-web-server cat /content/index.html
# 进入容器的交互式 Shell
container exec -it my-web-server /bin/sh
管理容器生命周期
# 停止容器
container stop my-web-server
# 启动已停止的容器
container start my-web-server
# 查看容器日志
container logs my-web-server
# 强制终止容器
container kill my-web-server
# 删除容器
container rm my-web-server
# 查看容器详细信息
container inspect my-web-server
镜像管理
# 列出所有本地镜像
container image list
# 从 Docker Hub 拉取镜像
container image pull ubuntu:latest
# 给镜像打标签
container image tag web-test:latest my-registry.example.com/web-test:v1.0
# 推送镜像到远程 Registry
container image push my-registry.example.com/web-test:v1.0
使用 Registry 配置
container 支持配置多个 Registry 源:
# 列出已配置的 Registry
container registry list
# 添加私有 Registry
container registry add --name my-private --url https://my-registry.example.com
实战场景
场景一:本地开发环境
用 container 搭建本地开发环境,无需 Docker Desktop 的额外开销:
# 拉取 PostgreSQL 镜像
container image pull postgres:17-alpine
# 运行数据库容器
docker run --name dev-db --detach --env POSTGRES_PASSWORD=dev123 postgres:17-alpine
# 运行你的应用容器并链接数据库
container run --name my-app --detach my-app-image
通过 DNS 域名,你的应用可以直接通过 dev-db.test 访问数据库,无需配置端口映射。
场景二:CI/CD 本地验证
在推送代码前,用 container 模拟 CI 环境:
# 构建 CI 环境的镜像
container build --tag ci-test --file Dockerfile.ci .
# 运行测试
docker run --rm ci-test make test
# 测试通过后构建生产镜像
container build --tag my-app:prod .
场景三:微服务调试
用 container 快速启动一组微服务用于本地调试:
# 配置域名
sudo container system dns create local
# 启动 Redis 缓存
container run --name cache --detach redis:7-alpine
# 启动消息队列
container run --name broker --detach rabbitmq:3-management
# 启动你的应用
container run --name api-service --detach --env REDIS_URL=redis://cache.local:6379 my-api
每个服务都可以通过 cache.local、broker.local 这样的 hostname 互相访问,就像在 Kubernetes 集群中一样方便。
升级与卸载
升级
使用内置脚本一键升级:
# 先停止现有服务
container system stop
# 运行升级脚本
/usr/local/bin/update-container.sh
# 重新启动
container system start
降级到指定版本
container system stop
# 卸载当前版本(-k 保留用户数据)
/usr/local/bin/uninstall-container.sh -k
# 安装指定版本
/usr/local/bin/update-container.sh -v 0.3.0
container system start
完全卸载
# 卸载并清除用户数据
/usr/local/bin/uninstall-container.sh -d
命令速查表
| 命令 | 说明 |
|---|---|
container system start/stop |
启动/停止系统服务 |
container build |
从 Dockerfile 构建镜像 |
container run |
运行容器 |
container ls |
列出容器 |
container exec |
在容器内执行命令 |
container stop/start/kill/rm |
容器生命周期管理 |
container logs |
查看容器日志 |
container stats |
查看资源使用 |
container image list/pull/push/tag |
镜像管理 |
container system dns create |
配置本地 DNS 域名 |
container inspect |
查看容器详细信息 |
与 Docker CLI 的兼容性
如果你习惯了 Docker 的命令行,container 的命令非常相似,几乎可以无缝迁移:
# Docker → Apple Container
docker build → container build
docker run → container run
docker ps → container ls
docker exec → container exec
docker stop/rm → container stop/rm
docker images → container image list
docker pull/push → container image pull/push
docker logs → container logs
docker inspect → container inspect
唯一的区别是命令前缀从 docker 换成了 container,以及系统级管理命令(container system)是 Docker 中没有的。
技术架构
Apple Container 的底层依赖是 Apple 自研的 Containerization Swift 包,负责:
- 容器运行时:基于轻量级虚拟机(microVM)运行 Linux 容器
- 镜像管理:OCI 镜像规范的完整实现
- 网络栈:虚拟网络 + 内置 DNS 解析
- 进程隔离:利用 macOS 的 sandbox 机制
与传统的 Docker 架构(需要一个 Linux 虚拟机来运行容器)不同,container 直接在 macOS 上通过轻量虚拟机运行容器,消除了双层虚拟化的开销,这也是它更轻量、更快速的原因。
总结
Apple Container 是 Apple 在开源社区的重要一步,它为 Apple Silicon Mac 用户提供了一个轻量、原生、开源的容器运行方案。
适合使用 Apple Container 的场景: - ✅ Apple Silicon Mac 用户 - ✅ 本地开发和测试 Linux 容器 - ✅ 轻量级微服务调试 - ✅ 不想运行 Docker Desktop 的重量级后台
暂时不适合的场景: - ❌ Intel Mac 用户(需要 macOS 26 + Apple Silicon) - ❌ 需要 Docker Compose 等多容器编排(目前 container 主要面向单容器场景) - ❌ 生产环境部署(项目仍处活跃开发阶段,API 尚未稳定到 1.0)
Apple Container 的 GitHub 仓库:github.com/apple/container
相关链接: - Container 官方教程 - 命令参考手册 - 技术架构概览 - Containerization Swift 包