podman installation
RHEL / RockyLinux
dnf でパッケージインストール
sudo dnf install -y podman
ubuntu
apt でパッケージインストール
sudo apt-get install -y podman
rootless 用プロセス設定
rootless時のプロセス番号は /etc/subuid, /etc/subgid に従って生成されるが、重複するとユーザ間でプロセス番号が衝突する可能性がある。
/etc/sub(u|g)id は以下の書式。
(https://rootlesscontaine.rs/getting-started/common/subuid/)
uid/account:uid*space:space
デフォルトでは
[localuser]:100000:65536
というファイルが作られるが、これは localuser について 100000 - 165535 範囲でプロセスを生成するということ。
そんなに沢山のプロセスを実行することは想定しないため、space=1000 とする場合は以下のようになる。
uid/account:uid*1000:1000
ActiveDirectory認証設定で idmap レンジを以下のように設定している場合、
[global]
idmap config [DOMAIN]:range = 10000 - 19999
以下のように subuid, subgid を生成するとよい。
# !/usr/bin/python
space = 1000
with open("etc_subuid", "w") as f:
for uid in range(10000, 20000):
f.write("%d:%d:%d\n" %(uid,uid*space,space ))
with open("etc_subgid", "w") as f:
for gid in range(10000, 20000):
f.write("%d:%d:%d\n" %(gid,gid*space,space ))
これを反映しておくとAD認証ユーザでもrootless dockerが使えるようになる。
$ sudo cp etc_subuid /etc/subuid
$ sudo cp etc_subgid /etc/subgid
コンテナ保存先の設定
ActiveDirectory 認証などでホームディレクトリを nfs マウントしている場合にコンテナ pull すると以下のようなエラーが出る。
$ podman pull nginx
...
failed to register layer: failed to Lchown "/etc/gshadow" for UID 0, GID 42: lchown /etc/gshadow: operation not permitted
pullしたコンテナイメージは標準でホームディレクトリ配下に保存されるが、ローカル領域に保存するように以下設定を行う。
for RHEL / RockyLinux
/etc/containers/storage.conf
ファイルを編集し、rootless_storage_path を設定する。
$ sudo vi /etc/containers/storage.conf
[storage]
...
rootless_storage_path = "/var/tmp/$USER"
...
for ubuntu
/etc/containers/storage.conf
ファイルが無いため作成する。
driver 設定も必要。
$ sudo vi /etc/containers/storage.conf
[storage]
driver = "overlay"
rootless_storage_path = "/var/tmp/$USER"