はじめに: 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 のインストール

方法一:インストーラーパッケージからインストール(推奨)

  1. GitHub Release ページ にアクセス
  2. 最新の .pkg 署名付きインストーラーをダウンロード
  3. .pkg ファイルをダブルクリックし、インストールウィザードに従って完了
  4. インストール中に管理者パスワードが必要で、インストール先は /usr/local になります

方法二:ソースコードからコンパイル

最新版を試したい場合や貢献に参加したい場合は、ソースからビルドできます:

BASH
# リポジトリのクローン
git clone https://github.com/apple/container.git
cd container

# BUILDING.md を参照してコンパイル
# Xcode Command Line Tools と Swift 5.10+ が必要

システムサービスの起動

インストールが完了したら、container のシステムサービスを起動します:

BASH
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 を入力すれば自動的にダウンロード・インストールされます。インストール完了後、サービスが正常に動作しているか確認します:

BASH
$ container list --all
ID    IMAGE    OS     ARCH    STATE    IP

空のリストが表示されれば、サービスは準備完了で、いつでもコンテナを作成できます。


クイックスタート:最初のコンテナ

1. コンテナイメージのビルド

Dockerfile から始めて、簡単な Python Web サーバーのイメージをビルドしてみましょう。

BASH
# 作業用ディレクトリを作成
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 .

ビルド完了後、ローカルのイメージ一覧を確認します:

BASH
$ container image list
NAME         TAG       DIGEST
python       alpine    b4d299311845
web-test     latest    25b99501f174

2. コンテナの実行

BASH
container run --name my-web-server --detach --rm web-test

パラメータの説明: - --name:コンテナに分かりやすい名前をつける - --detach:バックグラウンドで実行、ターミナルをブロックしない - --rm:コンテナ停止時に自動でクリーンアップ

実行中のコンテナを確認します:

BASH
$ 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 で直接コンテナにアクセスできます。まずローカルドメインを設定します:

BASH
sudo container system dns create test

設定完了後、コンテナにアクセスする方法は2つあります:

BASH
# 方法一:IP アドレスでアクセス
open http://192.168.64.3

# 方法二:hostname でアクセス(よりエレガント!)
open http://my-web-server.test

これが container の大きな魅力の一つです —— 手動のポートマッピングは不要、DNS が自動的にコンテナ名を対応する IP に解決してくれます。

4. コンテナのリソース使用状況を確認

BASH
# リアルタイムの統計を確認(top に類似)
container stats my-web-server

# 一度だけのスナップショットを確認
container stats --no-stream my-web-server

出力例:

TEXT
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

応用機能:日常の開発ワークフロー

コンテナに入ってコマンドを実行

BASH
# 実行中のコンテナ内でコマンドを実行
container exec my-web-server cat /content/index.html

# コンテナのインタラクティブシェルに入る
container exec -it my-web-server /bin/sh

コンテナのライフサイクル管理

BASH
# コンテナを停止
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

イメージ管理

BASH
# ローカルのイメージを一覧表示
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 は複数のレジストリソースを設定できます:

BASH
# 設定済みのレジストリを一覧表示
container registry list

# プライベートレジストリを追加
container registry add --name my-private --url https://my-registry.example.com

実践シナリオ

シナリオ一:ローカル開発環境

container を使ってローカル開発環境を構築します。Docker Desktop の余分なオーバーヘッドは不要です:

BASH
# 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 環境をシミュレーションします:

BASH
# CI 環境用のイメージをビルド
container build --tag ci-test --file Dockerfile.ci .

# テストを実行
docker run --rm ci-test make test

# テスト通過後、本番用イメージをビルド
container build --tag my-app:prod .

シナリオ三:マイクロサービスのデバッグ

container でマイクロサービス群を素早く起動し、ローカルでデバッグします:

BASH
# ドメインを設定
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 クラスタの中で動作しているかのように便利です。


アップグレードとアンインストール

アップグレード

組み込みのスクリプトでワンクリックアップグレード:

BASH
# まず既存のサービスを停止
container system stop

# アップグレードスクリプトを実行
/usr/local/bin/update-container.sh

# 再起動
container system start

指定バージョンへのダウングレード

BASH
container system stop

# 現在のバージョンをアンインストール(-k でユーザーデータを保持)
/usr/local/bin/uninstall-container.sh -k

# 指定バージョンをインストール
/usr/local/bin/update-container.sh -v 0.3.0

container system start

完全アンインストール

BASH
# アンインストールしてユーザーデータを削除
/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 のコマンドは非常に似ていて、ほぼシームレスに移行できます:

BASH
# 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 パッケージ