SwiftでApple Container(オープンソースDocker代替)を使う方法

Mark Ponomarev

Mark Ponomarev

10 6月 2025

SwiftでApple Container(オープンソースDocker代替)を使う方法

コンテナは不可欠なツールとなりました。移植性、一貫性、効率性を提供し、開発者は異なる環境で信頼性の高いアプリケーションを構築・デプロイできます。長年、macOSではDockerが事実上の標準でしたが、Appleから生まれた新たな挑戦者が、Apple Silicon上の開発者向けに、よりネイティブで統合された、合理化された体験を提供しようとしています。それがcontainerです。

containerは、Appleが提供する新しいオープンソースツールで、Mac上で標準的なOCI準拠のLinuxコンテナを作成・実行できます。完全にSwiftで記述され、Apple Silicon向けに最適化されており、他のコンテナランタイムに代わる軽量で高性能なツールとして設計されています。macOS独自の仮想化技術を活用して、コンテナを最小限の分離された仮想マシンとして実行することで、セキュリティの向上とフットプリントの削減を実現しています。

この記事では、Appleのcontainerプロジェクトについて詳しく掘り下げます。そのアーキテクチャ、主な利点を探り、最初のコンテナ化されたアプリケーションを構築、実行、共有するための包括的なチュートリアルを順を追って説明します。経験豊富なバックエンド開発者であろうと、好奇心旺盛なMacユーザーであろうと、このエキサイティングな新しいツールを始めるために必要なすべてを見つけることができるでしょう。

💡
美しいAPIドキュメントを生成する優れたAPIテストツールをお探しですか?

開発チームが最大限の生産性で共同作業できる、統合されたオールインワンプラットフォームをお探しですか?

Apidogはあなたのすべての要求に応え、Postmanをより手頃な価格で置き換えます!
button

なぜ新しいコンテナツールなのか? containerの背景にあるビジョン

既存のプレイヤーが支配する状況で、なぜAppleは独自のコンテナツールを構築することにしたのでしょうか? その答えは、自社のハードウェアとソフトウェア上で、深く統合され、高性能で、開発者にとって使いやすい体験を提供するというビジョンにあります。containerは単なるDockerクローンではありません。Mac上でのコンテナ化を再考したものです。

Apple Silicon上でのネイティブパフォーマンス

重いLinux仮想マシンやクロスプラットフォーム互換性レイヤーに依存する他のソリューションとは異なり、containerはApple Silicon向けにゼロから構築されています。これはAppleのネイティブなVirtualization.frameworkと直接対話するSwiftアプリケーションです。これにより、大幅なパフォーマンス上の利点が得られます。ランタイム自体にRosetta 2のようなエミュレーションレイヤーは関与せず、各コンテナは軽量なVMで実行され、フル機能の仮想マシンを起動するのにかかる時間のごく一部で起動します。

独自のセキュアなアーキテクチャ

セキュリティはcontainer設計の要です。技術的な概要から、重要なアーキテクチャ上の決定が明らかになります。単一の共有Linux VM内で全てのコンテナを実行するのではなく、containerコンテナに対して専用の最小限のマイクロVMを起動します。この「コンテナごとに1つのVM」モデルは、堅牢なハードウェアレベルの分離を提供します。コンテナから脱出したプロセスは、他のコンテナにアクセスできる共有環境ではなく、厳しく制限された単一目的のVM内にいることになります。これにより、潜在的な攻撃対象領域が大幅に削減され、開発環境全体のセキュリティ体制が強化されます。

OCI準拠:他との連携

独自のアーキテクチャにもかかわらず、オープンスタンダードを完全に採用しています。OCI準拠のイメージを消費し、生成します。これは重要な機能であり、独自のエコシステムに閉じ込められることはありません。Docker Hubから標準イメージをプルし、containerで実行し、新しいイメージを構築して、ghcr.ioのような任意のOCI準拠レジストリにプッシュバックできます。containerで構築されたイメージは、他のツールや本番のCI/CDパイプラインでシームレスに機能します。

深いmacOS統合

containerはmacOS上で優れた挙動を示します。コアシステムテクノロジーと統合し、スムーズなユーザーエクスペリエンスを提供します。

内部構造:簡単な技術的詳細

containerコマンドラインツール(container)は、バックグラウンドサーバープロセスであるcontainer-apiserverと通信するクライアントです。このサーバーは、container system startで起動し、すべてを管理します。

container runのようなコマンドを発行すると、APIサーバーはその特定のコンテナのために専用のランタイムヘルパー(container-runtime-linux)を起動します。このヘルパーは、Virtualization.frameworkを使用して、コンテナのプロセスをホストする新しい最小限のLinux VMを起動します。このアーキテクチャはエレガントで堅牢であり、セキュリティとパフォーマンスのために設計されています。

新しいプロジェクトとして、containerにはいくつかの制限があることに注意することが重要です。最新バージョンのmacOS(macOS 15、最新のmacOS 26 Beta 1で最高のパフォーマンス)が必要です。コンテナとホスト間のネットワークには特定の回避策があり、メモリバルーニングなどの高度な機能はまだ開発中です。しかし、基盤は強力であり、プロジェクトは急速に進化しています。

containerの使い方:ステップバイステップチュートリアル

さあ、実際に試してみましょう。このチュートリアルでは、コンテナのライフサイクル全体を順を追って説明します。簡単なウェブサーバーのイメージの構築、実行、操作、公開です。

ステップ1:インストールとセットアップ

まず、要件を満たしていることを確認してください。Apple Silicon Macと、最近のバージョンのmacOSです。

containerのインストール:プロジェクトのGitHubリリースページから最新の署名済みインストーラーパッケージをダウンロードしてください。.pkgファイルをダブルクリックし、インストールの指示に従ってください。

サービスの開始:ターミナルを開き、containerシステムサービスを開始します。

container system start

初回実行時には、デフォルトのLinuxカーネルをダウンロードしてインストールするかどうかを尋ねられる可能性が高いです。yと入力してEnterを押して続行してください。

インストールの確認:利用可能なコンテナをすべてリストして(現時点では何も表示されないはずです)、サービスが実行されていることを確認します。

container ls -a
# 空のヘッダーが表示されるはずです:
# ID  IMAGE  OS  ARCH  STATE  ADDR

ステップ2:最初のイメージの構築

さて、簡単なPythonウェブサーバーのコンテナイメージを作成しましょう。

プロジェクトディレクトリの作成

mkdir web-test
cd web-test

Dockerfileの作成web-testディレクトリ内に、Dockerfile(またはContainerfile)という名前のファイルを作成し、以下の内容を記述します。このファイルは、イメージの「レシピ」を定義します。

# 軽量なPythonベースイメージから開始
FROM docker.io/python:alpine

# コンテナ内の作業ディレクトリを設定
WORKDIR /content

# テスト用に'curl'ユーティリティを追加
RUN apk add curl

# 簡単なHTMLファイルを作成
RUN echo '<!DOCTYPE html><html><head><title>Hello from Container</title></head><body><h1>Hello, Apple Container!</h1></body></html>' > index.html

# コンテナ開始時に実行するコマンド
CMD ["python3", "-m", "http.server", "80", "--bind", "0.0.0.0"]

イメージの構築:次に、containerDockerfileからイメージを構築するように指示します。web-testという名前でタグ付けします。

container build --tag web-test --file Dockerfile .

末尾の.は、現在のディレクトリをビルドコンテキストとして使用することを意味します。

イメージのリスト表示:ビルドが完了したら、ローカルイメージストアに新しいイメージが表示されます。

container images list
# `web-test`イメージと`python:alpine`ベースイメージが表示されるはずです。
# 名前      タグ     ダイジェスト
# python    alpine  b4d299311845...
# web-test  latest  25b99501f174...

ステップ3:コンテナの実行

イメージが構築されたので、実行してみましょう。

ウェブサーバーの実行container runコマンドを使用して、web-testイメージからコンテナを開始します。

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

これらのフラグを分解してみましょう。

実行中のコンテナの確認:アクティブなコンテナをリストします。

container ls

my-web-serverコンテナがrunning状態になっているのが表示され、ADDR列には割り当てられたIPアドレスが表示されます(例:192.168.64.3)。

ウェブサーバーへのアクセス:ウェブブラウザを開き、前のステップで表示されたIPアドレスに移動します。「Hello, Apple Container!」というメッセージが表示されるはずです。

# IPを`container ls`で表示されたものに置き換えてください
open <http://192.168.64.3>

ステップ4:コンテナとの対話

containerは、実行中のコンテナと対話するための強力なツールを提供します。

コマンドの実行container execを使用して、コンテナ内で直接コマンドを実行できます。ウェブサーバーのコンテンツディレクトリ内のファイルをリストしてみましょう。

container exec my-web-server ls /content
# 出力: index.html

対話型シェルのオープン:より複雑なデバッグのために、コンテナ内で対話型シェルを取得できます。

container exec -it my-web-server sh

-itフラグ(--interactive--tty)は、ターミナルをコンテナ内のシェルに接続するために不可欠です。コンテナのWORKDIR内のシェルプロンプトに入ります。周囲を確認したり、プロセスをチェックしたりできます。その後、exitと入力してMacのターミナルに戻ります。

ステップ5:イメージの公開

作業の共有は簡単です。イメージをコンテナレジストリにプッシュしましょう。この例ではDocker Hubを使用していますが、任意のOCIレジストリで機能します。(これは、fidoというユーザー名のDocker Hubアカウントを持っていることを前提としています。)

レジストリへのログイン

# これにより、ユーザー名とパスワード/トークンが求められます
container registry login docker.io

公開用のイメージにタグ付け:レジストリは、イメージをregistry/username/image:tag形式で命名する必要があります。新しいタグを作成しましょう。

container images tag web-test docker.io/fido/web-test:latest

イメージのプッシュ

container images push docker.io/fido/web-test:latest

これで、あなたのイメージは、他の人が任意のOCI準拠プラットフォームでプルして実行できるようになりました!

ステップ6:クリーンアップ

完了したら、コンテナを停止し、サービスをシャットダウンできます。

# コンテナの停止
container stop my-web-server

# すべてのコンテナサービスの停止
container system stop

基本を超えて

チュートリアルではコアワークフローを説明しましたが、containerはさらに多くのことができます。以下は、how-to.mdドキュメントからのいくつかの機能です。

リソース管理:コンテナに割り当てられるリソースを制御できます。メモリを大量に使用するビルドの場合、ビルダーにより多くのRAMとCPUを与えることができます。

container builder start --cpus 8 --memory 16g

ファイル共有-volumeフラグを使用して、Macからディレクトリをコンテナにマウントできます。これは、ホストでコードを編集し、コンテナ内でライブで変更を確認したい開発ワークフローに不可欠です。

container run --volume ${HOME}/my-project:/app my-image

マルチプラットフォームビルド:Apple Silicon(arm64)とIntel(amd64)アーキテクチャの両方で実行されるイメージを単一のコマンドで構築できます。多様なサーバー環境にデプロイするのに最適です。

container build --arch arm64 --arch amd64 --tag my-multi-arch-image .

高度な検査container inspectコマンドは、コンテナとイメージに関する詳細なJSON情報を提供します。これはスクリプト作成や自動化に役立ちます。

結論

Appleのcontainerは単なる新しいツールではなく、声明です。クラウドネイティブ時代のファーストクラスで統合された開発ツールを提供するというコミットメントを示しています。軽量でセキュア、高性能なコンテナランタイムをOSに直接組み込むことで、Mac上でのコンテナ化の障壁を下げ、既存のソリューションに代わる魅力的な選択肢を提供しています。

プロジェクトはまだ若いですが、その基盤は堅固であり、アーキテクチャは健全で、オープンスタンダードへの準拠により、より広範なコンテナエコシステムにおいて価値あるプレイヤーとなるでしょう。Apple Silicon Macの開発者であれば、containerは今日注目し、試してみるべきプロジェクトです。

💡
美しいAPIドキュメントを生成する優れたAPIテストツールをお探しですか?

開発チームが最大限の生産性で共同作業できる、統合されたオールインワンプラットフォームをお探しですか?

Apidogはあなたのすべての要求に応え、Postmanをより手頃な価格で置き換えます!
button

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる