ウェブサイト検索

AlmaLinux 9にPodmanをインストールして使用するための初心者ガイド


AlmaLinux 9にPodmanをインストールして使用するための初心者ガイド

このページで

  1. 前提条件
  2. Podmanのインストール
  3. 非ルートユーザーとしてPodmanを実行する
  4. コンテナイメージの発見
  5. 画像をダウンロード中
  6. 画像を検査する
  7. コンテナを実行する
  8. ログコンテナを確認しています
  9. コンテナを停止する
  10. カスタムボリュームを持つコンテナの実行
  11. コンテナにログイン中
  12. ポッドの実行と管理
  13. 結論

Podmanは、Open Container Initiative(OCI)コンテナおよびコンテナイメージを使用してアプリケーションを展開するためのLinuxネイティブツールです。DockerイメージやOCIコンテナイメージなど、複数のコンテナイメージフォーマットをサポートしています。また、Podmanはポッドおよびコンテナのグループの管理もサポートしています。

Podmanはデーモンレスのツールで、サービスなしで単一のバイナリコマンドラインとして実行されます。Dockerに似たコマンドラインを提供し、'alias docker=podman'のようなエイリアスを使うことができます。

このガイドでは、AlmaLinux 9 サーバーで Docker Engine の代替として Podman をインストールし、使用する方法を説明します。コンテナアプリケーションを管理するための Podman の基本的な使い方を学びます。このガイドを完了することで、ローカル開発のためのコンテナオーケストレーションとして Podman を利用する理解が深まります。

前提条件

このガイドを始めるには、以下のものが必要です:

  • AlmaLinux 9 サーバー - この例では、ホスト名が「AlmaLinux9」のサーバーを使用します。
  • sudo/root管理者権限を持つ非ルートユーザー。

Podmanのインストール

Podmanは、迅速な開発のためのデーモンレスかつオープンソースのコンテナオーケストレーションです。PodmanはLinuxネイティブアプリケーションであり、Dockerと似たコマンドラインインターフェースを提供します。

Podmanを使用すると、OCI(オープンコンテナイニシアチブ)コンテナおよびコンテナイメージを使用して、アプリケーションを見つけて実行したり、共有したり、展開したりできます。

AlmaLinuxでは、PodmanはAppStreamリポジトリでデフォルトで利用可能であり、DNFパッケージマネージャーを使用してインストールできます。

次のdnfコマンドを実行して、AlmaLinuxサーバーにPodmanをインストールします。

sudo dnf install podman

プロンプトが表示されたらyを入力し、ENTERを押します。

Podmanはデーモンレスなので、デーモンを起動せずに直接実行できます。

次のコマンドを実行して、Podmanのバージョンとインストールに関する詳細情報を確認してください。

podman version

これは、この記事を書いている時点の現在のPodmanバージョンの出力です:

さらに、次のコマンドを使用してPodmanのインストールの詳細を確認することもできます。

podman info

非ルートユーザーとしてPodmanを実行する

このセクションでは、非ルートユーザーのためにPodmanを設定します。新しいユーザーを作成し、その新しい非ルートユーザーがPodmanを使用してコンテナを実行および実行できることを確認します。

aliceという名前の新しいユーザーを作成し、そのパスワードを設定するには、以下のコマンドを実行してください。プロンプトが表示されたら新しいパスワードを入力し、続けて繰り返します。

sudo useradd -m -s /bin/bash alice
sudo passwd alice

今、新しいユーザーaliceをグループwheelに追加します。これにより、新しいユーザーはsudoを実行し、rootになれるようになります。

sudo usermod -aG wheel alice

その後、次のコマンドを実行してユーザー 'alice' に対してリ lingering を有効にします。これにより、ユーザー 'alice' はログアウトしてもコンテナプロセスを長期間実行できるようになります。プロセスは依然として実行されます。

sudo loginctl enable-linger alice

次に、以下のコマンドを使用して新しいユーザー「alice」としてログインしてください。

su - alice

以下の 'podman' コマンドを実行して、'hello-world' イメージを使用して新しいコンテナを起動してください。

podman run hello-world

成功すれば、次のような出力が得られるはずです:

最後に、以下の「podman」コマンドを実行して、実行中および終了したコンテナのリストを確認してください。

podman ps -a

設定が成功すると、状態が「Exited」の基本イメージ「hello-world」のコンテナが表示されるはずです。

コンテナイメージの発見

デフォルトでは、PodmanはRedhatのイメージレジストリ、quay.io、そしてDockerHubなどの複数のイメージレジストリからコンテナイメージを取得します。さらに多くのコンテナイメージレジストリを設定ファイル「/etc/containers/registries.conf」に追加することができます。

この例ではDockerHubをコンテナレジストリとして使用しますので、始めましょう。

以下のコマンドを実行して、'httpd'を含む新しいコンテナイメージを見つけてください。

podman search httpd

以下は、あなたのターミナルで受け取るべき出力です:

出力を次のように '--limit' オプションを使用して制限することもできます。

podman search httpd --limit 3

これにより、各コンテナイメージレジストリから上位3つのコンテナイメージのみが表示されます。

最後に、次のように「--filter」オプションを使用することもできます。

podman search httpd --filter=is-official

これにより、公式のコンテナイメージのみが表示されます。

画像をダウンロード中

コンテナイメージを見つけたら、次のステップはレジストリからコンテナイメージをダウンロードすることです。

以下のコマンドを実行して、タグ'alpine'のイメージ'httpd'をダウンロードします。

podman pull httpd:alpine

使用したいイメージレジストリを選択してください。この例ではDockerHubを使用します。

ソースが選択された後、ダウンロードプロセスが始まります。

完了したら、次のコマンドを実行して、AlmaLinuxサーバー上で利用可能なイメージを確認してください。

podman images

この時点で、成功すれば、quay.ioからの画像「hello-world」とDockerHubからの「httpd」の2つのコンテナイメージを取得できるはずです。

画像を検査する

イメージを検査することは、コンテナがどのように起動するかについての詳細な情報を得るための強力な手段です。PodmanやDockerでは、'inspect'オプションを使ってイメージを検査することができます。

httpd:alpineに関する詳細情報を得るために、次のコマンドを実行してください。

podman inspect docker.io/library/httpd:alpine

これにより、作成日、サイズ、デフォルトの作業ディレクトリ、スタートコマンド、公開ポートなど、画像に関する詳細情報が表示されます。

追加のパラメータを使って、チェックしたい部分を指定することもできます。

podman inspect --format "size: {{.Size}}" docker.io/library/httpd:alpine
podman inspect --format "ports: {{.Config.ExposedPorts}}" docker.io/library/httpd:alpine
podman inspect --format "workdir: {{.Config.WorkingDir}}" docker.io/library/httpd:alpine

これにより、画像のサイズ、デフォルトの公開ポート、およびデフォルトの作業ディレクトリが表示されます。

コンテナを実行する

このセクションでは、Podmanを使用してコンテナを実行する方法を学びます。

新しいコンテナを「httpd」と名付け、ホストマシンのポート8080を公開し、イメージ「httpd:alpine」を使用するには、次のコマンドを入力してください。また、パラメーター「--rm」は、コンテナを停止すると自動的にコンテナを削除します。

podman run -it --rm -d -p 8080:80 --name httpd docker.io/library/httpd:alpine

成功すれば、新しいコンテナIDのランダムな文字列と数字を取得できるはずです。

以下のコマンドを使用して実行中のコンテナを確認してください。コンテナ「httpd」が「Up」の状態で、ホストマシンのポート8080を使用しているはずです。

podman ps

次に、以下のcurlコマンドを使用してコンテナ「httpd」を確認できます。以下の例にあるIPアドレスをあなたのサーバーのIPアドレスに置き換えることを忘れないでください。

curl http://192.168.5.20:8080/

成功すれば、次のような出力が得られるはずです:

さらに、ウェブブラウザを通じて'httpd'コンテナにもアクセスできます。ウェブブラウザを開き、サーバーのIPアドレスの後にコンテナポート8080を続けて訪れてください(例:http://192.168.5.20:8080/)。

成功した場合、コンテナ'httpd'からデフォルトのindex.htmlページが次のように表示されるはずです:

ログコンテナを確認しています

コンテナ 'httpd' が稼働中の今、コンテナからのログを確認します。これはアプリケーションのデバッグに役立ちます。

コンテナ「httpd」のすべてのログを表示するには、次のコマンドを実行してください。

podman logs httpd

これはコンテナ「httpd」からのログの例です。

次に、次のように '--tail' パラメータを使用してログ出力を削減できます。

podman logs --tail 20 httpd

この例では、パラメータ「tail 20」はコンテナ「httpd」から最新の20行のログを表示します。

コンテナを停止する

今、コンテナを停止したい場合は、単に`podman stop`を実行してください。

httpdコンテナを停止するために、次のコマンドを実行してください。

podman stop httpd

コンテナ「httpd」が停止したら、以下のコマンドを実行してシステムにある利用可能なコンテナのリストを確認してください。

podman ps
podman ps -a

コンテナ「httpd」は、コンテナが停止した後に自動的に削除されます。これは、あなたが「--rm」のパラメーターを使ってコンテナを実行しているためです。

カスタムボリュームを持つコンテナの実行

この例では、カスタムボリュームで新しいコンテナを実行します。これにより、ホストマシン上のローカルディレクトリがコンテナにマウントされます。

ユーザーaliceのホームディレクトリ内に新しい'data'ディレクトリを作成します。その後、nanoエディタを使用して'data'ディレクトリ内に新しい'index.html'ファイルを作成します。

mkdir -p ~/data/
nano ~/data/index.html

以下のHTMLスクリプトを挿入してください。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Welcome to Container Nginx</title>
</head>
<body>
  <h2>Hello from httpd container - Managed with Podman</h2>
</body>
</html>

ファイルを保存して閉じてください。

次に、カスタムボリュームとしての「data」ディレクトリを持つ新しいコンテナ「httpd」を実行するために、次のコマンドを実行してください。このボリュームはコンテナの「/usr/local/apache2/htdocs」ディレクトリにマウントされます。

podman run --privileged=true -it --rm -d -p 8080:80 --name httpd -v ~/data:/usr/local/apache2/htdocs docker.io/library/httpd:alpine

さらに、このコンテナは追加のパラメーター「--privileged=true」で実行されています。これはテスト用のものであり、それでもコンテナはルートユーザーではなくユーザー「alice」として実行されます。Podmanの特権フラグに関する詳細情報を取得してください。

次に、システム上の実行中のコンテナを確認するために以下のコマンドを実行します。

podman ps

成功すると、新しいコンテナ「httpd」がステータス「稼働中」で表示され、ホストマシンのポート8080が公開されているはずです。

以下のcurlコマンドを実行して、新しいコンテナ「httpd」を確認してください。

curl http://192.168.5.21:8080/

以前に作成したindex.htmlスクリプトの出力を取得するべきです。

http://192.168.5.21:8080/のウェブブラウザから、次のようなカスタムページが表示されるはずです。

コンテナにログイン中

'httpd'コンテナが実行中の場合、'podman exec'コマンドを使用してシェル経由でコンテナにアクセスできます。

以下のコマンドを使用して、コンテナ「httpd」にログインします。これにより、コンテナ「httpd」で「/bin/sh」シェルが実行され、現在のセッションに接続されます。

podman exec -it httpd /bin/sh

ログインすると、ディレクトリ'WorkingDir'にいるはずです。この例では、デフォルトのWorkingDirは'/usr/local/apache2'ディレクトリです。

次に、コンテナ'httpd'で次のコマンドを実行します。現在のユーザー、コンテナのローカルIPアドレス、およびコンテナのデフォルトゲートウェイを確認してください。

id
ip a
route -n

出力は異なるIPアドレスとゲートウェイを持つ可能性がありますが、これは次のように似ているべきです:

ポッドの実行と管理

Podmanでは、Podを作成して実行することができます。Podはコンテナのラッパーであり、複数のコンテナが単一のPodで実行できることを意味します。Kubernetesと同様に、Podはアプリケーションが実行される最小の単位です。

Podmanを使用すると、KubernetesがなくてもPodを作成して実行できます。

次のコマンドを実行して、新しいポッド httpdTest を作成し、イメージ「httpd:alpine」を使用し、ホストマシンのポート9090を公開します。

podman run -dt --pod new:httpdTest -p 9090:80 docker.io/library/httpd:alpine

成功すれば、ランダムな文字列とPod IDの番号を取得するはずです。

次に、システム上で実行中のPodを確認するために次のコマンドを実行してください。

podman pod ls

「httpdTest」というPodが「Running」としてステータスが表示されており、2つのコンテナがあるはずです。

これで、ポッドで'inspect'オプションをこのように利用できるようになりました。

podman pod inspect httpdTest

httpdTestポッドについての詳細情報を入手するべきです。

以下のコマンドを使用して、ポッド内で実行されているコンテナの数やコンテナの名前を確認することもできます。

podman pod inspect --format="containers: {{.NumContainers}}" httpdTest
podman pod inspect --format "{{.Containers}}" httpdTest

あなたはこのような出力を得るでしょう:

最後に、ホストマシンのポート9090で実行されているポッドhttpdTestにアクセスするために、次のコマンドを実行します。成功すれば、ポッドhttpdTestで実行されているデフォルトのindex.htmlページが表示されるはずです。

curl http://192.168.5.21:9090/

結論

おめでとうございます!あなたは今、AlmaLinux 9にPodmanをインストールしました。また、イメージやコンテナを管理するためのPodmanの基本的な使い方も学びました。さらに、Podmanを使ってPodを作成し、実行する方法も学びました。

関連記事: