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

Rootless Podmanの運用

rootless podmanの初期設定

TT Labで続きを見る

目標

専用ユーザーpodsterのためのrootless podman環境を、最初から構成して、podman infoで検証します。

なぜ重要なのか

rootless podmanは、インストールよりも設定が本題です。/etc/subuidの範囲がないと、単一UIDモードに黙ってフォールバックして、特定のイメージでだけ権限エラーが出て、その原因を探すのに何日もかかります。graphrootを確認しないと、ホームパーティションが埋まって、サービスが止まります。unqualified-search-registriesを入れないと、dockerでうまく動いていたスクリプトが、podmanでイメージを見つけられません。

このラボのチェックリストは、実務で新しいサーバーにrootless podmanを立てるときに、そのまま使う順序です。

ステップ

  1. /root/podディレクトリを作成して、ユーザーpodsterのuid gid 홈경로を(プレースホルダーはホームのパスです)空白で区切って1行で、/root/pod/user.txtに書いてください。
  2. /etc/subuidに、podsterへ開始100000、個数65536の範囲を割り当ててください。
  3. /etc/subgidにも、同じ範囲を割り当ててください。
  4. /root/pod/mapping.txtを、次の3行で作成してください。 CONTAINER_0=<컨테이너 안 UID 0 에 대응하는 호스트 UID> / CONTAINER_1=<컨테이너 안 UID 1 의 호스트 UID> / CONTAINER_1000=<컨테이너 안 UID 1000 의 호스트 UID>(プレースホルダーは、順に、コンテナ内のUID 0に対応するホストUID、コンテナ内のUID 1のホストUID、コンテナ内のUID 1000のホストUIDです)
  5. /home/podster/.config/containers/storage.confを作成してください。[storage]セクションに、driver、runroot、graphrootの3つのキーがある必要があり、graphrootは/home/podster/.local/share/containers/storageである必要があります。ファイルの所有者はpodsterである必要があります。
  6. /home/podster/.config/containers/registries.confを作成してください。unqualified-search-registriesにdocker.ioが含まれている必要があり、docker.ioを社内ミラーmirror.labhub.local/dockerhubへ向ける[[registry]]ブロックがある必要があります。ファイルの所有者はpodsterである必要があります。
  7. podsterの権限でpodman infoを実行して、結果を/root/pod/info.jsonとして保存してください。JSON形式である必要があり、graphRootの値が、ステップ5で指定したパスである必要があります。
  8. /root/pod/checklist.txtを、次の5行で作成してください。 SUBUID=yes / SUBGID=yes / ROOTLESS=<info 의 rootless 값 true/false> / GRAPHROOT=<info 의 graphRoot 값> / DRIVER=<info 의 스토리지 드라이버 이름>(プレースホルダーは、順に、infoのrootlessの値のtrueまたはfalse、infoのgraphRootの値、infoのストレージドライバー名です)

参考

対象ユーザーを確認する

/root/podディレクトリを作成して、ユーザーpodsterのuid gid 홈경로を(プレースホルダーはホームのパスです)空白で区切って1行で、/root/pod/user.txtに書いてください。

idコマンドで、uid、gid、ホームディレクトリを確認できます。getent passwdも役に立ちます。

subuidの範囲を割り当てる

/etc/subuidに、podsterへ開始100000、個数65536の範囲を割り当ててください。

形式は、ユーザー:開始UID:個数です。usermodでも、ファイルの直接編集でもできます。

subgidの範囲を割り当てる

/etc/subgidにも、同じ範囲を割り当ててください。

subuidと同じ形式です。GIDも、同じ理由で範囲が必要です。

マッピングを計算する

/root/pod/mapping.txtを、次の3行で作成してください。 CONTAINER_0=<컨테이너 안 UID 0 에 대응하는 호스트 UID> / CONTAINER_1=<컨테이너 안 UID 1 의 호스트 UID> / CONTAINER_1000=<컨테이너 안 UID 1000 의 호스트 UID>(プレースホルダーは、順に、コンテナ内のUID 0に対応するホストUID、コンテナ内のUID 1のホストUID、コンテナ内のUID 1000のホストUIDです)

コンテナ内のUID 0はユーザー本人にマッピングされ、1からが範囲の始まりです。オフセットに注意してください。

storage.confを作成する

/home/podster/.config/containers/storage.confを作成してください。[storage]セクションに、driver、runroot、graphrootの3つのキーがある必要があり、graphrootは/home/podster/.local/share/containers/storageである必要があります。ファイルの所有者はpodsterである必要があります。

ユーザー別の設定は、ホームの下の.config/containersに置きます。[storage]セクションに、3つのキーが必要です。

registries.confを作成する

/home/podster/.config/containers/registries.confを作成してください。unqualified-search-registriesにdocker.ioが含まれている必要があり、docker.ioを社内ミラーmirror.labhub.local/dockerhubへ向ける[[registry]]ブロックがある必要があります。ファイルの所有者はpodsterである必要があります。

unqualified検索のリストは配列で、ミラーは[[registry]]ブロックで書きます。prefixとlocationが対になります。

podman infoで検証する

podsterの権限でpodman infoを実行して、結果を/root/pod/info.jsonとして保存してください。JSON形式である必要があり、graphRootの値が、ステップ5で指定したパスである必要があります。

そのユーザーの権限で実行して初めて、ユーザー別の設定が反映されます。su -でログインシェルを開くほうが、安全です。

初期設定のチェックリストを作成する

/root/pod/checklist.txtを、次の5行で作成してください。 SUBUID=yes / SUBGID=yes / ROOTLESS=<info 의 rootless 값 true/false> / GRAPHROOT=<info 의 graphRoot 값> / DRIVER=<info 의 스토리지 드라이버 이름>(プレースホルダーは、順に、infoのrootlessの値のtrueまたはfalse、infoのgraphRootの値、infoのストレージドライバー名です)

前のステップで確認した、実際の値を集めてください。パスは、絶対パスで書きます。