Red Hat Training

A Red Hat training course is available for RHEL 8

13.2. runc

「 runC」コンテナーランタイムは、Open Container Initiative (OCI) コンテナーランタイム仕様の軽量で移植可能な実装です。runC は、低レベルの機能を多数統合し、コンテナーの実行を可能にします。多くの低レベルコードを Docker と共有しますが、Docker プラットフォームのコンポーネントには依存しません。

runc は Linux 名前空間とライブ移行をサポートしており、移植可能なパフォーマンスプロファイルがあります。また、SELinux、コントロールグループ (cgroups)、seccomp などの Linux セキュリティー機能に完全に対応します。runc でイメージをビルドして実行したり、runc で OCI 互換イメージを実行したりできます。

13.2.1. runc でコンテナーの実行

runc では、コンテナーはバンドルを使用して設定します。コンテナーのバンドルは、config.json という名前の仕様ファイルと、root ファイルシステムを含むディレクトリーです。root ファイルシステムには、コンテナーの内容が含まれます。

バンドルを作成するには、以下を実行します。

$ runc spec

このコマンドは、編集が必要な、必要最小限の構造のみを含む config.json ファイルを作成します。実行するファイルを指定するために args パラメーターを変更する必要があるということが最も重要です。デフォルトでは、argssh に設定されています。

    "args": [
      "sh"
    ],

たとえば、podman を使用して Red Hat Enterprise Linux ベースイメージ (ubi8/ubi) をダウンロードしてエクスポートし、runc でそのイメージ用の新しいバンドルを作成し、config.json ファイルを編集してそのイメージを指定します。次に、コンテナーイメージを作成し、runc を使用してそのイメージのインスタンスを実行します。以下のコマンドを使用します。

# podman pull registry.redhat.io/ubi8/ubi
# podman export $(podman create registry.redhat.io/ubi8/ubi) > rhel.tar
# mkdir -p rhel-runc/rootfs
# tar -C rhel-runc/rootfs -xf rhel.tar
# runc spec -b rhel-runc
# vi rhel-runc/config.json   Change any setting you like
# runc create -b rhel-runc/ rhel-container
# runc start rhel-container
sh-4.2#

この例では、コンテナーインスタンスの名前は rhel-container です。そのコンテナーを実行すると、デフォルトでシェルを起動するため、そのコンテナーからコマンドの検索や実行が可能になります。終了したら、exit と入力します。

コンテナーインスタンスの名前は、ホストで一意のものである必要があります。コンテナーの新しいインスタンスを起動するには、以下を実行します。

# runc start <container_name>

bundle ディレクトリーは、-b オプションで指定できます。デフォルトでは、bundle の値は現在のディレクトリーになります。

runc でコンテナーを起動するには、root 権限が必要になります。runc で利用可能なコマンドとその使用方法をすべて表示するには、 runc --help を実行します。