Podmanは、デーモンレスで動作するコンテナエンジンであり、イメージやコンテナの管理をシンプルに行えます。Docker CLIと互換性のある操作方法を提供しており、alias docker=podmanと設定すれば同じように使えます。多くのPodmanコマンドは、一般ユーザーでも特別な権限なしで実行可能です。
リポジトリ、イメージ、コンテナの関係を理解しておきましょう:
- リポジトリ:イメージを提供・保存する場所。公式リポジトリ(例:Red Hatの
registry.redhat.io、Docker Hubのdocker.io)や、プライベートリポジトリがあります。 - イメージ:仮想マシンやアプリケーションを独立した環境としてパッケージ化したもの。コンテナのテンプレートとして使います。
- コンテナ:イメージを基に起動し、メモリ上で動作する実行インスタンスです。
イメージの取得
イメージは一意のIDと名前(タグを含む)で識別されます。タグを省略すると、デフォルトでlatestが適用されます。
イメージの検索
podman search nginx
イメージのダウンロード
podman pull docker.io/library/nginx
イメージの一覧表示
podman images
コンテナの起動
コンテナを起動する際、ホストのポートとコンテナのポートをバインドすることで、コンテナのIPを意識せずにサービスを公開できます。
-pオプションでポートをバインド:-p [ホストIP:]ホストポート:コンテナポート- 同じホストポートは1つのコンテナにしかバインドできません。
podman run -p 8080:80 -d docker.io/library/nginx:1.16.1-alpine
起動後、以下のコマンドでNginxにアクセスできます。
curl http://localhost:8080
コンテナの管理
コンテナの一覧表示
podman ps # 実行中のコンテナのみ表示
podman ps -a # すべてのコンテナを表示(停止中も含む)
podman ps -q # コンテナIDのみ表示
コンテナの削除
podman rm コンテナID
コンテナの起動・停止・再起動・強制停止
podman start コンテナID
podman stop コンテナID
podman restart コンテナID
podman kill コンテナID
コンテナへの接続
podman exec -it コンテナID /bin/sh
オプションの意味:
-i:インタラクティブモード-t:疑似端末を割り当て-d:バックグラウンドで実行--name:コンテナに名前を付ける
コンテナ内でIPアドレスを確認するには:
hostname -I
# 出力例: 10.88.0.2
コンテナ同士もこのIPで通信可能です。
イメージのメタデータ確認
podman inspect コンテナID
作成日時、イメージ名、ビルドコマンドなどの詳細が表示されます。
ファイルのコピー(コンテナ→ホスト)
podman cp コンテナID:コンテナ内のパス ホストの保存先パス
補足情報
コンテナ内でviがない場合は、以下のコマンドでインストール可能です。
apt-get install vim
Podmanコンテナはデータの永続保存には適していません。そのため、ホストのファイルやディレクトリをマウントして使用します。
- マウント先が存在しない場合は自動で作成されます。
- 既存のパスは上書きされます。
- 複数のコンテナで同じホストパスをマウントし、データを共有できます。
podman run -d -v ホストパス:コンテナパス イメージ名:タグ
# 例
podman run --name nsdweb -p 80:80 -v /webroot:/var/www/html -d localhost/myos:httpd