runcを読む その1
モチベーション
ある日、Youkiというコンテナランタイムが出てきて衝撃を受けた。
自分もコンテナが何か知りたくなったので、runcを読むことにした。
正攻法と挫折
OCIの仕様を読み込むところから始める。
…と思ったが、抽象的過ぎてイメージがつかめない。
ふんわりと分かったこと
①以下のOperationがある
- state
- create
- start
- kill
- delete
②コンテナランタイムを起動するためにはbundle
とconfig.json
が必要
runcの大体の動作を把握する
実際に動かしてみる。
ubuntu18.04からbundle
を取得する
docker run --rm -d --name ubuntu ubuntu:18.04 tail -f /dev/null docker export ubuntu > rootfs.tar docker kill ubuntu mkdir rootfs tar xf rootfs.tar -C rootfs
runc は、runc specで適当なconfig.json
を生成できる。
runc spec
準備完了。runcを実行する。 確かにUbuntu18.04LTSのイメージが実行されている
sudo runc run ubuntu # cat /etc/os-release NAME="Ubuntu" VERSION="18.04.6 LTS (Bionic Beaver)" ID=ubuntu (中略) # exit cat /etc/os-release NAME="Ubuntu" VERSION="20.04.5 LTS (Focal Fossa)" ID=ubuntu (中略)
runc runを実行できた。 次回から、runc のコードリーディングを本格的に進めていく。