Apple Container 入門チュートリアル
Apple Silicon Mac をお使いの開発者向けに、Apple の新しいコンテナ技術を実際に体験できるチュートリアルです。従来のコンテナ技術とは一線を画す革新的なアプローチを、実践を通して学んでいきましょう。
Apple Container とは
Apple Container は、Apple Silicon Mac 専用に開発された新しいコンテナ技術です。最大の特徴は、各コンテナが独自の軽量 Linux 仮想マシンで動作する「VM-per-Container」アーキテクチャです。これにより、従来のコンテナ技術では実現困難だった強固なセキュリティと高いパフォーマンスを両立しています。
Apple のコンテナ技術は、実際には2つのプロジェクトから構成されています。apple/containerization
は Swift で書かれたフレームワークで、コンテナ技術の核となる低レベル機能を提供します。一方、apple/container
は実際に開発者が使用するコマンドラインツールです。普段使うのは container
コマンドですが、内部では containerization
フレームワークが Apple Silicon の性能を最大限に引き出しています。
従来のコンテナ技術では、複数のコンテナが同一の OS カーネルを共有していました。しかし Apple Container では、各コンテナが完全に独立した Linux VM で動作するため、一つのコンテナに問題が発生しても他に影響しません。さらに、Apple Silicon の仮想化支援機能により、VM の起動時間は1秒未満という驚異的な速度を実現しています。
始める前の準備
Apple Container を使用するには、以下の環境が必要です。
要件 | 詳細 |
---|---|
ハードウェア | Apple Silicon Mac (M1/M2/M3/M4) |
OS | macOS 15 以上(macOS 26 Beta 1 推奨) |
メモリ | 8GB 以上(16GB 推奨) |
ストレージ | 10GB 以上の空き容量 |
Intel Mac では動作しないため、必ず Apple Silicon Mac をご用意ください。
インストール
GitHub リリースページ から最新の署名済みインストーラーをダウンロードし、パッケージファイルをダブルクリックしてインストールします。管理者パスワードの入力が必要です。
初期設定
インストール後、ターミナルで以下のコマンドを実行してシステムを起動します。
container system start
初回起動時には Linux カーネルのダウンロードが行われる場合があります。完了したら、動作確認を行いましょう。
container system status
container list --all
基本操作を覚える
まずは簡単なコンテナを実行して、Apple Container の基本操作を覚えましょう。
Hello World
最初に、定番の Hello World コンテナを実行してみます。
container run hello-world
このコマンドにより、軽量 Linux VM が起動し、Hello World メッセージが表示されます。起動の速さに驚かれるかもしれません。
インタラクティブなコンテナ
次に、Ubuntu コンテナでインタラクティブなシェルを起動してみましょう。
container run -it ubuntu:latest bash
コンテナ内で ls
、ps aux
、uname -a
などのコマンドを実行して、独立した Linux 環境であることを確認できます。exit
で終了します。
バックグラウンド実行
Web サーバーをバックグラウンドで実行してみます。
container run -d --name web nginx
実行中のコンテナを確認します。
container list
Apple Container の特徴として、各コンテナには専用の IP アドレスが自動的に割り当てられます。コンテナの詳細情報を確認してみましょう。
container inspect web
IP アドレスを確認したら、ブラウザで http://[IP アドレス]
にアクセスするか、以下のコマンドでアクセスできます。
curl http://web.test/
Apple Container では、コンテナ名に .test
ドメインを付けることで、DNS 名でのアクセスが可能です。
実践:Vapor Web API を作る
Swift 開発者にとって身近な Vapor フレームワークを使って、実際の Web API を作成してみましょう。
Swift 環境の準備
まず、Swift の公式イメージを使って開発環境を準備します。
container run -it --name swift-dev swift:5.9 bash
コンテナ内で Swift のバージョンを確認します。
swift --version
Vapor プロジェクトの作成
新しいターミナルタブを開き、作業ディレクトリを作成します。
mkdir vapor-demo
cd vapor-demo
Swift コンテナを使って Vapor プロジェクトを初期化します。
container run --rm \
--volume $(pwd):/app \
--workdir /app \
swift:5.9 \
swift package init --type executable
Package.swift ファイルを編集して Vapor を依存関係に追加します。
cat > Package.swift << 'EOF'
// swift-tools-version: 5.9
import PackageDescription
let package = Package(
name: "vapor-demo",
platforms: [
.macOS(.v13)
],
dependencies: [
.package(url: "https://github.com/vapor/vapor.git", from: "4.89.0")
],
targets: [
.executableTarget(
name: "vapor-demo",
dependencies: [
.product(name: "Vapor", package: "vapor")
]
),
]
)
EOF
メインファイルを作成します。
cat > Sources/main.swift << 'EOF'
import Vapor
let app = Application()
defer { app.shutdown() }
app.get("hello") { req in
return "Hello from Apple Container!"
}
app.get("api", "users", ":name") { req -> String in
guard let name = req.parameters.get("name") else {
throw Abort(.badRequest)
}
return "User: \(name)"
}
try app.run()
EOF
API サーバーの起動
Vapor アプリケーションをコンテナで実行します。
container run -d --name vapor-api \
--volume $(pwd):/app \
--workdir /app \
swift:5.9 \
bash -c "swift package resolve && swift run"
少し待ってから、API にアクセスしてみましょう。
curl http://vapor-api.test:8080/hello
curl http://vapor-api.test:8080/api/users/john
データベースとの連携
PostgreSQL データベースを追加して、より実践的な環境を構築してみます。
container run -d --name postgres \
--env POSTGRES_PASSWORD=password \
--env POSTGRES_DB=vapordb \
postgres:15
Vapor アプリケーションからデータベースに接続する場合、postgres.test:5432
で直接アクセスできます。これは Apple Container の専用 IP アドレス機能により実現されています。
Apple Container の特徴
実際に使ってみて、Apple Container の特徴を体験できたでしょうか。主な特徴をまとめます。
専用 IP アドレス
各コンテナには自動的に専用の IP アドレスが割り当てられ、コンテナ名に .test
を付けることで DNS 名でのアクセスが可能です。従来のポートフォワーディング設定は不要で、より直感的なネットワーキングが実現されています。
高速起動
VM-per-Container でありながら、起動時間は1秒未満です。これは Apple Silicon の仮想化支援機能と、最適化された軽量 Linux カーネル、専用初期化システム vminitd
の組み合わせにより実現されています。
完全な分離
各コンテナが独立した Linux VM で動作するため、カーネルレベルでの完全な分離が実現されています。一つのコンテナに問題が発生しても、他のコンテナやホストシステムに影響しません。
macOS との統合
Apple Container は macOS のプライバシー機能と統合されており、必要なファイルやディレクトリのみをコンテナに提供できます。また、ファイルシステムの共有も効率的に行われます。
知っておくべきこと
Apple Container を使用する際の制限事項と注意点を理解しておきましょう。
制限事項
Apple Container は Apple Silicon Mac 専用のため、Intel Mac や他のプラットフォームでは動作しません。また、macOS 15 では一部のネットワーク機能に制限があり、コンテナ間通信が不安定な場合があります。macOS 26 Beta 1 以降の使用を推奨します。
リソース使用量
VM-per-Container アーキテクチャのため、各コンテナには VM のオーバーヘッド(50-100MB 程度)が発生します。大量の軽量コンテナを実行する場合は、メモリ使用量に注意が必要です。
トラブルシューティング
問題が発生した場合は、以下のコマンドでログを確認できます。
# システムログの確認
container system logs
# 特定のコンテナのログ
container logs vapor-api
# ブートログの確認
container logs --boot vapor-api
# リソース使用状況の監視
container stats vapor-api
次のステップ
このチュートリアルで Apple Container の基本的な使い方と特徴を体験できました。さらに学習を進めるには、以下のリソースを活用してください。
学習リソース
実践的な活用
Apple Container は、セキュリティが重要なアプリケーション開発、教育・研修環境、CI/CD パイプライン、マイクロサービス開発など、様々な場面で活用できます。特に Apple Silicon Mac での開発において、従来のコンテナ技術では実現困難だった安全性と性能の両立を実現します。
# 最後に、使用したコンテナをクリーンアップ
container stop vapor-api postgres web swift-dev
container remove vapor-api postgres web swift-dev
新しいコンテナ技術の世界へようこそ。Apple Container で、より良い開発体験をお楽しみください。
Discussion