【ランシー】

runC とは?

💡 コンテナを実際に「走らせる」最小単位のエンジン
📌 このページのポイント
runC — コンテナ実行の最小単位 ユーザー docker run nginx Docker デーモン コンテナ管理・API受付 containerd イメージ・ライフサイクル管理 runC OCI準拠の低レベル実行エンジン コンテナプロセス起動完了 runC の主な役割 namespace 設定 PID / Network / Mount を分離 cgroups 設定 CPU・メモリ使用量を制限 プロセス起動 OCI spec.json を読み exec() ライフサイクル管理 起動 / 一時停止 / 削除 Docker / Kubernetes / Podman はすべて内部で runC を呼び出す
runCのコールスタック:docker→containerd→runC→プロセス
ひよこ ひよこ

runCって聞いたことなかったけど、Dockerと何が違うの?

ペンギン先生 ペンギン先生

Dockerコンテナの「管理ツール」全体で、runCはその中でコンテナを実際に「起動する」最小単位のエンジンだよ。ユーザーがdocker runを実行すると、裏ではDockercontainerd→runCという順番で呼び出されて、最終的にrunCがプロセスを立ち上げているんだ。

ひよこ ひよこ

じゃあ普通の開発者はrunCを直接使うことないの?

ペンギン先生 ペンギン先生

普段はほぼないよ。runCはKubernetescontainerdが内部で呼び出すもので、エンドユーザーは意識しなくていいんだ。でもコンテナランタイムトラブルシューティングセキュリティ調査をする立場になると、この仕組みを知っていると原因特定が速くなるよ。

ひよこ ひよこ

どうしてDockerはrunCをOCIに寄贈したの?

ペンギン先生 ペンギン先生

コンテナ技術を特定の企業が独占するのではなく、業界標準にした方が普及するという判断があったんだよ。2015年にDockerがlibcontainerをrunCとしてOCIに寄贈したことで、PodmanKubernetesなどの他のツールも同じ実装を使える共通基盤ができたんだ。

ひよこ ひよこ

containerdとrunCはどう役割が違うの?

ペンギン先生 ペンギン先生

containerdコンテナのイメージ管理・ネットワーク・ストレージなど「コンテナの一生全体」を管理する高レベルな層で、runCはその中の「コンテナプロセスを実際に起動・停止する」という一点に特化した低レベルな層なんだよ。containerdがrunCを子プロセスとして呼び出す構造になっているんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「runC」って出てきたら「コンテナを実際に起動するOCI標準の低レベルエンジンのことだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「runC」 = (run + Container の略)
💬 「コンテナ(Container)を走らせる(run)」という意味が込められた名前だよ
← 用語集にもどる