English中文

機能

kcell:Docker アプリを小さな VM に 1 つずつ

できること

  • 無改変の Docker:公式の静的バイナリ(Docker 29.8、Compose 5.5)。Compose ファイルはそのまま使えます。
  • 18 個のアプリテンプレート(Jellyfin、Nextcloud、Immich など)または独自の Compose ファイル。kcell は keelOS が自動で作り、ネットワーク、CPU、メモリ、ディスクは既定値です。
  • 自分の PC から docker context create に ssh アドレスを指定し、docker compose up -d と実行します。普通の Linux マシンと同じです。
  • ボリュームはホスト上の ZFS データセットなので、ファイルはホストからそのまま見えます。ポートは kcell 自身のアドレスに公開され、既定ではホストのアドレスにも転送されます。
  • kcell を停止するとチェックポイントが保存され、次回はそのままの状態で戻ります。

しくみ

Docker に必要なのは Linux カーネルで、FreeBSD の jail や Linux 互換レイヤーでは提供できません。そこで kcell は bhyve の VM で、独自に構成した Linux 7.2 カーネル、小さな init、読み取り専用のシステム(圧縮後 86 MB)で動き、同じホストの kcell はこのシステムを共有します。

ボリュームとシステムはホストのデータセットを virtio-fs で渡し、Docker のイメージレイヤーだけがスパースな zvol(既定 40 GB)に置かれます。start から Docker が使えるまで 3.9 秒、チェックポイントからの再開は 1 秒です。

計測結果

  • ホスト上のボリューム(virtio-fs):シーケンシャルライト 742–777 MB/s、4K ランダムライト 22–23k IOPS。データベースと npm はローカルディスクと同じ速さです。
  • 内蔵 GPU:SR-IOV の VF(第 12 世代以降の Intel)で、kcell が 1080p を 720p HEVC に 73 fps でトランスコードします。

制限事項

  • メモリは kcell 全体で設定し、変更には数秒のコールド再起動が必要です。
  • 小さなファイルが大量にある処理(展開、コンパイル)はホストのボリュームで 5〜6 倍遅くなります。そうした処理には Docker のボリュームを使います。
  • x86 のみ。Swarm の暗号化 overlay ネットワークはなく、内部に SELinux や AppArmor もありません。kcell ではネスト仮想化を有効にできません。
  • GPU の共有には第 12 世代以降の Intel 内蔵 GPU が必要です。AMD と NVIDIA は未対応です。
  • keelNAS の共有をメディアライブラリにする項目はフォームにありますが、実機で最初から通しては試していません。

記事を読む(中国語) →

← 機能一覧