podman の使い方

6 min 391 views

最近、Docker に代わるコンテナランタイムとして注目を集めている podman。今回は、そんな podman の使い方について紹介します。操作は Linux OS を前提に説明しています。

podman とは

podman は、Docker の代替として開発されたコンテナランタイムです。Docker と同様に、コンテナを管理するためのツールを提供しますが、Docker とは異なり、root 権限が必要ありません。また、コンテナ内のプロセスを直接実行するための runc を使用しているため、セキュリティ性が高いとされています。

podman と docker の違い

podman と Docker の最大の違いは、root 権限が必要ないことです。Docker は root 権限を必要とするため、セキュリティ上の問題が懸念されていましたが、podman は root 権限を必要としないため、セキュリティ上の問題が解消されました。また、podman は、Docker と同様に Dockerfile を使用してイメージをビルドすることができます。

podman のインストールと準備

podman をインストールするためには、以下のコマンドを実行します。

sudo apt-get install podman # Debian 系の場合
sudo dnf -y install podman # RedHat 系の場合

インストールが完了したら、以下のコマンドを実行してバージョンを確認します。

podman version

podman の基本的な使い方

コンテナの起動

podman を使用してコンテナを起動するには、以下のコマンドを実行します。具体例は後述します。

podman run -it IMAGE_NAME

使用したオプションについて説明します。i オプションにより、標準入力がコンテナ内のアプリケーションに接続されます。これにより、ユーザーはキーボードからコンテナのアプリケーションに入力を行うことができます。入力が終了した場合は、CTRL-D を押すことで入力を終了することができます。t オプションは、コンテナの標準出力をターミナルに出力するために使用されます。コンテナ内のアプリケーションが出力するテキストがターミナルにリアルタイムで表示されます。なお、t オプションは、i オプションと一緒に使用することができます。この場合、i オプションにより標準入力がコンテナ内のアプリケーションに接続され、t オプションによりコンテナ内のアプリケーションが出力するテキストがターミナルに表示されるようになります。

コンテナの停止

コンテナを停止するには、以下のコマンドを実行します。

podman stop CONTAINER_ID

コンテナの削除

コンテナを削除するには、以下のコマンドを実行します。

podman rm CONTAINER_ID

podman で nginx を使う例

以下のコマンドを実行することで、podman で nginx を起動することができます。

podman run -d -P nginx

-P オプションを指定することで、コンテナ内のアプリケーションが使用する公開ポートがランダムにホストマシンのポートにマッピングされます。上記の nginx の例では、nginx コンテナ内の80番ポートがランダムに割り当てられたホストマシンのポートにマッピングされます。これにより、ホストマシンからコンテナ内のアプリケーションにアクセスすることができます。たとえば、以下のように podman psPORTS 項目や podman port コマンド出力でポートのマッピング状況を確認することができます。podman psPORTS0.0.0.0:42143->80/tcp となっている場合、ホストマシンから nginx のコンテンツにアクセスするには、ブラウザなどで「http://localhost:42143/」と指定すると nginx のウェルカムページが表示されます。

$ podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS        PORTS                  NAMES
cae53877dcb4  docker.io/library/nginx:latest  nginx -g daemon o...  9 minutes ago  Up 9 minutes  0.0.0.0:42143->80/tcp  friendly_gates
$ podman port cae53877dcb4
80/tcp -> 0.0.0.0:42143

ポートマッピングを手動で指定することもできます。たとえば、以下のように -p オプションを使用して、コンテナの 80番ポートをホストマシンの 8888番ポートにマッピングすることができます。

podman run -d -p 8888:80 nginx

この場合、コンテナの 80番ポートがホストマシンの 8888番ポートにマッピングされます。同様にブラウザで「http://localhost:8888」にアクセスすると nginx のウェルカムページが表示されます。

podman で postgresql を使う例

以下のコマンドを実行することで、podman で postgresql を起動することができます。

podman run -e POSTGRES_PASSWORD=mysecret -d postgres

このコマンドでは、パスワードを mysecret に設定して postgresql を起動しています。起動した postgresql へは podman exec コマンドで以下のようにアクセスできます。

$ podman ps
CONTAINER ID  IMAGE                              COMMAND     CREATED        STATUS        PORTS       NAMES
7ca129491e12  docker.io/library/postgres:latest  postgres    7 minutes ago  Up 7 minutes              admiring_lovelace
$ podman exec -it admiring_lovelace psql -U postgres
psql (14.4 (Debian 14.4-1.pgdg110+1))
Type "help" for help.

postgres=# select version();
                                                           version

-----------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 14.4 (Debian 14.4-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
(1 row)

postgres=# \\q
$

podman のイメージファイルを削除する方法

便利な podman ですが、コンテナをどんどん起動して使っていると知らない間にイメージファイルがディスク容量を消費していきます。ここではイメージファイルの削除方法について説明します。

$ podman images
REPOSITORY                   TAG               IMAGE ID      CREATED       SIZE
docker.io/library/sonarqube  lts               c25434a2db60  2 weeks ago   620 MB
docker.io/library/nginx      latest            904b8cb13b93  2 weeks ago   146 MB
docker.io/library/alpine     latest            9c6f07244728  7 months ago  5.83 MB
localhost/podman-pause       4.1.1-1655303518  2fbf8e4ada43  8 months ago  816 kB
docker.io/openzipkin/zipkin  latest            bb8766cdba93  8 months ago  156 MB
docker.io/library/postgres   latest            b2261d3c6ce0  8 months ago  384 MB
docker.io/library/kong       latest            e457308de474  9 months ago  144 MB
quay.io/centos/centos        latest            300e315adb2f  2 years ago   217 MB
$

podman imagesコマンドは、ローカルに保存されている Docker イメージまたは OCI イメージのリストを表示します。これらのイメージファイルを削除するには、podman rmiコマンドを使用します。以下は、イメージファイルを削除する方法の例です。

まず、削除したいイメージの名前または ID を podman images コマンドを使用してイメージのリストを表示し、削除したいイメージの名前または ID を確認します。次に、以下のコマンドを使用してイメージを削除します。

podman rmi [イメージ名またはID]

以下は実行例です。

$ podman rmi f522223805ca
Untagged: localhost/debug:latest
Deleted: f522223805ca443bb1e9d9a5d0958c3ca582fe5c9d2aac47e503fadd93a0bf73
$

また、以下のように、複数のイメージを同時に削除することもできます。

podman rmi [イメージ名またはID1] [イメージ名またはID2] ...

podman のイメージファイルを全て削除する方法

ローカルに保存されているすべての podman イメージを削除するには、以下のコマンドを使用します。

注意:意図しないイメージを誤って削除しないようにコマンド実行には十分注意してください。

podman rmi -a

podman のイメージに任意に付けた名前 (タグ) が関連付けられている場合は、-f オプションを追加して削除します。

podman rmi -af

以上、podman の使い方について紹介しました。podman を使用することで、より素早くセキュアで管理しやすいコンテナ環境を構築することができます。

関連記事