Menu Close
Settings Close

Language and Page Formatting Options

第20章 コンテナー

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

20.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

container-tools メタパッケージが更新された

container-tools メタパッケージには、Podman、Buildah、Skopeo、CRIU、Udica、および必要なすべてのライブラリーが含まれています。今回の更新で、以前のバージョンに対するバグ修正および機能拡張が複数追加されました。

以下は、主な変更点です。

  • ネイティブオーバーレイファイルシステムがルートレスユーザーとして使用できる
  • NFS ストレージがコンテナー内でサポートされるようになった
  • コントロールグループバージョン 2 (cgroup v2) はデフォルトで有効になった

Podman の注目すべき変更点の詳細は、アップストリームのリリースノート を参照してください。

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

以前のバージョンのコントロールグループ 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"

デフォルトのコンテナーイメージの署名検証が利用できるようになりました。

以前では、Red Hat コンテナーレジストリーのポリシー YAML ファイルは、/etc/containers/registries.d/ ディレクトリーに手動で作成する必要がありました。現在、registry.access.redhat.com.yaml ファイルおよび registry.redhat.io.yaml ファイルは containers-common に同梱されています。podman image trust コマンドを使用して、コンテナーイメージの署名を検証できるようになりました。

podman image trust コマンドは、その場所に基づいて、コンテナーイメージのソースとして信頼するレジストリーを管理します。信頼は /etc/containers/policy.json ファイルで定義され、ユーザーがレジストリーからリモートイメージをプルしようとしたときに適用されます。policy.json の信頼ポリシーは、信頼のレジストリースコープを記述します。この信頼は、署名されたイメージに公開鍵を使用できます。イメージ署名の検証は、RHEL 8 および RHEL 9 ではデフォルトで有効になっています。

例:

registry.access.redhat.com に対する既存の信頼範囲を更新します。

# podman image trust set -f /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release registry.access.redhat.com

信頼ポリシーの設定を確認するには、/etc/containers/policy.json ファイルを表示します。

...
"transports": {
  "docker": {
      "registry.access.redhat.com": [
       {
         "type": "signedBy",
         "keyType": "GPGKeys",
         "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release"
       }
     ]
},
...

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

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

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

unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "registry.centos.org", "docker.io"]

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

unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "registry.centos.org", "quay.io", "docker.io"]

container-tools:latest のローリングストリームが更新

container-tools:rhel8 ローリングストリームの名前が、container-tools:latest に変更されました。安定したストリームの数値は変わりません (例: 2.0、3.0)。Podman、Buildah、Skopeo、および runc ツールを含む container-tools:latest ローリングストリームが利用できるようになりました。今回の更新で、以前のバージョンに対するバグ修正および機能拡張が追加されました。

詳細は、https://access.redhat.com/support/policy/updates/containertools を参照してください。

デフォルトの 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 v3 以前で作成されたコンテナーは Podman v4.0 では使用できなくなります。