7 Podmanストレージ
Podmanポッドとコンテナ、およびBuildahとSkopeoのストレージを設定および構成します。
デフォルトでは、コンテナ・イメージは$HOME/.local/share/containers/storage/に格納されます。 (sudoコマンドを使用して)ルート権限を使用してコンテナを起動すると、イメージは/var/lib/containersディレクトリに格納されます。 これらの場所は、Open Container Initiativeの仕様に準拠しています。 標準ユーザー用のローカル・イメージ・リポジトリを分離することで、コンテナとイメージが適切な権限を維持して、システムの別のユーザーに影響することなく同時にコンテナを実行できます。
Podman関連のすべてのユーティリティは、同じ記憶域構成を利用します。 つまり、Podman、BuildahおよびSkopeoは、システムで使用可能なイメージについて同じ記憶域の場所を認識するということです。
これらの記憶域の場所は、要件に応じて、ネットワーク記憶域または専用のローカル・ファイル・システムを利用するマウント・ポイントとして設定できます。
注意:
コンテナが標準ユーザー(sudoコマンドなし)によって実行される場合、Podmanには、ネットワーク共有およびマウントされたボリュームにアクセスするために必要な権限がありません。 コンテナを標準ユーザーとして実行する場合は、ローカル・ファイル・システム上のディレクトリの場所のみを構成します。
Podmanの記憶域の構成を変更して、特定のユースケースの他の要件に対応することもできます。
記憶域構成オプションの設定
システム全体のPodmanストレージは、Oracle Linux 8およびOracle Linux 9システムの/etc/containers/storage.confファイル、およびOracle Linux 10システムの/usr/share/containers/storage.confファイルで構成されます。
システム全体のストレージ構成をオーバーライドするには、任意のユーザーに対して個別の$HOME/.config/containers/storage.conf構成ファイルを作成します。 このファイルは必要に応じて作成する必要があります。 たとえば、$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の管理を参照してください。