Podmanは、Linux環境でコンテナーとポッドを開発、管理、およびデプロイするために構築された、無料のオープンソースコンテナープラットフォームです。 Redhatは2018年にPodmanを開発しました。これは、Dockerとは動作が異なるコンテナ化エンジンです。ポッドマンは、Docker CLIとDockerデーモンを使用するDockerとは異なり、動作するデーモンに依存しません。デーモンに依存していると、単一障害点になります。
Podmanは、Podmanがカーネル、コンテナー、およびイメージと直接対話できるようにするOCI(Open Container Initiative)標準に従って設計されています。また、rootアクセスを必要としないため、Dockerよりも安全です。どちらもOCIに準拠しているため、PodmanはDockerのドロップイン代替品として使用できます。
この記事では、Podmanをインストールし、それを使用してイメージとコンテナーを作成および管理する方法を説明します。
-
RockyLinuxベースのサーバー
-
root権限を持つ非sudoユーザー。
-
サーバーが更新されていることを確認します。
$ sudo dnf update
Podmanはcontainer-tools
に含まれています モジュール、BuildahおよびSkopeoとともに。 RockyLinux8のAppStreamリポジトリでも利用できます。モジュールメソッドを使用します。
dnf module
を使用してPodmanをインストールします コマンド。
$ sudo dnf module install container-tools
Podmanのバージョンをチェックして、正しくインストールされているかどうかを確認してください。
$ podman --version podman version 3.2.3
Nginxの画像を検索するには、次のコマンドを使用します。
$ podman search nginx
出力には、イメージの元のレジストリの名前とイメージの説明が表示されます。
イメージをダウンロードするには、次のいずれかのコマンドを使用します。
$ podman pull docker.io/library/nginx OR $ podman pull nginx
ダウンロードした画像は、次のコマンドで表示できます。
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest f8f4ffc8092c 3 days ago 138 MB
次のコマンドを使用して、Nginxイメージを使用してコンテナーを実行します。コンテナにウェブサーバーという名前を付けました 。
$ podman run -d --name webserver nginx
同じイメージを使用して、別の名前の別のコンテナを起動できます。
$ podman run -d --name webserver2 nginx
同じイメージを使用して、無制限の数のコンテナを起動できます。
実行中のすべてのコンテナを一覧表示するには、次のコマンドを使用します。
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 31 seconds ago Up 31 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 seconds ago Up 3 seconds ago webserver2
実行中のコンテナを停止します。
$ podman stop webserver webserver
停止したかどうかを確認します。
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
停止したコンテナを含むすべてのコンテナを一覧表示するには、-a
を使用する必要があります フラグ。
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Exited (0) 35 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
次のコマンドを使用して、停止したコンテナを起動します。
$ podman start webserver webserver
起動したかどうかを確認します。
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 3 minutes ago Up 16 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Up 2 minutes ago webserver2
コンテナを削除する前に停止する必要があります。
$ podman stop webserver2
コンテナを削除します。
$ podman rm webserver2
--force
を使用して、実行中のコンテナを削除できます フラグ。
$ podman rm webserver2 --force 35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27
コンテナの停止と強制終了は、最終的に同じことを達成する2つの異なることです。違いは、コンテナを停止するとコンテナが正常にシャットダウンされ、コンテナを強制終了すると強制的に終了するため、データが失われることです。
次のコマンドを使用して、コンテナを強制終了します。
$ podman kill -s 9 webserver2
上記のコマンドは、SIGNAL 9 (SIGKILL)
を使用します コンテナを強制終了するオプション。
すべてのコンテナを強制終了するには、--all
を使用します または-a
フラグを立て、最新のコンテナのみを強制終了するには、--latest
を使用します または-l
フラグ。
rmi
を使用して画像を削除できます コマンド。
$ podman rmi registry.redhat.io/rhel8/rsyslog
複数の画像をカンマで区切ることで削除できます。
$ podman rmi registry.redhat.io/rhel8/rsyslog registry.redhat.io/ubi8/ubi
システム上のすべての画像を削除するには、-a
を使用します フラグ。
$ podman rmi -a
コンテナログを表示するには、次のコマンドを使用します。
$ podman logs webserver /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up ......
--tail
を使用して、ログを最後の5行に制限できます。 オプション。
$ podman logs --tail=5 webserver 2021/10/05 10:13:52 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/10/05 10:13:52 [notice] 1#1: OS: Linux 4.18.0-305.19.1.el8_4.x86_64 2021/10/05 10:13:52 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 262144:262144 2021/10/05 10:13:52 [notice] 1#1: start worker processes 2021/10/05 10:13:52 [notice] 1#1: start worker process 23
デフォルトでは、ログにタイムスタンプは取得されません。 -t
を使用します ログにタイムスタンプを追加するためのフラグ。
$ podman logs -t webserver 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ 2021-10-05T09:25:02.033956297Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 2021-10-05T09:25:02.043751152Z 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 2021-10-05T09:25:02.064561317Z 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf .....
コンテナを検査すると、コンテナに関する情報が出力されます。
$ podman inspect webserver [ { "Id": "19b6668bc6278a66b3ffc98ae1515af25f5bebcd20bf26de803cae41c4485f59", "Created": "2021-10-05T09:25:01.784949744Z", "Path": "/docker-entrypoint.sh", "Args": [ "nginx", "-g", "daemon off;" ], "State": { "OciVersion": "1.0.2-dev", "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 4423, ....
デフォルトのコマンドは、長い出力をJSON形式で出力します。出力をフィルタリングするには、--format
を使用する必要があります オプション。コンテナがいつ開始されたかを確認するには、次のコマンドを実行します。
$ podman inspect webserver --format '{{.State.StartedAt}}' 2021-10-05 10:13:52.794806322 +0000 UTC
exec
を使用して、任意のコンテナのシェルプロンプトにアクセスできます。 オプション。
$ podman exec -it webserver2 /bin/bash
Podmanには、Dockerにはない独自の機能があります。 Podmanは、一緒に動作するコンテナからポッドを作成できます。これにより、複数のコンテナをまとめて管理できます。
ポッドを作成するには、次のコマンドを使用します。
$ podman pod create --name mypod
新しく作成したポッドにコンテナを追加します。
$ podman run --pod mypod --name myimage1 image:latest $ podman run --pod mypod --name myimage2 diff-image:latest
簡単な1行のコマンドを使用してコンテナを管理できるようになりました。
$ podman kill mypod # Kill all containers $ podman restart mypod # Restart all containers $ podman stop mypod # Stop all containers $ podman pod ps # List all pods $ podman pod top mypod # Display running processes in a pod $ podman pod inspect mypod # Inspect a Pod $ podman pod rm mypod # Remove the pod
これで、Podmanをインストールしてコンテナを実行するためのチュートリアルは終了です。 Podmanでできることはたくさんありますが、これについては説明していません。ご不明な点がございましたら、下のコメント欄に投稿してください。