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