2025年版｜主要コンテナ実行環境の現在地と未来展望

## サマリ
本記事は、Kubernetes 時代におけるコンテナ実行環境の選択肢を俯瞰することを目的に、runc / crun / gVisor / Kata Containers / WasmEdge といった主要なランタイムの構成や特徴を整理した内容です。

Webで調べられる範囲の公開情報に基づいた観点整理を中心にしており、技術的な網羅性や導入実績に基づく実証には至っていない点をご留意ください。またこれまでの経験や疑問からの推測要素を多分に含んでいます。現時点での理解を共有するための素材として、ユースケースや構成検討の参考になれば幸いです。

***

コンテナ技術に関わるようになってから、ずっと「実行環境って結局どう整理すればいいのか？」という疑問を抱えてきました。（立場上、ユーザランドならPodman 一択ではありますが。）

Docker、Podman、containerd、CRI-O──言葉は知っていても、それぞれの役割や関係性を明確に説明するのは案外むずかしい。さらに最近では、runc や crun、gVisor、Kata Containers、WasmEdge など、実行ランタイムの選択肢も広がり、ますます構造が見えづらくなってきたと感じています。

この記事では、自分自身の整理も兼ねて、2025年時点でのコンテナ実行環境について、とくに「実行ランタイム」にフォーカスして構造と選択肢をまとめました。

情報収集を中心に知ったことを整理してみたものをまとめた状態ですが、同じようにモヤモヤを感じている方の整理の一助になればうれしいです。

## 用語の整理

「コンテナ実行環境」と一言で言っても、Podman や Docker、runc、gVisor…といった様々な名前が出てきて混乱しがちです。本記事ではまず、それらがどのレイヤに属し、どう関係しているのかを整理します。

### コンテナ実行スタックの3階層

コンテナの実行環境は、以下の3層構造として捉えると分かりやすくなります。

```
┌────────────────────────────┐
│ [1] CLI/操作ツール層         │← Docker, Podmanなど（ユーザーが直接触れる）  
└────────────────────────────┘
             ↓
┌────────────────────────────┐
│ [2] 実行エンジン層（CRI）     │← containerd, CRI-O（Kubernetesが使う中核）  
└────────────────────────────┘
             ↓
┌────────────────────────────┐
│ [3] 実行ランタイム層          │← runc, crun, gVisor, Kataなど（実行の最終担当）  
└────────────────────────────┘
```

※ CLI層：人が操作するインターフェース。実行エンジン層：Kubernetesなどが呼び出す中間管理。ランタイム層：実際にプロセスを起動。

### 各レイヤの主な構成要素と役割
3つの層を単純に並べるといずれも取捨選択できそうな雰囲気を感じてしまいますが、実際、組み合わせには制限があります。実行ランタイムを軸に表にまとめると、現在では、以下のように整理できそうです。尚、ここでは、コンテナを操作するためのユーザーインタフェースを提供するものという解釈で、kuberntesもCLI層として並べています。


| 実行ランタイム                 | 主な特徴                   | CLI層（操作層）例            | 実行エンジン層（中間）                 |  備考                               |
| ----------------------- | ---------------------- | --------------------- | --------------------------- | -------------------------------- |
| **runc**                | デファクト標準。OCI準拠で安定性高     | Docker / Podman / Kubernetes | containerd / CRI-O          | 最も広く利用されている                      |
| **crun**                | 高速・軽量。rootless対応も優秀    | Podman                | ―（Podmanが直接ランタイムを起動）             | Podmanのデフォルトに採用されつつある            |
| **gVisor**              | syscall中継で高隔離。セキュリティ志向 | Kubernetes（※Podmanは限定的） | containerd（+shim）          | `runsc`として設定すればPodmanでも起動可能だが限定的 |
| **Kata Containers**     | 軽量VMで実行。高セキュリティ隔離環境    | Kubernetes（※Podmanは限定的）   | CRI-O / containerd（設定要）     | Podmanからは基本非対応。仮想化環境の構築が必要       |
| **WasmEdge / wasmTime** | WebAssembly向け。軽量・高速起動  | Kubernetes（試験段階）      | containerd（+runwasi plugin）  | Kubernetesでは RuntimeClass を通じた WASI サポートが進行中　|

それでは、この表に登場した各ランタイムについて、もう少し掘り下げて特徴やユースケースを見ていきます。

## 1. 今あるコンテナ実行環境
※本記事では「実行ランタイム」をコンテナ実行環境の中核として扱います。

用語の整理でも触れたように、コンテナを本当に「走らせる」のは、最下層にある実行ランタイムです。ここでは、現在利用可能な主要ランタイムを5つ取り上げ、それぞれの特徴・想定される用途・留意点を簡潔に整理します。

### runc（The Standard）
* 概要
    * OCI（Open Container Initiative）仕様に準拠した、最も標準的なランタイム
    * Docker、containerd、CRI-O など広範な実行エンジンで採用

<br>

* 特徴
    * 安定性・互換性が高く、ほとんどのユースケースで問題なく使用可能
    * runc があることを前提に設計されたツールやミドルウェアも多い
    * Linux カーネルが前提だが、systemd の有無には依存しないため、中立性が高い

<br>

* 想定される用途
    * DockerやKubernetesの基本構成における実行基盤
    * Linuxディストロの違いによるギャップを意識したくないケース
    * 汎用性と信頼性を重視した環境

<br>

### crun（軽量＆systemdフレンドリー）

* 概要：
    * crun は runc と同じOCI仕様に準拠しながら、C言語で書かれた軽量ランタイム
    * Podmanプロジェクトと相性がよく、Rootlessコンテナ運用に最適化

<br>

* 特徴：
    * 起動・終了速度が非常に速い（体感できるレベル）
    * systemdとの統合が優れており、Linuxディストリビューション向けにも好相性
    * Rootless 実行における安定性も高い

<br>

* 適していると考えられる用途：
    * Podmanを使った軽量開発・CI/CD環境
    * Rootless構成を前提としたシステム
    * systemdベースのLinuxでの高効率運用

<br>

### gVisor（セキュリティ重視のサンドボックス）

* 概要：
    * Googleが開発した、ユーザ空間でsystem callを中継・再実装する高隔離ランタイム
    * ホストカーネルを直接触らせない構造でセキュリティを強化

<br>

* 特徴：
    * syscall の再実装により高いセキュリティ隔離を実現
    * I/O や一部の機能に性能制限がある点には留意が必要
    * Kubernetesでは RuntimeClass を通じた利用が想定されている

<br>

* 適していると考えられる用途：
    * 信頼性の低いコードや外部コードの実行
    * SaaS型マルチテナント環境におけるアプリケーション隔離
    * セキュリティ重視のサンドボックス型構成

<br>

### Kata Containers（ハードウェア分離の実行環境）

* 概要：
    * コンテナを仮想マシン内で実行する軽量VM型ランタイム
    * セキュリティと互換性を両立しようとする構成

<br>

* 特徴：
    * ホストとは物理的にカーネルを分離した高隔離性
    * 専用の仮想化支援が必要で、導入ハードルはやや高め
    * 起動時間は通常のコンテナよりやや長め

<br>

* 適していると考えられる用途：
    * 高度な分離性が求められる業界（金融・医療・公共など）
    * Confidential Computing やハードウェアセキュリティ連携環境
    * 強隔離型ワークロード
<br>


### WasmEdge / wasmTime（WebAssemblyベース）
* 概要：
    * WebAssemblyをOCI準拠で実行する軽量ランタイム
    * 高速起動・超軽量・プラットフォーム非依存性が特徴

<br>

* 特徴：
    * バイナリサイズが小さく、起動が高速（ミリ秒単位）
    * ホストとの結合が薄く、分離・移植性が高い
    * Kubernetesでの運用には runwasi プラグインなど追加構成が必要

<br>

* 想定される用途：
    * IoT・エッジ・ML推論など、超高速スケーリングが求められる環境
    * 実験的Serverlessアーキテクチャの検証
    * コンテナに代わる軽量実行モデルの評価

※本記事で記述している「想定される用途」および「適していると考えられる用途」は、筆者自身の理解と調査に基づいたものです。実際の導入にあたっては、各環境・要件に応じた検証をおすすめします。

次章では、これらのランタイムがどのようにCLIツールや実行エンジンと組み合わされて使われているかを、より実践的な構成例とともに見ていきます。


## 2. 各実行環境の特徴（ユースケース視点）

各ランタイムの概要と基本的な適用領域を整理したうえで、ここでは少し視点を変えて、「どのようなユースケースで、どの実行環境が“選択肢に入るか”」の比較をまとめてみます。

| ユースケースカテゴリ            | runc | crun | gVisor | Kata | WasmEdge |
| --------------------- | ---- | ---- | ------ | ---- | -------- |
| 開発環境（一般的なローカル実行）      | ◎    | ◎    | △      | △    | ×        |
| CI/CD パイプライン（高速性重視）   | ◯    | ◎    | △      | ×    | △        |
| Rootless / 非特権実行      | ◯    | ◎    | △      | ×    | ×        |
| セキュリティ隔離が求められる実行環境    | △    | △    | ◎      | ◎    | ◯        |
| VM 分離レベルでの隔離が求められるケース | ×    | ×    | △      | ◎    | ×        |
| WebAssembly 実行（WASI）  | ×    | ×    | ×      | ×    | ◎        |
| 実験・研究用途               | ◎    | ◎    | ◎      | ◯    | ◎        |

※ ◎：非常に適している / ◯：適している / △：限定的に可 / ×：基本非対応

現時点の選択肢を整理すると、実行ランタイムの選定は「性能」や「機能」だけでなく、実行ポリシー（隔離の強さ、可搬性、起動速度など）も含めて決定する状況にあると考えられます。
一方で、一言「セキュリティー隔離」といってもだいぶ主語がおおきくて、実際の要件は、何に対するどんなリスクにたいする対策が必要なのか（合理的なのか）によって、選択結果は変わってきそうです。期待値の置き方に戸惑うポイントではありますが、それほど詳しく書き下ろせないので、この点はご容赦ください。

## 3. 今後の展開・注目点

実行ランタイムを取り巻く環境は、Kubernetes の普及とともに成熟しつつありますが、セキュリティ要件の高まりや、実行対象の多様化（例：WASMやAIワークロード）により、今後も進化が続いていくことが予想されます。ここでは、現時点で見えているいくつかの注目点を簡単に整理します。

### 1. セキュリティと分離性：ランタイムレイヤの“二極化”
ホストKernelの共有に対するスタンスとして、runc や crun をベースとした軽量・高速志向と、gVisor や Kata のような高隔離志向は、当面の方向性の柱となるのではないかと考えます。
特に、クラウドネイティブなマルチテナント環境では、「runc で基本を構築しつつ、一部ワークロードだけ Kata で分離」といったハイブリッド運用も事例が出てきているようです。
外部リンク：[Kata Containers — IBM Cloud Case Study](https://medium.com/kata-containers/kata-containers-ibm-cloud-case-study-c8189514ec9c)


### 2. Rootless / User Namespace 対応の浸透
crun のような Rootless 実行対応ランタイムの広がりにより、開発環境での権限分離やポータブル性の向上が実用レベルに。実際、Podman や Buildah を使った非特権ユーザーでのイメージビルド・実行は今後も主流になる可能性があります。

### 3. WebAssembly（WASM）のコンテナ代替としての拡大
WebAssembly の実行ランタイム（WasmEdge など）は、Podman や Kubernetes の RuntimeClass 機能と連携し、runc 互換ランタイムとしての動作が実現されつつあります。特に crun の一部ビルドでは WebAssembly 実行対応が進み、OCIイメージから .wasm を実行可能な構成も整ってきています。
ただし、WASI 準拠に限られることや、Linux syscall 非対応、周辺ツールとの統合の成熟度といった点から、まだ用途を選ぶ段階ではあります。主にエッジ・IoT・関数型マイクロワークロードなどでの活用が想定されます。


#### 4. 標準仕様の拡張と分岐（OCI / CRI のその先）
OCI や CRI に準拠することは引き続き重要ですが、たとえば WASM や VMM ベースランタイムなど、従来の仕様に収まらない実行モデルも増えてきました。各ランタイムが「OCI準拠だけでは語れない個性」を持つ時代に突入していくように思います。

## 4. 参考リンク集
本記事では、現在利用可能な主要なコンテナ実行ランタイム（runc / crun / gVisor / Kata Containers / WasmEdge）について、構成の違いや適用場面の観点から整理を試みました。

多様化するワークロードやセキュリティ要件に応じて、実行環境も「単一の標準」ではなく、「適材適所の選択と使い分け」が求められる時代に入っていると感じます。特に、Podman や Kubernetes の進化により、ユーザー空間・仮想化・WASM 実行といった新たな選択肢が実用域に達しつつあります。

なお、ここで取り上げた情報の多くは、筆者による検証や公開記事・事例に基づいています。以下に出典となる参考リンクをまとめます。

### 出典・参考リンク一覧

* [Kata Containers — IBM Cloud Case Study](https://medium.com/kata-containers/kata-containers-ibm-cloud-case-study-c8189514ec9c)
* [Podman + crun + WasmEdge 連携紹介（クラスメソッド）](https://dev.classmethod.jp/articles/exe-wasm-from-runwasi-and-podman-crun-wasmedge/)
* [AWS + Kata Containers on EKS](https://aws.amazon.com/blogs/containers/enhancing-kubernetes-workload-isolation-and-security-using-kata-containers/)
* [WasmEdge 公式：Kubernetes 連携情報](https://docs.wasmedge.org/)
* [Kubernetes RuntimeClass（公式ドキュメント）](https://kubernetes.io/docs/concepts/containers/runtime-class/)
* [gVisor 公式プロジェクトページ](https://gvisor.dev/)

引き続き、検証や事例が進展すれば、追記・アップデートしていく予定です。