998 字
5 分鐘
開箱 Apple Container!取代 Docker 的全新工具
2025-06-12
無標籤

Apple 在前幾天 WWDC 2025 推出 Apple container,是一個用 Swift 撰寫、專為 macOS 設計的輕量級 Linux container 執行工具。

Apple 推出的 Container 是一套專為 macOS 打造的輕量級容器執行系統,具備高度隔離、安全性與原生整合等優勢。它的主要特色在於:每一個容器都是在獨立的微型虛擬機中執行,這意味著與傳統 Docker 不同,所有容器不會共用同一個 Linux kernel,而是各自擁有完整且隔離的執行環境,提升安全性並防止容器逃逸。

此工具完全支援 OCI 映像格式,可以直接使用來自 DockerHub 等 registry 的映像,並透過 Apple 自家虛擬化框架(Virtualization.framework)啟動。其 CLI 工具有直覺的使用方式,包括 container runcontainer pullcontainer ls 等指令,讓開發者能快速上手、執行容器。

延伸閱讀:


安裝說明#

只要是 macOS 15、26 beta 以上都可以安裝 Apple Container,不過 Apple 表示只會針對 macOS 26 的問題進行解決。

Apple Container 目前不像是 Docker Desktop 有 GUI 管理工具,目前只有指令操作。目前最新版是 0.1.0,發佈時間是 2025/6/9,進入下載連結,下載 container-0.1.0-installer-signed.pkg ,並進行安裝。

安裝後就可以下 container 指令

透過以下指令來啟動關閉 container

Terminal window
# 啟動
container system start
# 關閉
container system stop

其實大部分功能指令都跟 docker 相同,少部分功能尚未支援,基本的容器打包、執行都有。接下來與 docker 進行比較。


List#

以下為列出容器的指令。容器 ID 命名也不相同,Docker 為 12 碼的 HEX,Apple Container 則為 UUID 格式。

Terminal window
# Docker 列出執行中的容器
docker container ls / docker ps
# Apple container 列出執行中的容器
container ls


Run#

下面是 Docker 執行容器的指令,透過 name 為容器命名,透過 p 將 port 對應到 localhost。

Terminal window
# Docker 執行容器
docker run -d --name nginx -p 80:80 nginx
# Apple container 執行容器
container run -d --name nginx

Network#

由於 Apple Container 直接發 Private IP 給容器,不像是 Docker 可以為容器自定義 Network。

而在兩個容器互相連線也存在差異,Docker 透過容器 Name 來訪問,Docker 內的 DNS 會把 Name 當作容器的 hostname。

Apple Container 預設可以用 IP 連線,不會在 DNS 綁定 hostname 與 IP,需要為 Apple Container 設定 DNS 的 Base Domain,透過 Name + Base Domain 來訪問容器。

以下面指令為例,將 Base Domain 設為 container

# 設定 Apple Container Base Domain
$ sudo container system dns create container
$ container system dns default set container

建立一個 nginx 取名叫做 test,在 Host 與容器中可以透過 test.container 進行訪問,預設 DNS 會在 192.168.64.1。


Volume#

容器要掛載資料夾處理上也不太相同,Docker 目前支援內建的 Volumes、掛載 Host 路徑的 Bind Mounts 兩種做法,而 Apple Container 目前只支援 Bind Mounts。

Terminal window
# Docker volumes
docker run -d -v data_volume:/data nginx
# Docker bind mounts
docker run -d -v ./data:/data nginx
# Apple Container bind mounts
container run -d -v ./data:/data nginx

Exec#

進入容器的指令則相同,都透過容器 ID 進入

Terminal window
# Docker
docker exec -it d7ea37207f6d bash
# Apple Container
container exec -it ccd5654d-7b07-412e-8092-1ffe17ccf248 bash

Image#

列出 Image 指令如下

Terminal window
# Docker
docker image ls / docker images
# Apple Container
container image ls / container images ls

Build#

編譯指令如下,Apple Container 也是讀 Dockerfile

Terminal window
# Docker
docker build . -t test:latest
# Apple Container
container build . -t test:latest

Docker、Apple Container 同樣支援在 ARM 上編譯 AMD64 的容器,之前我有文章介紹過「ARM MacOS 打包 amd64 Docker image」,以下為編譯成 AMD64 的指令。

Terminal window
# Docker
docker buildx build --platform linux/amd64 -t test:latest .
# Apple Container
container build . -t test:latest --arch amd64

打包完的 Images 在 Apple Container 一樣可以 Push / Pull。


結語#

體驗過 Apple Container 後覺得大部分功能都有,指令也都差不多,可以先拿來取代 Docker 看看。之後在想可以弄個兼容 Docker 指令的 Apple Container,那就可以使用 GUI 工具管理。