
オープンソースの次世代「runc」。rootlessコンテナがSystemd、Docker、Kubernetesなどのワークロードを、VMと同様に実行できるようにします。
Sysbox は、オープンソースかつ無料のコンテナランタイム(特殊化された「runc」)です。元々はNestyboxによって開発され(2022年5月にDockerが買収)、以下の2つの重要な方法でコンテナを強化します:
コンテナ分離の強化:
すべてのコンテナでLinuxユーザー名前空間を使用(つまり、コンテナ内のrootユーザー はホスト上では特権を一切持ちません)。
コンテナ内のprocfsおよびsysfsの一部を仮想化。
コンテナ内でホスト情報を隠蔽。
コンテナの初期マウントをロックする、など。
コンテナがVMと同じワークロードを実行できるようにする:
Sysboxを使用すると、コンテナはsystemd、Docker、Kubernetes、K3s、buildx (マルチアーキテクチャビルドを含む)、レガシーアプリ、マルチアーキテクチャ アプリなどのシステムレベルのソフトウェアを、シームレスかつ安全に実行できます。
このソフトウェアは、変更を加えることなく、また特別なバージョンのソフトウェア (例:rootlessバリアント)を使用することなく、Sysboxコンテナ内で実行できます。
特権コンテナも、複雑なイメージも、厄介なエントリーポイントも、特別な ボリュームマウントも不要です。
これは**「コンテナスーパーチャージャー」**のようなものです。既存のコンテナマネージャー/ オーケストレーター(例:Docker、Kubernetesなど)が、強化された分離性を持ち、VMで実行される ほとんどすべてのワークロードを実行できるコンテナをデプロイできるようにします。
Sysboxは、高度なOS仮想化技術を使用して、コンテナを可能な限りVMのような環境に近づけること でこれを実現します。
KataやKubeVirtなどの代替ランタイムとは異なり、VMは使用しません。これにより(特にネストされた 仮想化を回避することでクラウド環境での)使用が容易になりますが、VMベースのランタイムが提供する レベルの分離性は提供されません。比較についてはこちらを 参照してください。
Sysboxを利用するために、新しいツールを学んだり、既存のコンテナイメージやワークフローを変更 したりする必要はありません。インストールして、コンテナマネージャー/オーケストレーターにそれを 指定するだけで、強化されたコンテナをデプロイできます。
Sysboxは、同じホスト上の他のコンテナランタイム(例:デフォルトのOCI runc、Kataなど)と共存 できます。ニーズに応じて、それぞれで実行するコンテナやポッドを簡単に選択できます。
Sysboxは無料かつオープンソースであり、Apache License Version 2.0の下でライセンスされています。詳細についてはLICENSEファイルを参照してください。
Sysboxは元々Nestyboxによって開発されました。Nestyboxは現在Dockerの一部となっているため、DockerがSysboxプロジェクトの主要スポンサーです。
とはいえ、Sysboxはコミュニティのオープンソースプロジェクトであり、Dockerによる公式サポートは受けていません(つまり、DockerのサブスクリプションにはSysboxのサポートは含まれません)。サポートは、このGitHubリポジトリまたはSysbox Slackワークスペースを通じてベストエフォートで提供されます。
Sysboxの進化と改善に協力してくれるコミュニティからの参加を歓迎します。Sysboxが可能にするユースケースと利点を増やすことを目標としています。外部のメンテナーやコントリビューターも歓迎します。
Sysboxは以下のような問題を解決します:
コンテナ化されたマイクロサービスの分離性の強化 (コンテナ内のrootはホスト上の非特権ユーザーにマッピングされます)。
ホストのセキュリティを損なうことなく、コンテナ内で高機能なrootユーザーを 有効化。
安全でない特権コンテナやホストのDockerソケットマウントを使用せずに、 Docker-in-Docker(DinD)やKubernetes-in-Docker(KinD)を可能にすることで、 CI/CDパイプラインを保護。
「VMのような」環境としてコンテナを開発、ローカルテスト、学習などに使用できる ようにし、強力な分離性と、コンテナ内でsystemd、Docker、IDEなどを実行する 能力を提供。
コンテナ内でレガシーアプリを実行(効率の低いVMの代わりに)。
VMを、より簡単で、高速で、効率的で、移植性の高いコンテナベースの代替手段に 置き換え。クラウド環境全体に簡単にデプロイ可能。
ベアメタルホストを、VMの2倍の密度を持つ複数の分離されたコンピューティング環境 に分割(つまり、同じハードウェア上で同じパフォーマンスを維持しながら、VMの 2倍の数のVMのようなコンテナをデプロイ)。
高価なネストされた仮想化に頼ることなく、クラウドインスタンス(例:EC2、GCPなど) を複数の分離されたコンピューティング環境に分割。
SysboxはLinuxホスト(ベアメタル、VM、オンプレミス、クラウドなど)に簡単にインストールできます。主要なクラウドベースのIaaSおよびKubernetesサービス(例:EC2、GCP、GKE、EKS、AKS、Rancherなど)で動作します。
インストール後、Sysboxは裏方として動作します。DockerやKubernetesなどを使用して、Sysboxでコンテナをデプロイします。
例えば、以下の簡単なDockerコマンドでSysboxを使用したコンテナを作成できます:
$ docker run --runtime=sysbox-runc -it any_image
分離性に優れたコンテナが得られ、マイクロサービスだけでなく、通常VM上で実行されるシステムレベルのソフトウェア(例:systemd、Docker、Kubernetesなど)もシームレスに実行できます。
Sysboxの使用方法の詳細はこちら。
図のように、Sysboxは非特権コンテナがsystemd、Docker、Kubernetesなどのシステムレベルのワークロードをシームレスに実行できるようにしつつ、コンテナ分離、パフォーマンス、効率性、移植性のバランスの取れたアプローチを提供します。
そして、既存のインフラへの設定変更は最小限で済みます。Sysboxをインストールし、コンテナマネージャー/オーケストレーターを設定して、お好みのイメージを使用してコンテナを起動するだけです。
Sysboxは標準コンテナの分離性を強化し、多くのシナリオで安全でない特権コンテナの必要性をなくしますが、(まだ)VMベースの代替手段やgVisorのようなユーザースペースOSと同じレベルの分離性は提供していないことに注意してください。したがって、最高レベルの分離性が要求されるシナリオでは、KubeVirtなどの代替手段が好ましい場合があります(パフォーマンスと効率性の低下、複雑さとコストの増加を代償とします)。
詳細については、このブログ記事を参照してください。
Sysboxプロジェクトは、システムコンテナを使用して実験、発明、学習、システム構築をしたいと考えているすべての人を対象としています。最先端のOS仮想化であり、貢献を歓迎します。
2022年5月のDockerによる買収以前、NestyboxはSysboxの拡張版(例:より高いセキュリティ、より多くのワークロード、公式サポート)としてSysbox Enterpriseを提供していました。
しかし買収後、Sysbox Enterpriseはスタンドアロン製品としては提供されなくなり、代わりにDocker Desktopに組み込まれました(Docker Hardened Desktopを参照)。
注記: Sysbox Enterpriseはスタンドアロン製品として提供されなくなったため、DockerはSysbox Enterpriseの一部の機能をSysbox Community Editionで利用可能にする予定です。機能は未定(TBD)であり、これに関するご意見・フィードバックを歓迎します。
以下の表は、Sysboxコンテナランタイムの主要機能をまとめたものです。また、Sysbox Community Edition(つまりこのリポジトリ)と、以前利用可能だったSysbox Enterprise Edition(現在は非推奨)との比較も示しています。
Sysboxの機能の詳細はこちら。
ご質問がある場合は、こちらからお問い合わせください。
Sysboxによってデプロイされるコンテナをシステムコンテナと呼びます。これは、(通常のコンテナのように)マイクロサービスだけでなく、Docker、Kubernetes、Systemd、内部コンテナなどのシステムソフトウェアも実行できるという事実を強調するためです。
システムコンテナの詳細はこちら。
Sysboxのホストは以下の要件を満たしている必要があります:
サポートされているLinuxディストリビューションのいずれかを実行しており、サポートされているアーキテクチャ(例:amd64、arm64)のマシンであること。
最低4 CPU(例:2コア、各2ハイパースレッド)と4GBのRAMを推奨します。これは必須 要件ではありませんが、これより小さい構成ではSysboxの動作が遅くなる可能性が あります。
インストール方法は、Sysboxがインストールされる環境によって異なります:
KubernetesクラスターにSysboxをインストールするには、sysbox-deploy-k8s daemonsetを使用します。
それ以外の場合は、ご利用のディストリビューション向けのSysboxパッケージを使用します。
または、ご利用のディストリビューション向けのパッケージがまだ利用できない場合、 あるいはアップストリームの最新の変更を取得したい場合は、ソースからSysboxをビルドしてインストールできます。
Sysboxがインストールされると、コンテナマネージャーまたはオーケストレーター(例:DockerやKubernetes)と、お好みのイメージを使用してコンテナを作成します。
Dockerコマンドの例:
$ docker run --runtime=sysbox-runc --rm -it --hostname my_cont registry.nestybox.com/nestybox/ubuntu-bionic-systemd-docker
root@my_cont:/#
Kubernetesポッド仕様の例:
apiVersion: v1
kind: Pod
metadata:
name: ubu-bio-systemd-docker
annotations:
io.kubernetes.cri-o.userns-mode: "auto:size=65536"
spec:
runtimeClassName: sysbox-runc
containers:
- name: ubu-bio-systemd-docker
image: registry.nestybox.com/nestybox/ubuntu-bionic-systemd-docker
command: ["/sbin/init"]
restartPolicy: Never
任意のコンテナイメージを選択できます。Sysboxはイメージに要件を課しません。
Nestyboxは、DockerhubとGitHub Container Registryリポジトリでいくつかのリファレンスイメージを提供しています。これらは通常、コンテナ内にsystemd、Docker、Kubernetesなどを含むイメージです。Dockerfileはこちらにあります。必要に応じて自由に使用・変更してください。
良質なドキュメントの提供に努めています。これはSysboxプロジェクトの重要な構成要素です。Sysboxの入門と最大限の活用に役立つドキュメントをいくつか用意しています。
Sysboxは高速かつ効率的です。このNestyboxブログ記事で説明されています。
Sysboxによって作成されたコンテナは、OCI runc(DockerとKubernetesのデフォルトランタイム)によって作成されたコンテナと同様のパフォーマンスを持ちます。
システムコンテナ内にデプロイされたコンテナでさえ優れたパフォーマンスを発揮しますが、ネットワークIOにはわずかなオーバーヘッドがあります(内部コンテナが発するパケットはシステムコンテナ内の追加のネットワークインターフェース/ブリッジを通過するため、予想どおりです)。
VMを置き換えるシステムコンテナをSysboxでデプロイする場合、パフォーマンスと効率性の向上は顕著です。同じサーバー上でVMの2倍の数のシステムコンテナをデプロイし、同じパフォーマンスを得ることができ、しかもメモリとストレージの消費はわずかで済みます。上記で参照したブログ記事に詳細があります。
Sysboxは2019年初頭に優れたOCI runcからフォークされ、OCI runc開発者の成果の上に成り立っています。
とはいえ、Sysboxはその上に重要な機能を追加しています。Goで書かれており、現在はsysbox-runc、sysbox-fs、sysbox-mgrの3つのコンポーネントで構成されています。
SysboxはLinuxカーネルの多くのOS仮想化機能を使用し、これらをユーザースペースで実装されたOS仮想化技術で補完しています。これには、すべてのLinux名前空間(特にユーザー名前空間)の使用、procfsとsysfsの部分的な仮想化、選択的なsyscallトラッピングなどが含まれます。
Sysboxの設計の詳細は、Sysboxユーザーガイドに記載されています。
Sysboxによって生成されるコンテナは、いくつかの点で仮想マシンに似ていますが(例:rootとして実行でき、複数のサービスを実行でき、内部にDockerやK8sをデプロイできます)、Sysboxはハードウェア仮想化を使用しません。
Sysboxは、アプリケーションだけでなくシステムレベルのソフトウェアも簡単かつ安全に実行できるコンテナを作成するための、純粋なOS仮想化技術です。
これにより、Sysboxが作成するコンテナは高速で、効率的で、移植性が高くなります(つまり、ハイパーバイザーに依存しません)。
分離性に関して言えば、Sysboxコンテナは通常のDockerコンテナよりも強力な分離性を提供しますが(Linuxユーザー名前空間と軽量なOSシムを使用するため)、VMよりも弱い分離性を提供します(コンテナ間でLinuxカーネルを共有するため)。
Sysboxへの貢献を歓迎します。小さなドキュメントの変更、バグ修正、機能追加のいずれでも構いません。詳細については、貢献ガイドラインと開発者ガイドを参照してください。
Sysboxがコンテナをどのようにセキュリティ保護するかについては、ユーザーガイドのセキュリティの章を参照してください。
Sysboxの脆弱性を露呈する可能性のあるバグや問題を発見した場合は、[email protected]にメールを送信して報告してください。このリポジトリにセキュリティに関するissueを開かないでください。よろしくお願いします!
さらに、最近Linuxカーネルでいくつかの脆弱性が発見されており、場合によってはSysboxコンテナが提供する拡張分離性を低下させたり無効にしたりするものもあります。幸いなことに、それらはすべて最近のLinuxカーネルで修正されています。詳細については、Sysboxユーザーガイドの脆弱性とCVEの章を参照し、さらなる質問についてはSysbox Slackチャンネルまでお問い合わせください。
サポートは現在、ベストエフォートで提供されています。
ご質問やコメントがあれば、ぜひお聞かせください。SlackチャンネルまたはこのGitHubリポジトリのissueでご連絡いただけます。
Sysboxの問題を発見した場合は、既存のissuesを検索してください。問題の説明と回避策が記載されている場合があります。
トラブルシューティングドキュメントもご確認ください。
Sysboxをアンインストールする前に、Sysboxでデプロイされたすべてのコンテナが停止および削除されていることを確認してください。
アンインストール方法は、Sysboxのインストールに使用した方法によって異なります:
KubernetesクラスターでSysboxをアンインストールするには、こちらの手順に従ってください。
それ以外の場合、Sysboxパッケージをアンインストールするには、こちらの手順に従ってください。
ソースからSysboxをビルドおよびインストールした場合は、こちらの手順に従ってください。
以下は、Sysboxのロードマップにある機能のリストです。ユーザーの皆様に今後の方向性をよりよく理解していただき、これらのうちどれを最も好むか(または最も好まないか)についてフィードバックをいただくために、ここに記載しています。以下は短いリストです。Sysboxのissueトラッカーにはさらに多くの機能があります。
より多くのLinuxディストリビューションのサポート。
procfsおよびsysfs仮想化のさらなる改善。
コンテナ分離の継続的な改善。
適切な権限でシステムコンテナ内にホストデバイスを公開。
Slack: Sysbox Slackワークスペース
メール: [email protected]
対応時間は、月曜日から金曜日、太平洋時間の午前9時から午後5時です。
Sysboxを利用および/または貢献していただき、心から感謝します。Sysboxが興味深く、新しいより強力な方法でコンテナを活用する助けとなることを願っています。