【ランシー】

runc(runC) とは?

最終更新:
💡 コンテナのプロセスを、決めた設定で起動する係

OCIランタイム仕様に従い、Linux上でコンテナのプロセスを起動・管理する低レベルのツール。Dockerやcontainerdなどの上位の仕組みと組み合わせて使われる。

📌 このページのポイント
runc:コンテナの起動を担当Docker / containerdなどイメージや実行全体を管理OCIバンドルconfig.json + ルートファイルシステム実行コマンドや環境の設定runcがLinux上でプロセスを起動namespace / cgroupsなどを設定取得・配置と、プロセスの起動を分けよう
役割を簡略化した例。上位から設定とファイルを用意し、runcが起動します。仲介層や別のランタイムを使う構成もあります。
ひよこ ひよこ
Dockerと、どう違うの?
ペンギン先生 ペンギン先生
Dockerはイメージの取得やコンテナの管理などを提供する仕組みだよ。runcは、その中でもLinux上でコンテナのプロセスを実際に起動する低レベルの担当なんだ。Dockerとcontainerdを組み合わせた構成では、その下でruncなどのOCIランタイムが使われるよ。
ひよこ ひよこ
何を受け取って動くの?
ペンギン先生 ペンギン先生
OCIバンドルという、config.jsonとルートファイルシステムなどを用意したものだよ。設定には実行するコマンドや環境変数などが入る。runc specは設定のひな形を作るコマンドで、設定ファイル名がspec.jsonという意味ではないんだ。
ひよこ ひよこ
普通のプログラムとは何が違うの?
ペンギン先生 ペンギン先生
設定に応じてnamespaceで見えるプロセスやネットワークなどを分け、cgroupsで資源の制限などを扱うよ。その環境でプロセスを起動するんだ。設定や権限が大切で、コンテナにしただけで仮想マシンと同じ分離や完全な安全性が得られるわけではないよ。
ひよこ ひよこ
containerdとは、どう分担するの?
ペンギン先生 ペンギン先生
containerdはイメージの転送や保存、コンテナの実行・監視などを管理する上位の仕組みだよ。runcはOCI設定に基づく作成や起動などを担当する。上位との間にはshimという仲介プロセスを使う構成もあるので、図の矢印は役割を簡略化したものだよ。
ひよこ ひよこ
自分でruncを使うべき?
ペンギン先生 ペンギン先生
通常の開発ではDockerやPodmanなどの上位ツールを使うことが多いよ。runcを直接使うのは、ランタイムの動作確認やトラブル調査などの目的がある場合だね。KubernetesやPodmanが必ずruncを使うというわけでもなく、別のランタイムを選ぶ構成もあるよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「runc」って出てきたら「Linuxのコンテナを、設定に従って実際に起動する係」と思えばだいたいOK!
📖 おまけ:英語の意味
「runc」 = OCI仕様に従ってコンテナを動かすツールの名前
💬 公式リポジトリやコマンドは小文字のrunc。runCと表記されることもあるよ。

参考資料

← 用語集にもどる