導讀: 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 套件