
Apple Container 开箱实践
TL;DR
Apple Container CLI 是一款强大的工具,可在 macOS 上运行 Linux 容器,特别针对 Apple Silicon 进行了优化。
该 CLI 设计为开发者友好,命令风格与 Docker CLI 类似。对于已经熟悉 Docker CLI 的用户,Container CLI 应该会非常熟悉,并且为 macOS 用户提供了更原生的体验。
本文将介绍 Container CLI、如何快速上手,以及如何在 macOS 上运行 Linux 容器。
关于 Container CLI
Container 是 Apple 提供的开源命令行工具,专为在 Mac 上运行 Linux 容器而构建,尤其针对 Apple Silicon 进行了优化。它由 Swift 编写,基于 Containerization Framework 构建。Apple Containerization 和 Container CLI 于 WWDC 2025 发布。
如果你还不了解 Apple Containerization Framework,可以参考我之前的 博客文章。自两年前在内部采用以来,该框架已在 Apple 内部广泛应用。其开发团队成员曾参与 Docker 和 Kata Containers 项目。
借助 Containerization Framework,在 macOS 上运行 Linux 容器变得非常简单。与传统方案(如 Docker Desktop、OrbStack 或 Podman,通常在单一虚拟机中运行多个容器)不同,该框架为每个容器分配独立的虚拟机。这种方式提升了安全性和性能,实现了更强的工作负载隔离并减少了资源争用。
除了安全性外,最大的优势在于它为运行 Linux 容器提供了原生的 macOS 体验,无需第三方虚拟化程序或复杂配置。对于 Apple Silicon 用户,开发者可以更便捷地在 macOS 设备上直接使用 Linux 容器。
Container CLI 是首个基于 Containerization Framework 的工具,定位为简单易用、开发者友好、命令风格类似 Docker 的 CLI 工具。
Container CLI 快速上手
要在 macOS 上体验原生 Linux 容器解决方案,可以直接使用 Container CLI,而无需直接操作 Containerization Framework。
需要说明的是,Container CLI 依赖于 macOS 26 beta 的新特性和增强功能。你也可以在 macOS 15.5 或更高版本上使用,但 macOS 15 上发现的问题不会被修复,建议使用 macOS 26 beta 或更高版本以获得最佳体验。
你需要提前了解 macOS 15 的一些限制:
- 虚拟网络下容器间无法通信。
- 容器的 IP 地址无法从主机访问。
这里以 macOS 15.5 为例进行演示。
安装 Container CLI
从 GitHub release 页面 下载 Container CLI,当前最新版本为 0.1.0。
安装完成后,可通过以下命令启动服务:
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]:
Installing kernel...
该命令会启动容器服务,并在未安装默认内核时自动安装。默认内核由 Kata Containers 提供,是一种轻量级虚拟机容器运行方案。
此步骤非常关键,否则在运行其他命令时会遇到如下错误:
XPC connection error: Connection invalid
子命令
Container CLI 提供了一系列用于管理容器的子命令,风格与 Docker CLI 类似。
Registry 登录
现在可以开始体验 Container CLI。运行容器前需先拉取镜像,Container CLI 支持从 Docker Hub 及其他镜像仓库拉取镜像。
首先登录 Docker Hub:
container registry login --username <USERNAME> REGISTRY_HOST
也可以将 Docker Hub Registry 设置为默认仓库:
container registry default set REGISTRY_HOST
拉取镜像
可通过 container images pull
命令从 Docker Hub 或其他仓库拉取镜像。该命令与 Docker CLI 类似,但使用 container
前缀和 images pull
子命令,而 Docker CLI 支持 docker pull
和 docker images pull
。
# Docker CLI
docker pull nginx:latest
docker images pull nginx:latest
# Container CLI
container images pull nginx:latest
运行容器
运行容器命令也与 Docker CLI 类似。
# Docker CLI
docker run --rm --name nginx-test nginx:latest
# Container CLI
container run --rm --name nginx-test nginx:latest
Inspect 容器
通过 inspect
命令可查看容器的详细信息,包括配置、网络和状态。
# Docker CLI
docker inspect nginx-test
# Container CLI
container inspect nginx-test
列出容器
可通过 container ls
命令列出所有运行中的容器,类似于 docker ps
。
# Docker CLI
docker ps
# Container CLI
container ls
容器内执行命令
可通过 exec
命令在运行中的容器内执行命令,类似于 docker exec
。
# Docker CLI
container exec -it nginx-test bash
# Container CLI
container exec -it nginx-test bash
其他命令
其他容器管理子命令也与 Docker CLI 类似。但镜像相关操作需使用 images
子命令,如 container images ls
、container images rm
等。Docker CLI 提供了更友好的命令如 docker rmi
、docker pull
、docker push
等。
更多命令可通过 container --help
或 container <subcommand> --help
查看详细用法。
镜像构建
关于镜像构建,Container CLI 支持使用 container build
命令,且 Dockerfile 语法兼容 Docker CLI。可直接用相同的 Dockerfile 构建镜像。
# Docker CLI
docker build -t my-image:latest .
# Container CLI
container build -t my-image:latest .
网络
通过 container ls
输出可看到每个容器都有独立的 IP 地址,这是对传统 Docker 网络模型的重要改进。无需为每个容器单独映射端口,网络体验更加无缝。
container ls
ID IMAGE OS ARCH STATE ADDR
nginx-test docker.io/library/nginx:latest linux arm64 running 192.168.64.2
由于 macOS 15 的限制,此处不建议直接通过 IP 访问容器,因为无法生效。
DNS
Container 内置了 DNS 服务器,可将容器名称解析为其 IP 地址。
sudo container system dns create container-dns
container system dns default set container-dns
第一条命令会在 /etc/resolver/
目录下创建文件,macOS 会用其解析 container-dns
域名。第二条命令将该 DNS 设置为系统默认。
此后可通过容器名称如 nginx-test.container-dns
访问容器,系统会自动解析为容器 IP。
cat /etc/resolver/containerization.container-dns
domain container-dns
search container-dns
nameserver 127.0.0.1
port 2053
卸载 Container CLI
要卸载 Container CLI,可以使用 container system stop
命令停止容器服务,然后删除 Container CLI 可执行文件。
container system stop
git clone https://github.com/apple/container.git
cd container
scripts/uninstall-container.sh -d
-d
选项会删除容器数据目录,包括容器镜像和容器。如果希望保留数据,可以使用 -k
选项,仅移除 Container CLI 可执行文件,便于后续重新安装。