最近、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 ps
の PORTS
項目や podman port
コマンド出力でポートのマッピング状況を確認することができます。podman ps
の PORTS
が 0.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 を使用することで、より素早くセキュアで管理しやすいコンテナ環境を構築することができます。