Podman CLI の基本 - podman
Docker 互換の CLI を持ちながら、常駐デーモンを必要としない(daemonless)コンテナエンジン。rootless 実行がデフォルトで、セキュリティ面で Docker と差別化される。
概念図
構文
podman <command> [options]
podman run [options] IMAGE [COMMAND]
podman build [options] PATH実例
Alpine イメージを対話的に起動し、終了時に自動削除する
podman run --rm -it docker.io/library/alpine:3.19 shnginx をバックグラウンドで起動し、ホスト 8080 ポートを 80 に転送する
podman run -d --name web -p 8080:80 docker.io/library/nginx:stable停止中も含めたすべてのコンテナを一覧する
podman ps -aPodman と Docker の違い(デーモン有無)
Docker は dockerd という常駐デーモンを中心に動き、docker CLI はそのデーモンへ REST API で指示を送る構造です。
デーモンが root で動くため、docker グループに属するユーザーは実質 root 権限を持つことになります。
Podman は常駐デーモンを持たず、CLI 実行のたびに直接子プロセスとしてコンテナを起動します。
systemd との統合も自然で、podman generate systemd で unit ファイルを出力し、サービスとして登録できます。
単一障害点となるデーモンが存在しない点が運用上の大きな違いです。
コマンド互換性
Podman の CLI は Docker のサブコマンド体系をほぼそのまま採用しています。
podman run、podman build、podman ps、podman images、podman exec など、日常的な操作で Docker から移行する際に覚え直す項目はほとんどありません。
alias docker=podman として既存スクリプトを流用することも多く、CI/CD の書き換えコストが低いのが特徴です。
ただし docker compose に相当する機能は podman compose または podman-compose として提供されており、実装の成熟度に差があるため本番運用前に検証が必要です。
alias docker=podman
docker run --rm hello-worldrootless のデフォルト
Podman は一般ユーザー権限でコンテナを起動する rootless 実行が標準動作です。
内部では user namespace を使ってコンテナ内の root をホストの非特権 UID にマップし、イメージレイヤやボリュームも ~/.local/share/containers 以下に保存されます。
この方式ではホスト側での特権昇格を回避できるため、多人数で共有する開発サーバーや CI ランナーでのリスクが低減されます。
一方で 1024 未満のポートバインドや一部のネットワーク機能には制約があり、本当に必要な場合のみ sudo podman で root モードに切り替えます。
