TT Lab
はじめる
学ぶ 学習パス コース

Rootless Podmanの運用

podman設定ファイルの地図

TT Labで続きを見る

一言でいうと

dockerの設定がdaemon.json1つに集まっているとすれば、podmanは役割ごとに分かれた複数のファイルで、ユーザー別の設定がシステム設定を上書きします。

なぜ必要なのか

dockerから移ってきた人が、最初に迷うのがここです。「レジストリミラーはどこに書くのか」「保存先のパスはどこで変えるのか」。デーモンがないので、daemon.jsonもありません。

どう動くのか

docker                          podman
──────────────────────────      ───────────────────────────────────────
/etc/docker/daemon.json         /etc/containers/containers.conf   (엔진·런타임 옵션)
                                ~/.config/containers/containers.conf
(레지스트리 미러도 daemon.json)  /etc/containers/registries.conf   (레지스트리·미러·차단)
                                ~/.config/containers/registries.conf
                                /etc/containers/storage.conf      (스토리지 드라이버·경로)
                                ~/.config/containers/storage.conf
                                /etc/containers/policy.json       (이미지 서명 정책)
~/.docker/config.json (인증)     ~/.config/containers/auth.json    (레지스트리 인증)

이미지·컨테이너 저장 위치
/var/lib/docker                 rootful:  /var/lib/containers/storage
                                rootless: ~/.local/share/containers/storage

ユーザー別のファイルが、システムのファイルを上書きします。そのため、rootlessの設定は、たいてい~/.config/containers/の下で行います。

storage.conf

[storage]
driver = "overlay"
runroot = "/run/user/1000/containers"
graphroot = "/home/podster/.local/share/containers/storage"

[storage.options]
additionalimagestores = []

[storage.options.overlay]
mount_program = "/usr/bin/fuse-overlayfs"

registries.conf

unqualified-search-registries = ["docker.io"]

[[registry]]
prefix = "docker.io"
location = "mirror.internal.example.com/dockerhub"

[[registry]]
location = "blocked.example.com"
blocked = true

unqualified-search-registriesがdockerとの代表的な違いです。dockerは、nginxを自動的にdocker.ioとして解釈しますが、podmanは、設定に従うか、どのレジストリなのかを尋ねます。CIのスクリプトなら、最初からdocker.io/library/nginxのように、完全なパスを書くのが、最も堅牢です。

containers.conf

エンジンのデフォルト値を決めます。デフォルトのOCIランタイム(crun/runc)、デフォルトのネットワークバックエンド(netavark/cni)、デフォルトのcgroupマネージャー、デフォルトの環境変数などです。

[engine]
runtime = "crun"
cgroup_manager = "cgroupfs"

[containers]
default_ulimits = ["nofile=65535:65535"]

rootlessで、systemdがなかったり、cgroupの委譲ができなかったりする場合は、cgroup_manager = "cgroupfs"にしておく必要があります。

現場での姿

初期設定のチェックリスト: 新しいサーバーにrootless podmanを立てるときに、確認する順序が決まっています。

  1. 専用ユーザーとホームがあるか
  2. /etc/subuid、/etc/subgidに、そのユーザーの範囲があるか
  3. newuidmap/newgidmapがインストールされているか
  4. graphrootが、十分な容量のパーティションにあるか
  5. runrootがtmpfsか
  6. registries.confに、社内ミラーとunqualified検索の設定があるか
  7. podman infoで、rootless=true、ドライバー、パスが期待どおりか

7番目が、最終的な検証です。podman info --format jsonをパースして、CIで自動点検するチームも多いです。

次のラボですること

ユーザーpodsterのためのsubuid/subgidを入れ、マッピングを手で計算し、storage.confとregistries.confを作成して、podman infoですべてを検証します。