今号では、Podman について仕組みや使い方について説明します!
Podman とは
Podman とは、コンテナエンジン (コンテナ管理用のツール) です。
アプリケーションや実行環境などを「コンテナ」としてひとまとめにして管理し、その中で開発を行ったり、サービスを運用することができます。
従来はコンテナエンジンとして Docker が使用されていましたが、RHEL8 以降は Docker が非推奨となり、Podman が標準ツールとして採用されました。
コンテナとは
コンテナとは、アプリケーションや実行環境をすぐに動かせるよう、一つのパッケージとして提供する仮想化技術のことです。
従来の環境構築ではやらなければいけなかった、ソフトウェアのインストールや各種設定などは不要で、コンテナエンジン上で即座に実行することができます。
Docker と Podman の違い
Docker と Podman は互換性のあるソフトウェアですが、下記の点が異なります。
- Podman はデーモンレス構造
Docker のようにバックグラウンドでデーモンが常駐しておらず、podman コマンドを実行するたびにプログラムが呼び出されます。
コマンドの実行が終了したらリソースを解放するため、動作が軽いです。 - Podman は root 権限が必須ではない
Docker をはじめとする従来のコンテナエンジンとは異なり、root 権限は必須ではなく、セキュアな設計になっています。
Podman の基本操作
コンテナの取得
※前提条件として「dnf install podman」コマンドで、あらかじめ Podman をインストールしておいてください。
「コンテナ」を使用するには、まず「コンテナイメージ」を取得する必要があります。
podman pull コマンドで、コンテナイメージを取得します。
$ podman pull registry.access.redhat.com/ubi9/ubi:9.5 Trying to pull registry.access.redhat.com/ubi9/ubi:9.5... Getting image source signatures Checking if image destination supports signatures Copying blob 9ecd6eb4d986 done | Copying config 859450cd43 done | Writing manifest to image destination Storing signatures 859450cd4362928a554243710a2b671853cd67c1273180102036218890d567a2 $
上記のコマンドを実行すると、Podman が「レジストリ」というコンテナイメージを保存する場所に該当するコンテナを探しに行きます。なお、上記の場合は registry.access.redhat.com (Red Hat の公式レジストリ) の部分が「レジストリ」に該当します。
【補足】
上記のようにレジストリ名を含めたコンテナのフルパスを指定した場合などは podman pull コマンドは省略することができます。
次に紹介する podman run コマンドで、コンテナの取得も一緒に実行してくれます。
コンテナの起動
通常のシステムのように、コンテナを起動して使用する必要があります。
podman run コマンドで、コンテナを起動します。
$ podman run -it registry.access.redhat.com/ubi9/ubi:9.5 … (初回起動時のみ、イメージのダウンロードなどを示すメッセージが表示されます。) … [root@ef3977568f0d /]#
※今回は、コンテナ起動後にコンテナ内にログインできていることを確認するため、-i と -t オプションを付与しました。
各オプションの詳細については、次号で紹介予定です。
上記のように、コンテナ内部のシェルに入った状態になったらログイン成功です。
なお、コンテナからログアウトしたい場合は通常のシェルのように exit コマンドを実行します。
[root@834709ddd716 /]# exit exit $
【参考】
私の検証環境では、コンテナ起動時に下記のようなエラーが出力されました。
これは、cgroup の権限に関連するエラーで、ご利用の RHEL のバージョンなどによって発生する場合があります。
$ podman run -it registry.access.redhat.com/ubi9/ubi:9.5 Error: OCI runtime error: crun: systemd failed to install eBPF device filter on cgroup `/sys/fs/cgroup/machine.slice/libpod-35582ee7d4b30bc5b00b7ef8b8fe1de9308b3a0e04ff2b812c830bb44898f0d3.scope`
このエラーに対し、下記のように –cgroup-manager オプションで cgroup の管理方式を cgroupfs に変更することで対処しました。
$ podman --cgroup-manager=cgroupfs run -it registry.access.redhat.com/ubi9/ubi:9.5 [root@afa4506fd066 /]#
コンテナの削除
コンテナが不要になったら削除しておきましょう。
podman rm コマンドで、コンテナを削除します。
$ podman rm 1a11bf50284b 1a11bf50284b $
次号について
次号では、Podman のオプションや、その他の便利なコマンド についてご紹介します!


