1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Docker】コンテナランタイムの追加方法

Last updated at Posted at 2022-11-19

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が作成されていない場合は、新規に作成します。

/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環境にて利用可能なコンテナランタイムを追加する方法を紹介しました。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?