Dock Stay
Podman CLI の基本 - podman の使い方・オプション・サンプル

Podman CLI の基本 - podman

Docker 互換の CLI を持ちながら、常駐デーモンを必要としない(daemonless)コンテナエンジン。rootless 実行がデフォルトで、セキュリティ面で Docker と差別化される。

概念図

podman diagram

構文

bash
podman <command> [options]
podman run [options] IMAGE [COMMAND]
podman build [options] PATH

実例

Alpine イメージを対話的に起動し、終了時に自動削除する

bash
podman run --rm -it docker.io/library/alpine:3.19 sh

nginx をバックグラウンドで起動し、ホスト 8080 ポートを 80 に転送する

bash
podman run -d --name web -p 8080:80 docker.io/library/nginx:stable

停止中も含めたすべてのコンテナを一覧する

bash
podman ps -a

Podman と Docker の違い(デーモン有無)

Docker は dockerd という常駐デーモンを中心に動き、docker CLI はそのデーモンへ REST API で指示を送る構造です。

デーモンが root で動くため、docker グループに属するユーザーは実質 root 権限を持つことになります。

Podman は常駐デーモンを持たず、CLI 実行のたびに直接子プロセスとしてコンテナを起動します。

systemd との統合も自然で、podman generate systemd で unit ファイルを出力し、サービスとして登録できます。

単一障害点となるデーモンが存在しない点が運用上の大きな違いです。

コマンド互換性

Podman の CLI は Docker のサブコマンド体系をほぼそのまま採用しています。

podman runpodman buildpodman pspodman imagespodman exec など、日常的な操作で Docker から移行する際に覚え直す項目はほとんどありません。

alias docker=podman として既存スクリプトを流用することも多く、CI/CD の書き換えコストが低いのが特徴です。

ただし docker compose に相当する機能は podman compose または podman-compose として提供されており、実装の成熟度に差があるため本番運用前に検証が必要です。

bash
alias docker=podman
docker run --rm hello-world

rootless のデフォルト

Podman は一般ユーザー権限でコンテナを起動する rootless 実行が標準動作です。

内部では user namespace を使ってコンテナ内の root をホストの非特権 UID にマップし、イメージレイヤやボリュームも ~/.local/share/containers 以下に保存されます。

この方式ではホスト側での特権昇格を回避できるため、多人数で共有する開発サーバーや CI ランナーでのリスクが低減されます。

一方で 1024 未満のポートバインドや一部のネットワーク機能には制約があり、本当に必要な場合のみ sudo podman で root モードに切り替えます。

関連トピック