はじめに: 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 互換、標準のコンテナイメージを pull・build・push 可能。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 を使うには: - Apple Silicon 搭載 Mac(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", "8", "--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
設定完了後、コンテナにアクセスする方法は2つあります:
# 方法一: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
# コンテナのインタラクティブシェルに入る
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 からイメージを pull
container image pull ubuntu:latest
# イメージにタグをつける
container image tag web-test:latest my-registry.example.com/web-test:v1.0
# リモートレジストリにイメージを push
container image push my-registry.example.com/web-test:v1.0
レジストリの設定
container は複数のレジストリソースを設定できます:
# 設定済みのレジストリを一覧表示
container registry list
# プライベートレジストリを追加
container registry add --name my-private --url https://my-registry.example.com
実践シナリオ
シナリオ一:ローカル開発環境
container を使ってローカル開発環境を構築します。Docker Desktop の余分なオーバーヘッドは不要です:
# PostgreSQL イメージを pull
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 パッケージ