0. はじめに
本稿では、Ubuntu環境にてコンテナランタイムを追加する方法を示します。特定のコンテナランタイムに限った話ではありませんが、説明の都合上、今回はcrunを追加する方法を紹介します。
0.1 前提条件
参考として、OS、カーネル、Dockerのバージョン情報を示します。
# uname -ov
#59~20.04.1-Ubuntu SMP Thu Jun 16 21:21:28 UTC 2022 GNU/Linux
# uname -r
5.13.0-52-generic
# sudo docker -v
Docker version 20.10.17, build 100c701
1. 利用可能なコンテナランタイムの確認
以下のコマンドで利用可能なコンテナランタイムのリスト(Runtimes)とデフォルトのコンテナランタイム(Default Runtime)を確認できます。
# sudo docker info | grep -i runtime
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
例えば、Runtimesの中にあるio.containerd.runc.v2をコンテナランタイムとして利用したい場合は、以下のように、--runtimeのオプションを用いてコンテナを作成します。
# sudo docker run --runtime=io.containerd.runc.v2 --name=test-hello hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
(省略)
以下のように、作成したコンテナのコンテナランタイムを確認すると、io.containerd.runc.v2が利用されていると分かります。
# sudo docker inspect test-hello | grep -i runtime
"Runtime": "io.containerd.runc.v2",
"CpuRealtimeRuntime": 0,
一方で、Runtimesに登録されていないコンテナランタイムを指定すると、以下のようなエラーとなります。
# sudo docker run --runtime=crun hello-world
docker: Error response from daemon: Unknown runtime specified crun.
See 'docker run --help'.
これまでの手順から分かるように、利用したいコンテナランタイムをRuntimesに追加すれば、コンテナランタイムとして利用できると分かります。
2. 利用したいコンテナランタイムをRuntimesに追加
一言で説明すると、/etc/docker/daemon.jsonにコンテナランタイムの実行パスを記載します。
以降は、具体的なコンテナランタイムとしてcrunを対象とした説明をします。
2.1 crunのインストールと実行パスの確認
先ずは、crunをインストールします。
# sudo apt install crun
実行パスを確認します。
# which crun
/usr/bin/crun
2.2 crunをRuntimesに追加
/etc/docker/daemon.jsonにcrunの実行パスを追加します。
尚、/etc/docker/daemon.jsonが作成されていない場合は、新規に作成します。
{
"default-runtime": "runc",
"runtimes": {
"crun": {
"path": "/usr/bin/crun"
}
}
}
dockerデーモンを再起動して設定を反映させます。
# sudo systemctl restart docker
利用可能なコンテナランタイムリスト(Runtimes)を確認すると、crunが追加されていると分かります。
# sudo docker info | grep -i runtime
Runtimes: crun io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
2.3 動作確認
コンテナランタイムとしてcrunを指定したコンテナを作成します。
# sudo docker run --runtime=crun --name=crun-hello hello-world
unknown seccomp syscall `close_range` ignored
unknown seccomp syscall `epoll_pwait2` ignored
Hello from Docker!
This message shows that your installation appears to be working correctly.
(省略)
seccompのアラート(unknown seccomp syscall xxx)が気になる場合は、--secyruty-opt seccomp=unconfinedのオプションを付けるとなくなります。
# sudo docker run --runtime=crun --name=crun-hello --security-opt seccomp=unconfined hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
(省略)
作成したコンテナのランタイムを確認すると、無事にcrunが指定されているとわかります。
# sudo docker inspect crun-hello | grep -i runtime
"Runtime": "crun",
"CpuRealtimeRuntime": 0,
3. まとめ
Ubuntu環境にて利用可能なコンテナランタイムを追加する方法を紹介しました。
参考