📦

runC: 分かり易く解説 (第2回) - 環境構築編

2023/11/12に公開

Dockerの中核コンテナ技術であるrunCについて、以下の通りいくつかの記事に分けて分かり易く解説します。もしかしたら、実際にrunCを動かしてから、第2回の内容に目を通した方が理解が進むかもしれません。

runCインストール

前提条件

runCインストール自体は簡単です。ただし、大抵の場合は大丈夫かと思いますが、runCを利用するには前提としてLinux Kernelがcgroups機能をサポートしている必要があります。

cgroupsとは?

プロセスグループのリソース(CPU、メモリ、ディスクI/Oなど)の利用を制限・隔離するLinuxカーネルの機能です。

cgroupsの確認方法

以下のように/proc/cgroupsが存在していれば、大丈夫です。

$ cat /proc/cgroups 
#subsys_name	hierarchy	num_cgroups	enabled
cpuset	3	1	1
cpu	4	1	1
cpuacct	4	1	1
blkio	12	1	1
memory	11	1	1
devices	5	89	1
freezer	8	1	1
net_cls	2	1	1
perf_event	6	1	1
net_prio	2	1	1
hugetlb	7	1	1
pids	9	95	1
rdma	10	1	1

インストール手順

これだけです。

sudo apt install runc

runC環境構築

一番難しい、runC設定ファイルのconfig.jsonについて解説します。

config.jsonは通常runCで動かしたいコンテナディレクトリのルートに配置します。この辺は次の実際にrunCでUbuntu18.04を動かす編で実例を示しますので、ここでは文法・設定意味的な部分を解説します。

config.jsonの作成

すみません、現在準備中です。随時更新中ですので、しばらくお待ち下さい。

ひな形の作成

以下のコマンドでひな形のconfig.jsonを作成可能です。

runc spec

基本的な使い方

コンテナ作成

sample_containerという名前のコンテナを作成して実行します。

sudo runc create sample_container

コンテナ一覧確認

sudo runc list

コンテナ動作開始

sudo runc start sample_container

コンテナ作成と動作開始を1コマンドで対応

sudo runc run sample_container

作成したコンテナ内で処理を実行

作成したコンテナの中でlsコマンドを実行する例です。

sudo runc exec sample_container ls

コンテナ動作停止

コンテナを停止します。

sudo runc kill sample_container

killでコンテナが停止しない(ステータスがstoppedにならない)場合、最終手段として以下を利用します。

sudo runc kill sample_container KILL

コンテナ削除

コンテナを削除します。

sudo runc delete sample_container

参考リンク

config.json

ケイパビリティ設定

Discussion