このプロジェクトについて

コンテナ化は、Appleが提供するSwiftパッケージで、macOS上でLinuxコンテナを実行できるようにするものです。Appleシリコン上のAppleのVirtualization.framework上に構築されており、コンテナのライフサイクル全体に対応する一連のAPIを提供します。 中核となる機能には、OCIイメージの管理とリモートレジストリとの対話、ext4ファイルシステムの作成とデータ投入、Netlinkソケットファミリとの対話、高速起動のための最適化されたLinuxカーネルの構築、軽量仮想マシンの起動とランタイム環境の管理、コンテナ化されたプロセスの起動と対話、Rosetta 2を使用したAppleシリコン上でのlinux/amd64コンテナの実行などが含まれます。 設計面では、各Linuxコンテナは独自の軽量仮想マシン内で実行されます。クライアントはコンテナごとに専用のIPアドレスを割り当てることができるため、個別のポートフォワーディングが不要になります。コンテナは、最適化されたLinuxカーネル構成と、軽量なinitシステムを備えた最小限のルートファイルシステムにより、1秒未満の起動時間を実現します。vminitdサブプロジェクトは、VM内の初期プロセスとして起動される小さなinitシステムです。これはvsock上でgRPC APIを公開し、ランタイム環境を構成してコンテナ化されたプロセスを起動できるようにし、I/O、シグナル、イベントを呼び出し元のプロセスに転送します。 このプロジェクトは、VMMをVirtualMachineManager / VirtualMachineInstanceプロトコルの背後で抽象化し、2つのバックエンドを提供します。macOSバックエンドは、追加のバイナリを必要とせずにVirtualization.framework(VZVirtualMachineManager)を直接使用します。Linuxバックエンドは、cloud-hypervisorとKVM(CHVirtualMachineManager)を使用し、REST-on-UDS APIを介して制御されるVMごとに1つのcloud-hypervisorサブプロセスを実行します。ブロックストレージにはvirtio-blk、共有ディレクトリにはvirtio-fs(共有ごとに1つのvirtiofsd)、ネットワーキングにはTAP、macOSパスと同じvminitdコントラクトに到達するためにcloud-hypervisorのハイブリッドvsockを使用します。Linuxバックエンドでは、ホストにcloud-hypervisorとvirtiofsd、KVMアクセス、ネットワーキング用の事前ステージングされたTAP/ブリッジ/NAT配管が必要です。 パッケージをビルドするための要件は、Appleシリコンを搭載したMac、macOS 26、Xcode 26です。古いmacOSバージョンはサポートされていません。Linuxゲストinit(vminitd/vmexec)は、Mac上でクロスコンパイルされるのではなく、Linuxコンテナ内で静的バイナリとしてコンパイルされるため、ホストにSwiftツールチェーンやStatic Linux SDKは不要です。代わりにapple/container CLIが使用されます。cctl実行可能ファイルは、APIを探索するためのプレイグラウンドとして機能し、OCIイメージの操作、レジストリへのログイン、ルートファイルシステムブロックの作成、単純なLinuxコンテナの実行のためのコマンドを備えています。 macOSで軽量VMを起動するにはLinuxカーネルが必要です。リポジトリには、コンパイル用のコンテナ化されたビルド環境を備えた最適化されたカーネル構成がkernel/ディレクトリに含まれています。この構成は、高速な起動時間と軽量な環境をサポートするために最小限に抑えられており、Containerizationは、コンテナごとに異なるカーネル構成とバージョンを使用するためのファーストクラスのAPIを提供します。ユーザー提供のカーネルがサポートされており、カーネルバージョン6.14.9以降で機能がテストされています。事前ビルドされたカーネルには、VIRTIOドライバーが(モジュールとしてだけでなく)カーネルにコンパイルされている必要があります。Kata Containersプロジェクトは適切なカーネルを提供します。 ビルドおよびテストのワークフロー:推奨されるXcodeをインストールし、アクティブな開発者ディレクトリを設定し、apple/container CLIをインストールしてから、`make all`を実行してビルドし、`make test integration`を実行してテストを実行します。統合テストにはカーネルが必要です。`make fetch-default-kernel`はデフォルトのカーネルを取得します。Protobufインターフェースは`make protos`で再生成でき、pre-commitフックは`make pre-commit`でインストールでき、APIドキュメントは`make docs`と`make serve-docs`でローカルに生成できます。 このプロジェクトはバージョン0.1.0で、最初の公式リリースです。ソースの安定性はマイナーバージョン内でのみ保証されます(たとえば、0.1.1と0.1.2の間)。ソースに影響を与える可能性のある更新を避けたいコンシューマーは、.upToNextMinorVersion(from: "0.1.0")で依存関係を固定できます。貢献はCONTRIBUTING.mdファイルを通じて歓迎されます。