导读: 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

方式一:通过安装包安装(推荐)

  1. 前往 GitHub Release 页面
  2. 下载最新的 .pkg 签名安装包
  3. 双击 .pkg 文件,按照安装向导完成安装
  4. 安装过程中需要输入管理员密码,安装路径为 /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.localbroker.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 包