4 Podman用記憶域の構成

次の情報では、Podmanおよび関連ユーティリティのための記憶域を追加および構成する方法について説明します。

デフォルトでは、rootユーザーがPodmanを実行すると、イメージは/var/lib/containersディレクトリに格納されます。標準ユーザーの場合、通常は$HOME/.local/share/containers/storage/にイメージが格納されます。これらの場所は、Open Container Initiative (OCI)仕様に準拠しています。標準ユーザー用のローカル・イメージ・リポジトリを分離することで、コンテナとイメージが適切な権限を維持して、システムの別のユーザーに影響することなく同時にコンテナを実行できます。

Podman関連のすべてのユーティリティは、同じ記憶域構成を利用します。つまり、Podman、BuildahおよびSkopeoは、システムで使用可能なイメージについて同じ記憶域の場所を認識するということです。

このような場所は、なんらかの形式のネットワーク記憶域または専用のローカル・ファイル・システムを利用するためのマウントポイントとして設定できます。

注意:

root権限のないユーザーがコンテナを実行すると、ネットワーク共有およびマウントされたボリュームにアクセスするために必要なPodmanの権限が不足します。標準ユーザーとしてコンテナを実行する場合は、ローカル・ファイル・システムのディレクトリの場所のみを構成します。

Podmanの記憶域の構成を変更して、特定のユースケースの他の要件に対応することもできます。

記憶域構成オプションの設定

システム全体のストレージ構成は、/etc/containers/storage.confのファイルを編集することで処理されます。

システム全体の記憶域構成をオーバーライドするには、任意のユーザー用に個別の$HOME/.config/containers/storage.conf構成ファイルを作成します。

次に、一般的な記憶域構成ファイルの例を示します。

cat $HOME/.config/containers/storage.conf
[storage]
  driver = "overlay"
  runroot = "/run/user/1000"
  graphroot = "/home/oracle/.local/share/containers/storage"
  [storage.options]
    size = ""
    remap-uids = ""
    remap-gids = ""
    ignore_chown_errors = ""
    remap-user = ""
    remap-group = ""
    mount_program = "/usr/bin/fuse-overlayfs"
    mountopt = ""
    [storage.options.thinpool]
      autoextend_percent = ""
      autoextend_threshold = ""
      basesize = ""
      blocksize = ""
      directlvm_device = ""
      directlvm_device_force = ""
      fs = ""
      log_level = ""
      min_free_space = ""
      mkfsarg = ""
      mountopt = ""
      use_deferred_deletion = ""
      use_deferred_removal = ""
      xfs_nospace_max_retries = ""

構成オプションの詳細は、containers-storage.conf(5)マニュアル・ページを参照してください。次の説明は、この構成ファイル内の情報を詳しく理解するために役立ちます。

  • driver

    記憶域ドライバは、イメージおよびコンテナの保管方法を定義するために使用します。Dockerでは、overlayドライバまたはoverlay2ドライバを使用するオプションがありましたが、Podmanでは、これらがoverlay2と交換できるものとして扱われます。Oracleでは、カーネル・サポートが利用可能なXFS、Ext4およびBtrfsでoverlay2ドライバをテストしました。記憶域ドライバは階層化可能な別のファイル・システムを使用するように変更できますが、Oracleではテスト済のファイル・システムでoverlay2ドライバのみをサポートしています。

  • graphroot

    イメージが格納される記憶域の場所。標準ユーザーのイメージについては、前述したように通常は$HOME/.local/share/containers/storage/にあります。この場所を変更する正当なユースケースは、ホーム・ディレクトリがNFSマウントされることがある場合です。

    重要:

    graphrootの場所を変更する場合は、新しい場所に正しいSELinuxレベルが付いていることを確認する必要があります。

    他のイメージ・リポジトリに追加の記憶域の場所を指定するには、そのパスを構成ファイルの[storage.options]セクションでadditionalimagestoresパラメータで定義します。このオプションは、ネットワーク記憶域全体でイメージを共有するための読取り専用アクセス権を指定する場合に使用します。

  • runroot

    コンテナの書込み可能なすべてのコンテンツに対応するデフォルトの記憶域ディレクトリ。このディレクトリ内のデータは一時的で、コンテナの存続期間中存在します。rootユーザーの場合は、通常、runrootの場所が/var/run/containers/storageに設定されます。

どの記憶域ドライバを使用するかによって、構成ファイルの[storage.options]セクションで使用できる記憶域オプションが異なります。ユーザーとグループの再マッピングを制御する汎用的なオプションの中には、すべてのドライバに使用できるものがあります。すべての場合に、コンテナ・イメージに割当てを適用するsizeパラメータを設定できます。

コンテナ・マウントの設定

Podmanは、ホスト・システムの特定のディレクトリを各コンテナに自動的にマウントします。この機能は、イメージ自体に情報を格納することなく各コンテナでホスト・シークレットと認証情報を共有する場合に役立ちます。一般的なユースケースとして、ユーザーが自分の権限レベルでは許可されていない外部リソースに構築プロセス中にアクセスするために、システム全体の秘密キー、証明書または認証資格証明が必要になることがあります。

その他のデフォルト・マウントを/usr/share/containers/mounts.confまたは/etc/containers/mounts.confで定義できます。こうしたエントリは、ソース・ディレクトリと宛先ディレクトリの間のコロン区切りのマッピングとして書式化されます。次に例を示します。

/src/dir/on/host:/run/target/on/container

詳細は、CONTAINERS-MOUNTS.CONF(5)マニュアル・ページを参照してください。

また、イメージの構築時またはイメージからのコンテナの実行時に--volumeまたは-vオプションを使用すると、必要に応じてローカル・ディレクトリをコンテナ・ディレクトリにマウントすることもできます。次に例を示します。

sudo buildah bud -v /path/on/host:/path/on/container:rw -t newimage:1.0 .
sudo podman run --name mycontainer -d -v /path/on/host:/path/on/container:z newimage:1.0

ボリューム・マウントにはその他のオプションも使用できます。特に-zオプションは、複数のコンテナ間またはコンテナとホスト・システムの間でSELinuxセキュリティ・コンテキストを共有する必要がある場合に役立ちます。SELinuxセキュリティ・コンテキストの共有は、root以外のユーザーとしてコンテナを実行する場合に役立ちます。このオプションは、SELinuxマルチレベル・セキュリティ(MLS)機能に基づいています。

ボリュームを実行中コンテナのみに限定して、そのボリュームのSELinuxコンテキストが他のコンテナと共有されなくするには、-Zオプションを使用します。このオプションは、SELinuxマルチカテゴリ・セキュリティ(MCS)機能に基づいています。

--volumeオプションの詳細は、PODMAN-RUN(1)マニュアル・ページを参照してください。SELinuxコンテキストの詳細は、Oracle Linux: SELinuxの管理を参照してください。