第21章 コンテナー

以下の章では、コンテナーに関する RHEL 8 と RHEL 9 の間の最も重要な変更点を説明します。

21.1. コンテナーに関する主な変更点

container-tools メタパッケージが利用可能に

container-tools RPM メタパッケージには、Podman、Buildah、Skopeo、CRIU、Udica、および必要なすべてのライブラリーが含まれており、RHEL 9 で利用できます。安定したストリームは RHEL 9 では利用できません。Podman、Buildah、Skopeo などへの安定したアクセスを受けるには、RHEL EUS サブスクリプションを使用します。

container-tools メタパッケージをインストールするには、次のコマンドを実行します。

  • container-tools メタパッケージをインストールします。

    $ sudo dnf install container-tools

コントロールグループのパフォーマンスの向上

以前のバージョンのコントロールグループ cgroups バージョン 1 (cgroup v1) では、さまざまなアプリケーションでパフォーマンスの問題が発生しました。コントロールグループの最新リリースである cgroup バージョン 2 (cgroup v2) により、システム管理者はパフォーマンスの問題を発生させずに、どのアプリケーションのリソースも制限できます。

RHEL 9 では、コントロールグループの新しいバージョンである cgroupsv2 がデフォルトで有効になっています。

Podman が、セキュアな短縮名に対応

イメージの短縮名のエイリアスは、[aliases] テーブルの registries.conf ファイルに設定できるようになりました。short-names モードは以下のようになります。

  • Enforcing:イメージのプル中に一致するエイリアスが見つからない場合、Podman はユーザーが非修飾レジストリーのいずれかを選択するよう求めます。選択したイメージを正常に取得すると、Podman は、$HOME/.cache/containers/short-name-aliases.conf ファイル (ルートレスユーザー) および /var/cache/containers/short-name-aliases.conf (root ユーザー) に新しい短縮名のエイリアスを自動的に記録します。ユーザーを要求できない場合 (stdin や stdout など) が TTY ではない場合は、Podman は失敗します。short-name-aliases.conf ファイルは、両方が同じエイリアスを指定する場合、registries.conf ファイルよりも優先されることに注意してください。RHEL 9 では、Enforcing モードがデフォルトです。
  • Permissive:enforcing モードと似ていますが、ユーザーにプロンプトが表示されないと Podman は失敗しません。代わりに、Podman は指定された順序で修飾されていないすべてのレジストリーを検索します。エイリアスは記録されないことに注意してください。RHEL 8 では、permissive モードがデフォルトです。

以下に例を示します。

unqualified-search-registries=["registry.fedoraproject.org", "quay.io"]
[aliases]
"fedora"="registry.fedoraproject.org/fedora"

registries.conf のデフォルトコンテナーレジストリー

コンテナーレジストリーのリストは、/etc/containers/registries.conf では root ユーザー、$HOME/.config/containers/registries.conf では root 以外のユーザーとして検索できます。registries.conf ファイルを変更することで、システム全体の検索設定におけるデフォルト値を変更できます。

RHEL 8 の場合、unqualified-search-registries は次のようになります。

unqualified-search-registries = ["registry.access.redhat.com", "registry.redhat.io", "docker.io"]
short-name-mode = "permissive"

RHEL 9 の場合、unqualified-search-registries は次のようになります。

unqualified-search-registries = ["registry.access.redhat.com", "registry.redhat.io", "docker.io"]
short-name-mode = "enforcing"

デフォルトの OCI ランタイムの変更

crun OCI ランタイムが、container-tools:rhel8 モジュールで利用できるようになりました。crun コンテナーランタイムは、コンテナーがルートレスユーザーの追加グループにアクセスできるようにするアノテーションに対応しています。これは、setgid が設定されたディレクトリーでボリュームをマウントする場合、またはユーザーがグループアクセスのみを持つ場合にコンテナー操作を行う際に役立ちます。

  • RHEL 8 のデフォルトコンテナーランタイムは runc です。
  • RHEL 9 のデフォルトコンテナーランタイムは crun です。

RHEL 7 ホストでの RHEL 9 コンテナーの実行がサポート対象外

RHEL 7 ホストでは、RHEL 9 コンテナーの実行に対応していません。

詳細は、Red Hat Enterprise Linux Container Compatibility Matrix を参照してください。

デフォルトのネットワークスタック

Podman は、CNI を RHEL 8 のデフォルトのネットワークスタックとして使用し、Netavark を RHEL 9 の新規インストールのデフォルトのネットワークスタックとして使用します。

RHEL8 から RHEL 9 へのインプレースアップグレードを実行する場合に、Podman のネットワークスタックは次のように設定されます。

  • Netavark: /etc/containers/containers.conf ファイルの network_backendパラメーター が設定されていない場合、または RHEL8 の Podman のネットワークスタックを手動で Netavark にアップグレードした場合。
  • CNI: アップグレード後に Podman を最初に実行したときに表示されるコンテナー、イメージ、Pod、またはネットワークがある場合。後で、新しい Netavark ネットワークスタックに手動でアップグレードできます。CNI と Netavark のネットワークスタックを切り替える方法については、8.6 章 Switching network stack from CNI to Netavark および 8.7 章 Switching network stack from Netavark to CNI を参照してください。

Red Hat は、正しいバックエンドが選択されるように、network_backend パラメーターを明示的に指定することを推奨します。

警告

podman container checkpoint および podman container restore コマンドを使用して、既存のコンテナーを別のネットワークスタックシステムに移行することはできません。CNI ネットワークスタックから Netavark ネットワークスタックに切り替える場合は、コンテナーイメージからコンテナーを再作成します。