Debian 11 に Podman をインストールして使う方法

Podman(POD MANager)は Red Hat が開発した OCI 準拠のコンテナエンジンで、Docker の代替として使われます。Podman はコンテナ、イメージ、ボリュームをコマンドラインで操作します。Docker と類似していますが、Podman はコンテナ実行に常駐デーモンを必要としない点が主な違いです。内部では libpod ライブラリを使ってコンテナエコシステム全体を管理します。
前提条件
- Debian 11 を実行しているサーバー
- サーバーに root パスワードが設定されていること(または sudo 権限のあるユーザー)
Podman のインストール
Debian 11 の標準リポジトリに Podman パッケージが含まれています。以下のコマンドでインストールします。
apt-get install podman -yインストール後、バージョンを確認します。
podman --version期待される出力の例:
podman version 3.0.1Podman の詳細情報を取得するには次を実行します。
podman info例(出力は環境により異なります):
host:
arch: amd64
buildahVersion: 1.19.6
cgroupManager: systemd
cgroupVersion: v2
conmon:
package: 'conmon: /usr/bin/conmon'
path: /usr/bin/conmon
version: 'conmon version 2.0.25, commit: unknown'
cpus: 2
distribution:
distribution: debian
version: "11"
eventLogger: journald
hostname: debian11
idMappings:
gidmap: null
uidmap: null
kernel: 5.10.0-8-amd64
linkmode: dynamic
memFree: 3365183488
memTotal: 4122267648
ociRuntime:
name: crun
package: 'crun: /usr/bin/crun'
path: /usr/bin/crun
version: |-
crun version 0.17
commit: 0e9229ae34caaebcb86f1fde18de3acaf18c6d9a
spec: 1.0.0
+SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +YAJL
os: linux
remoteSocket:
exists: true
path: /run/podman/podman.sock
security:
apparmorEnabled: true
capabilities: CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT
rootless: false
seccompEnabled: true
selinuxEnabled: falseレジストリ設定(OCI Registry の追加)
Podman は /etc/containers/registries.conf を使ってイメージの取得先を定義します。必要に応じて編集してください。
nano /etc/containers/registries.confファイル末尾に次の行を追加します(例)。insecure なレジストリやブロック設定をここで定義します。
[registries.insecure]
registries = [ ]
# If you need to block pull access from a registry, uncomment the section below
# and add the registries fully-qualified name.
# Docker only
[registries.block]
registries = [ ]保存して終了してください。
重要: 本番環境では insecured なレジストリを利用しないか、TLS 証明書の管理を必ず行ってください。
Podman の基本的な使い方
以下はイメージの取得、コンテナの起動、一覧確認、接続、ログ確認などの基本操作です。
イメージを取得します(例: debian)
podman pull debian取得の出力例:
Resolved "debian" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Trying to pull docker.io/library/debian:latest...
Getting image source signatures
Copying blob 647acf3d48c2 done
Copying config 827e561138 done
Writing manifest to image destination
Storing signatures
827e5611389abf13dad1057e92f163b771febc0bcdb19fa2d634a7eb0641e0ccローカルのイメージ一覧を表示します。
podman images出力例:
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/debian latest 827e5611389a 11 days ago 129 MBイメージからコンテナを起動します。
podman run -dit debian:latest起動直後に返されるコンテナ ID の例:
f85c4df5ab787912c984ec820571da7b95b32736ef94ba691d9ab5019c5b5103実行中コンテナの一覧を表示します。
podman ps出力例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f85c4df5ab78 docker.io/library/debian:latest bash 13 seconds ago Up 13 seconds ago competent_coriコンテナの詳細を確認します。
podman inspect f85c4df5ab78ログを確認します。
podman logs f85c4df5ab78実行中コンテナへ接続(シェルを開く)
podman exec -it f85c4df5ab78 /bin/bashコンテナ内プロンプト例:
root@f85c4df5ab78:/#コンテナシェルから抜けるには exit を実行します。
root@f85c4df5ab78:/# exitコンテナの停止と削除
コンテナを停止します。
podman stop f85c4df5ab78すべてのコンテナ(停止済み含む)を表示:
podman ps -a停止したコンテナを削除:
podman rm f85c4df5ab78最新コンテナに対する操作ショートカット:
podman stop --latest
podman start --latest
podman rm --latestすべてのコンテナを強制削除:
podman rm -f `podman ps -aq`イメージを削除します(IMAGE ID の例):
podman rmi 827e5611389a削除の出力例:
Untagged: docker.io/library/debian:latest
Deleted: 827e5611389abf13dad1057e92f163b771febc0bcdb19fa2d634a7eb0641e0cc役割別チェックリスト(管理者 / 開発者)
管理者向けチェックリスト:
- Podman のバージョンとシステム互換性を確認する
- /etc/containers/registries.conf をレビューし、社内レジストリを適切に設定する
- デーモン不要だが、rootless モードと root モードの違いを理解して運用方針を決める
- セキュリティポリシー(AppArmor/SELinux、capabilities)を適用する
- ログの集約(journald / syslog)とバックアップを設定する
開発者向けチェックリスト:
- Dockerfile の互換性を確認(ほとんどのケースでそのまま使える)
- rootless モードでの挙動をローカルでテストする
- イメージの最小化(不要なパッケージを削除)を行う
- CI/CD で podman build / podman push を組み込む
コマンド早見表(チートシート)
基本操作:
podman pull # イメージ取得
podman images # ローカルイメージ一覧
podman run -dit # コンテナ起動(デタッチ)
podman ps # 実行中コンテナ一覧
podman ps -a # すべてのコンテナ
podman stop # 停止
podman start # 起動
podman rm # 削除
podman rmi # イメージ削除
podman exec -it /bin/bash # シェル接続
podman logs # ログ表示
podman inspect # 詳細情報 イメージビルド:
podman build -t myimage:tag .
podman push myimage:tag registry.example.com/myimage:tagrootless(非特権)モードの実行:
# root でなく一般ユーザーとして podman コマンドを実行
podman info | grep rootlessセキュリティと運用上の注意点
- Podman はデーモンを持たないため、攻撃対象の面が異なりますが、コンテナ内の脆弱性やマウントされたホストパスには注意してください。
- rootless モードは安全性を高めますが、機能面で制限がある場合があります(ポート 1024 未満のバインド等)。
- AppArmor / SELinux プロファイルと seccomp の有効化を検討してください。
- イメージ署名とレジストリ認証を導入して信頼できるイメージのみを利用してください。
よくある失敗例と対処(いつ失敗するか)
イメージが取得できない: /etc/containers/registries.conf が不適切、ネットワーク制限、またはレジストリへの認証情報不足が原因。 解決: registries.conf を確認、ネットワーク接続、認証情報を設定。
rootless で特権操作が必要: 標準ユーザーではできない操作がある。 解決: 必要に応じて root で実行するか、別の設計(ポート転送やプロキシ)を検討。
コンテナが即時終了する: CMD/ENTRYPOINT の設定ミスやプロセスがフォアグラウンドで実行されていない。 解決: コンテナ内で実行されるプロセスを確認し、フォアグラウンド実行にする。
代替アプローチと比較
- Docker: 同等の CLI を提供し、エコシステムは成熟しています。デーモン方式で中央制御が容易だが、デーモンの管理が必要。
- Buildah / Skopeo: イメージのビルドや操作に特化したツール。Podman と組み合わせて使うことが多い。
- rootless Podman: セキュリティを重視する開発環境に適するが、機能制約がある場合あり。
選択のヒューリスティック: 開発用途で既存の Docker ワークフローを使いたいなら Docker。本番でデーモン削減と rootless を優先するなら Podman を検討。
簡易用語集(1行定義)
- OCI: Open Container Initiative。コンテナの標準仕様。
- Podman: デーモンレスな OCI コンテナエンジン。
- rootless: root 権限を使わずにコンテナを実行するモード。
- registries.conf: Podman が参照するレジストリ設定ファイル。
FAQ
Q: Podman は Docker と完全に互換ですか?
A: 多くの CLI コマンドは互換ですが、内部実装や一部オプションは異なります。Docker Compose の利用など一部ツールは追加設定が必要です。
Q: rootless でポート 80 を使えますか?
A: 標準ユーザーでは 1024 未満のポートバインドが制限されます。回避策としてリバースプロキシやポートフォワーディングを利用してください。
Q: イメージを完全に削除するには?
A: コンテナを削除してから podman rmi
参考ガイド
詳しいチュートリアルや応用的な使い方は次の公式ドキュメントやガイドを参照してください:
- Getting Started with Podman: Manage Images, Containers and Volumes
結論
この記事では Debian 11 への Podman インストール手順と基本的な使い方、運用チェックリスト、トラブルシューティング、セキュリティ上の注意点をまとめました。Podman は Docker とよく似た UX を提供しつつ、デーモン不要や rootless の利点があるため、要件に応じて Docker の代替として有力な選択肢になります。