Podmanは、Dockerコマンドラインと同様のエクスペリエンスを提供することでBuildahとSkopeoを補完します。つまり、ユーザーがスタンドアロンの(オーケストレーションされていない)コンテナーを実行できるようにします。また、Podmanはコンテナやポッドを実行するためにデーモンを必要としないため、大きな太ったデーモンに簡単に別れを告げることができます。バックグラウンドで処理を行うデーモンはありません。つまり、Podmanはsystemd
を介してシステムサービスに統合できます。 。
このガイドでは、Rocky Linux / Alma Linux /Centos8にPodmanをインストールする方法を学習します。この投稿はOracleLinuxなどのRHEL8派生物でも機能します。
関連記事
- Debian11にPodmanをインストールして使用する方法
- Fedora34/35にPodmanをインストールして使用する方法
- OpenSUSELeap15.3でPodmanをインストールして使用する方法
- Rocky Linux /Centos8でdockerをインストールして構成する方法
- Dockerの使用を開始する例を使用して作成する
- ビルドエージェントとしてのDocker–DockerでJenkinsビルドを実行する
前提条件
フォローするには、次のものがあることを確認してください。
- 更新されたRockyLinux/ Centos 8
- rootアクセスまたはsudoアクセスを持つユーザー
- インターネットへのアクセス
目次
- サーバーが最新であることを確認する
- podmanのインストール
- コマンドラインの例
- postgres永続コンテナを実行する
- systemdとPodmanを介したシステムサービスとしてのコンテナの管理
1。サーバーが最新であることを確認する
このコマンドを使用して、サーバーパッケージが更新されていることを確認します
sudo dnf update -y
共通のパッケージがインストールされていることを確認しましょう
sudo dnf install -y vim
2。 Podmanのインストール
Podmanは、CentOS8およびStreamのデフォルトのAppStreamリポジトリで使用できます。次のコマンドを使用してインストールします:
sudo dnf install -y podman
このコマンドは、Podmanとその依存関係をインストールします:atomic-registries
、runC
、skopeo-containers
、およびSELinuxポリシー。
それで全部です。これで、Podmanで遊ぶことができます。
3。コマンドラインの例
podmanを使用してRockyLinuxContainerを実行する方法を見てみましょう。
Dockerでは、次のコマンドを使用してRockyLinuxコンテナーを実行します。
docker run -it rockylinux/rockylinux:8.4 sh
docker
がないため、これは失敗します RockyLinuxサーバーのコマンド。 Dockerをpodmanに置き換えることができます:
podman run -it rockylinux/rockylinux:8.4 sh
いくつかのコマンドを実行して、期待どおりに機能していることを確認しましょう。
$ podman run -it rockylinux/rockylinux:8.4 sh
✔ docker.io/rockylinux/rockylinux:8.4
Trying to pull docker.io/rockylinux/rockylinux:8.4...
Getting image source signatures
Copying blob 1b474f8e669e done
Copying config 333da17614 done
Writing manifest to image destination
Storing signatures
sh-4.4# ps ax
PID TTY STAT TIME COMMAND
1 pts/0 Ss 0:00 sh
6 pts/0 R+ 0:00 ps ax
sh-4.4# exit
exit
コンテナのステータスを確認するには、podman ps
を使用します コマンド
$ podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f81814c698e docker.io/rockylinux/rockylinux:8.4 sh 3 minutes ago Exited (0) 3 minutes ago competent_pasteur
コンテナを削除するには、podman rm
を使用します :
$ podman rm 5f81814c698e
5f81814c698ef09484c66d4427fda5de21c4dca1766a67ee108d256117460d71
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/rockylinux/rockylinux 8.4 333da17614b6 4 months ago 234 MB
[[email protected] ~]$ podman image rm rockylinux/rockylinux
Untagged: docker.io/rockylinux/rockylinux:8.4
Deleted: 333da17614b642a228c30edcb2bddfdf17b2d713ae71b7930c44b714ff8b92e7
画像を一覧表示するには:
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/rockylinux/rockylinux 8.4 333da17614b6 4 months ago 234 MB
画像podman image rm
を使用して画像を削除できます コマンド:
$ podman image rm rockylinux/rockylinux
Untagged: docker.io/rockylinux/rockylinux:8.4
Deleted: 333da17614b642a228c30edcb2bddfdf17b2d713ae71b7930c44b714ff8b92e7
上記から、podmancommandnがdockerと同じ構文を使用していることを確認できます
Postgres永続コンテナを実行する
次に、永続コンテナーを実行する方法を調べてみましょう。この例では、Postgres 14コンテナーを実行し、postgresデータをローカルボリュームにマウントして、再起動を持続できるようにします。コンテナはエピメラルであるため、ローカルボリュームに保存しないと、データが失われます。
docker.io/library/postgres:14.0-alpine
をプルします 画像
$ podman pull docker.io/library/postgres:14.0-alpine
✔ docker.io/library/postgres:14.0-alpine
Trying to pull docker.io/library/postgres:14.0-alpine...
Getting image source signatures
Copying blob 82e9eb77798b done
Copying blob c6b2245b2f36 done
Copying blob a0d0a0d46f8b done
Copying blob 3da258773353 done
Copying blob ccd761727716 done
Copying blob 5034a66b99e6 done
Copying blob 2c7ee7bc69e8 done
Copying blob 028554d3b6cc done
Copying config 87440f4e7f done
Writing manifest to image destination
Storing signatures
87440f4e7f9e60607dc11a4f0590a1c69b3a1c075211df478e22b0c27fb263e6
画像を確認する
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/postgres 14.0-alpine 87440f4e7f9e 2 weeks ago 198 MB
で画像を検査します
$ podman inspect 87440f4e7f9e
コンテナを起動したら、Postgresデータを処理するフォルダを設定しましょう:
$ mkdir -p ~/apps/postgres/data
実行する
podman run -d \
-p 5432:5432 \
-v ~/apps/postgres/data:/var/lib/postgresql/data:Z \
-e POSTGRES_PASSWORD=Sup3rSecre7 \
-e POSTGRES_USER=citizix_user \
-e POSTGRES_DB=citizix_db \
docker.io/library/postgres:14.0-alpine
これが私の出力です
$ podman run -d \
> -p 5432:5432 \
> -v ~/apps/postgres/data:/var/lib/postgresql/data:Z \
> -e POSTGRES_PASSWORD=Sup3rSecre7 \
> -e POSTGRES_USER=citizix_user \
> -e POSTGRES_DB=citizix_db \
> docker.io/library/postgres:14.0-alpine
9aa1fb68beeeb7c68a9ea5afb4ca91bf07acf3fef92bf21249a6d8a4e43f5dbd
プロセスを確認する:
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9aa1fb68beee docker.io/library/postgres:14.0-alpine postgres 46 seconds ago Up 47 seconds ago 0.0.0.0:5432->5432/tcp gracious_jemison
これでコンテナログを確認します。 dbを初期化していることがわかります
$ podman logs 9aa1fb68beee | head performing post-bootstrap initialization ... sh: locale: not found 2021-11-11 09:05:00.481 UTC [30] WARNING: no usable system locales were found The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "en_US.utf8". The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english". Data page checksums are disabled. fixing permissions on existing directory /var/lib/postgresql/data ... ok
データベースに接続して、いくつかの操作を実行しましょう
$ podman exec -it 9aa1fb68beee /bin/bash
bash-5.1# psql -U citizix_user -d citizix_db;
psql (14.0)
Type "help" for help.
citizix_db=# select version();
version
--------------------------------------------------------------------------------------------------------------
PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit
(1 row)
citizix_db=#
次に、コンテナの強制終了と削除について見ていきましょう。 podman kill
を使用できます コンテナを停止します。これによりコンテナは停止しますが、引き続き存在します。 podman ps -a
を使用します リストする。完全に削除するには、podman rm -f
。
$ podman kill 9aa1fb68beee
9aa1fb68beee
$ podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9aa1fb68beee docker.io/library/postgres:14.0-alpine postgres 14 minutes ago Exited (137) 20 seconds ago 0.0.0.0:5432->5432/tcp gracious_jemison
$ podman rm -f 9aa1fb68beee
9aa1fb68beeeb7c68a9ea5afb4ca91bf07acf3fef92bf21249a6d8a4e43f5dbd
systemdとPodmanを介したシステムサービスとしてのコンテナの管理
systemdを介してpodmanコンテナを管理できます。 systemd
を作成しましょう 上で作成したpostgresコンテナを処理するためのリソースファイル。
postgres podmanファイルを作成します:
sudo vim /etc/systemd/system/postgres-podman.service
このコンテンツを追加
[Unit]
Description=Custom Postgres Podman Container
After=network.target
[Service]
Type=simple
TimeoutStartSec=5m
ExecStartPre=-/usr/bin/podman rm -f postgrespodman
ExecStart=/usr/bin/podman run \
-p 5432:5432 \
-v /home/rocky/apps/postgres/data:/var/lib/postgresql/data:Z \
-e POSTGRES_PASSWORD=Sup3rSecre7 \
-e POSTGRES_USER=citizix_user \
-e POSTGRES_DB=citizix_db \
docker.io/library/postgres:14.0-alpine
ExecReload=-/usr/bin/podman stop postgrespodman
ExecReload=-/usr/bin/podman rm postgrespodman
ExecStop=-/usr/bin/podman stop postgrespodman
Restart=always
RestartSec=30
[Install]
次に、systemd
をリロードできます カタログを作成してサービスを開始します:
sudo systemctl daemon-reload
sudo systemctl start postgres-podman
サービスステータスの確認
$ sudo systemctl status postgres-podman
● postgres-podman.service - Custom Postgres Podman Container
Loaded: loaded (/etc/systemd/system/postgres-podman.service; static; vendor preset: disabled)
Active: active (running) since Thu 2021-11-11 10:07:09 UTC; 21s ago
Process: 71868 ExecStop=/usr/bin/podman stop postgrespodman (code=exited, status=125)
Process: 71943 ExecStartPre=/usr/bin/podman rm -f postgrespodman (code=exited, status=1/FAILURE)
Main PID: 71973 (podman)
Tasks: 11 (limit: 23167)
Memory: 27.8M
CGroup: /system.slice/postgres-podman.service
├─71973 /usr/bin/podman run -p 5432:5432 -v /home/rocky/apps/postgres/data:/var/lib/postgresql/data:Z -e POSTGRES_PASSWORD=Sup3rSecre7 -e POSTGRES_USER=citizix_user -e POSTGRE>
└─72073 /usr/bin/conmon --api-version 1 -c 03e82c0f88fe4d69630b308f59f2e62bb23b19021a0de5ab0b267950c9367103 -u 03e82c0f88fe4d69630b308f59f2e62bb23b19021a0de5ab0b267950c9367103>
Nov 11 10:07:09 ip-10-2-40-72.us-west-2.compute.internal systemd[1]: Starting Custom Postgres Podman Container...
Nov 11 10:07:09 ip-10-2-40-72.us-west-2.compute.internal podman[71943]: Error: no container with name or ID "postgrespodman" found: no such container
Nov 11 10:07:09 ip-10-2-40-72.us-west-2.compute.internal systemd[1]: Started Custom Postgres Podman Container.
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: PostgreSQL Database directory appears to contain a database; Skipping initialization
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.428 UTC [1] LOG: starting PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10>
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.429 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.429 UTC [1] LOG: listening on IPv6 address "::", port 5432
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.432 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.437 UTC [20] LOG: database system was shut down at 2021-11-11 10:07:09 UTC
Nov 11 10:07:10 ip-10-2-40-72.us-west-2.compute.internal podman[71973]: 2021-11-11 10:07:10.440 UTC [1] LOG: database system is ready to accept connections
Podmanで管理されているコンテナに基づいてカスタムシステムサービスを設定しました!
結論
このガイドでは、Rocky Linux /Centos8サーバーにPodmanをインストールする方法を探ることができました。