手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 Podman の導入 – daemonless なコンテナ実行環境を構築する

Podman は Docker と同じ OCI コンテナを扱えるコンテナ実行環境です。Docker daemon に常時接続する構成ではなく、一般ユーザーで rootless に使いやすい点が特徴です。

この記事では、既存の Ubuntu 22.04 環境を保守する前提で、Ubuntu 標準パッケージから Podman を導入し、基本情報、rootless 実行、storage、Docker との違いを確認します。

関連する記事

この記事で確認すること

  • Ubuntu 標準パッケージで Podman を導入する
  • daemonless と rootless の基本的な位置づけ
  • podman infopodman run による動作確認
  • ユーザー namespace と storage の確認
  • Docker と使い分けるときの注意点
参考書籍
参考書籍
Kubernetes 完全ガイド 第 2 版
コンテナ運用や周辺技術を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見る
このリンクは Amazon アソシエイトリンクです。

Podman の位置づけ

Podman は Docker と同じように image と container を扱えますが、常駐 daemon を前提にしない点が異なります。検証端末や個人ユーザー単位のコンテナ実行では、rootless の扱いやすさが利点になります。

項目DockerPodman
実行方式Docker daemon を経由するdaemonless に実行できる
rootless構成により利用する一般ユーザー利用を前提にしやすい
コマンド体系dockerpodman
systemd 連携別途 unit を作るcontainer から unit を生成しやすい

パッケージをインストールする

Ubuntu 22.04 の標準リポジトリから podman を導入します。併せて registry 取得や build に使う周辺パッケージを入れておきます。

sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y podman uidmap slirp4netns fuse-overlayfs
podman --version

基本情報を確認する

導入後、Podman の実行環境を確認します。rootless で実行している場合は、storage の場所や user namespace の状態も見ます。

podman info
podman system df
podman version

rootless 実行の前提を確認する

rootless Podman では、ユーザーごとの subuid / subgid が重要です。設定がない場合、image 展開や container 起動で失敗することがあります。

grep "^$USER:" /etc/subuid
grep "^$USER:" /etc/subgid
id

subuid と subgid を設定する

必要な範囲が未設定の場合は、対象ユーザーに subuid / subgid を割り当てます。すでに設定済みの場合は重複して追加しないようにします。

sudo usermod --add-subuids 100000-165535 "$USER"
sudo usermod --add-subgids 100000-165535 "$USER"
grep "^$USER:" /etc/subuid
grep "^$USER:" /etc/subgid

image を取得する

Podman では registry から image を取得します。tag を明示し、取得後にローカル image 一覧を確認します。

podman pull docker.io/library/alpine:latest
podman images
podman image inspect docker.io/library/alpine:latest

コンテナを起動する

短い動作確認では --rm を付けて、終了後に container を残さないようにします。

podman run --rm docker.io/library/alpine:latest cat /etc/os-release
podman ps -a

Nginx コンテナを起動する

HTTP 応答を確認するため、Nginx コンテナをホスト側ポートへ公開します。rootless 実行では、低いポート番号の扱いに注意します。

podman run --rm -d \
  --name podman-nginx \
  -p 8080:80 \
  docker.io/library/nginx:latest
podman ps
curl -I http://127.0.0.1:8080/
podman rm -f podman-nginx

storage の場所を確認する

rootless Podman では、image や container のデータはユーザーごとの領域に置かれます。容量やバックアップを考えるときは、この場所を確認しておきます。

podman info --format '{{.Store.GraphRoot}}'
podman info --format '{{.Store.RunRoot}}'
podman system df

Docker と併用する場合の注意

Podman と Docker は似たコマンド体系ですが、daemon、network、volume、systemd 連携の扱いが異なります。完全な置き換えとして扱う前に、実際に使う機能を確認します。

  • Docker daemon 依存のツールは Podman でそのまま動かない場合がある
  • rootless 実行では低いポート番号や network の扱いが異なる
  • volume と storage の場所を Docker と混同しない
  • Compose を使う場合は対応する実行方式を事前に確認する
  • systemd 化する場合は Podman の unit 生成を別途確認する

不要な image と container を削除する

検証後は不要な container と image を確認し、対象を指定して削除します。既存環境では、削除前に利用中かどうかを確認します。

podman ps -a
podman images
podman image rm docker.io/library/alpine:latest

まとめ

Ubuntu 22.04 では、標準パッケージから Podman を導入できます。Podman は daemonless に使えるコンテナ実行環境で、rootless 実行を前提にした確認が重要です。

導入後は、podman info、subuid / subgid、storage、image 取得、container 起動を確認します。Docker と似た操作感でも、daemon、network、storage の違いを意識して使い分けます。

Ubuntu 22.04 Podman の導入 – daemonless なコンテナ実行環境を構築する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る