ウェブサイト検索

Rocky LinuxでのPodman(Dockerの代替)の使い始め


Rocky LinuxでのPodman(Dockerの代替)の使い始め

このチュートリアルはこれらのOSバージョンのために存在します

  • ロッキー・リナックス 8.4
  • ロッキーリナックス 8.4

このページで

  1. 前提条件
  2. Rocky LinuxにPodmanをインストールする
  3. Podmanの重要な設定
  4. 新しいユーザーを設定する
  5. Podmanの基本的な使い方

    1. コンテナ画像を検索する
    2. コンテナイメージを管理する
    3. Podmanでコンテナを実行する
    4. ポッドマンでコンテナーログを確認する
    5. Podmanを使用してコンテナを停止する
    6. Podmanでカスタムボリュームを設定する
    7. 稼働中のコンテナにSSH接続する
    8. 環境をきれいにする
  6. 結論

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

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

コンテナを実行し、コンテナイメージを管理するために、Podmanはlibpodおよびrunc、crun、runvなどのOCIコンテナランタイムに依存しています。

前提条件

このガイドでは、Rocky LinuxシステムにPodmanをインストールする方法を学びます。また、コンテナとコンテナイメージを管理するためのPodmanの基本的な使用法についても学びます。

始める前に、以下の要件が揃っていることを確認してください:

  • オペレーティングシステム: ロッキー・リナックス 8.4 (グリーン・オブシディアン)
  • ルート特権: 新しいパッケージのインストールおよびシステム設定の編集のため

さあ、Podmanのインストールを始めましょう。

Rocky LinuxにPodmanをインストールする

デフォルトでは、Rocky Linuxのappstreamリポジトリはpodmanパッケージを提供します。

1. 下記のDNFコマンドを実行して、podmanパッケージに関する情報を表示します。

sudo dnf info podman

以下のような似た出力が表示されます。

Last metadata expiration check: 0:07:09 ago on Tue 16 Nov 2021 09:30:27 AM UTC.
Available Packages
Name         : podman
Version      : 3.3.1
Release      : 9.module+el8.5.0+710+4c471e88
Architecture : x86_64
Size         : 12 M
Source       : podman-3.3.1-9.module+el8.5.0+710+4c471e88.src.rpm
Repository   : appstream
Summary      : Manage Pods, Containers and Container Images
URL          : https://podman.io/
License      : ASL 2.0 and GPLv3+
Description  : podman (Pod Manager) is a fully featured container engine that is a simple
             : daemonless tool.  podman provides a Docker-CLI comparable command line that
             : eases the transition from other container engines and allows the management of
             : pods, containers and images.  Simply put: alias docker=podman.
             : Most podman commands can be run as a regular user, without requiring
             : additional privileges.
             :
             : podman uses Buildah(1) internally to create container images.
             : Both tools share image (not container) storage, hence each can use or
             : manipulate images (but not containers) created by the other.
             :
             : Manage Pods, Containers and Container Images
             : podman Simple management tool for pods, containers and images

appstream リポジトリは Podman パッケージのバージョン「3.3.1」を提供しています。

2. 以下のDNFコマンドを使用してPodmanをインストールします。

sudo dnf install podman

yと入力して、Enterを押してインストールを続行してください。

3. Podmanのインストールが完了したら、次のコマンドを使用して確認してください。

podman version

以下のような似た出力が表示されます。

Version:      3.3.1
API Version:  3.3.1
Go Version:   go1.16.7
Built:        Wed Nov 10 01:48:06 2021
OS/Arch:      linux/amd64

Podmanの重要な設定

Podmanパッケージには、'/etc/containers'ディレクトリにあるいくつかのデフォルト設定が含まれています。

以下は知っておくべきPodmanの設定です。

  • policy.json。画像署名のためのポリシー設定。
  • registries.conf。Docker Registry、RHEL コンテナイメージレジストリ、および Fedora コンテナイメージレジストリなど、利用可能なコンテナイメージレジストリのリスト。
  • storage.conf。Podmanのデフォルトストレージの設定。ドライバー、場所などが含まれます。
  • ディレクトリ registries.d/。追加のレジストリ設定とイメージ署名
  • ディレクトリ registries.conf.d/。コンテナイメージのエイリアスに関する追加設定。

新しいユーザーを設定する

このステップでは、新しいユーザーを作成し、Dockerイメージ「hello-world」を実行してPodmanのインストールを確認します。

1. 以下のコマンドを実行して新しいユーザー「johndoe」を追加します。

useradd -m -s /bin/bash johndoe
passwd johndoe

ジョン・ドーのために新しい強力なパスワードを入力してください。

次に、以下のコマンドを使用してユーザー「johndoe」としてログインします。

su - johndoe

3. 新しいコンテナを Docker イメージ「hello-world」に基づいて実行するには、次のコマンドを実行してください。

podman run hello-world

出力として「Hello World」メッセージが表示されます。これはコンテナが実行中だったが、現在は終了していることを意味します。

? docker.io/library/hello-world:latest
Trying to pull docker.io/library/hello-world:latest...
Getting image source signatures
Copying blob 2db29710123e done
Copying config feb5d9fea6 done
Writing manifest to image destination
Storing signatures
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
For more examples and ideas, visit:
 https://docs.docker.com/get-started/

4. 下記のPodmanコマンドを使用して、システム上のコンテナの状態を確認してください

podman ps -a

あなたは、現在のステータスが「Exited」であるDockerイメージ「hello-world」に基づいたコンテナを見るでしょう。

CONTAINER ID  IMAGE                                 COMMAND     CREATED        STATUS                    PORTS       NAMES
cea9bbfeac4d  docker.io/library/hello-world:latest  /hello      6 minutes ago  Exited (0) 6 minutes ago              recursing_shaw

Podmanの基本的な使い方

このステップでは、コンテナとコンテナ画像を管理するためのPodmanの基本的な使い方を学びます。

コンテナ画像を検索する

1. Podmanを使ってコンテナイメージを見つけるには、以下のコマンドを使用します。この例では、名前が'nginx'のコンテナイメージを検索しています。

podman search nginx

複数のレジストリからのコンテナイメージをたくさん見ることになります。

2. 各コンテナイメージレジストリからの検索結果を '--limit n' オプションを使用して制限することができます。

podman search nginx --limit 3

これから、名前が「nginx」のコンテナイメージの3つの結果を持つ各レジストリを見ることができます。

INDEX              NAME                                                DESCRIPTION                                      STARS       OFFICIAL    AUTOMATED
fedoraproject.org  registry.fedoraproject.org/f29/nginx                                                                 0
fedoraproject.org  registry.fedoraproject.org/f29/origin-nginx-router                                                   0
redhat.com         registry.access.redhat.com/ubi8/nginx-120           Platform for running nginx 1.20 or building ...  0
redhat.com         registry.access.redhat.com/ubi8/nginx-118           Platform for running nginx 1.18 or building ...  0
redhat.com         registry.access.redhat.com/rhscl/nginx-18-rhel7     Nginx 1.8 server and a reverse proxy server      0
centos.org         registry.centos.org/bamachrn/nginx-header                                                            0
centos.org         registry.centos.org/centos/nginx                                                                     0
centos.org         registry.centos.org/centos/nginx-110-centos7                                                         0
docker.io          docker.io/library/nginx                             Official build of Nginx.                         15839       [OK]
docker.io          docker.io/jwilder/nginx-proxy                       Automated Nginx reverse proxy for docker con...  2096                    [OK]
docker.io          docker.io/nginxinc/nginx-unprivileged               Unprivileged NGINX Dockerfiles                   54

コンテナイメージを管理する

PodmanはOCIおよびDockerイメージフォーマットをサポートしています。この段階では、Podmanを使用してコンテナイメージを管理します。

1. 次のコマンドを使用してコンテナイメージ'nginx:alpine'をダウンロードします。

podman pull nginx:alpine

使用するコンテナレジストリを選択し、確認するには「Enter」を押してください。この例では、Dockerレジストリを使用します。

? Please select an image:
    registry.fedoraproject.org/nginx:alpine
    registry.access.redhat.com/nginx:alpine
    registry.centos.org/nginx:alpine
  ? docker.io/library/nginx:alpine

ダウンロードプロセスが始まります。

? docker.io/library/nginx:alpine
Trying to pull docker.io/library/nginx:alpine...
Getting image source signatures
Copying blob a4e156412037 done
Copying blob a2402c2da473 done
Copying blob e0bae2ade5ec done
Copying blob 97518928ae5f done
Copying blob 3f3577460f48 done
Copying blob e362c27513c3 done
Copying config b46db85084 done
Writing manifest to image destination
Storing signatures
b46db85084b80a87b94cc930a74105b74763d0175e14f5913ea5b07c312870f8

2. コンテナイメージのダウンロードプロセスが完了したら、次のコマンドを使用してダウンローダーイメージを確認します。

podman images

以下は、あなたが得ることになる類似の出力です。

REPOSITORY                     TAG         IMAGE ID      CREATED      SIZE
docker.io/library/nginx        alpine      b46db85084b8  3 days ago   24.7 MB
docker.io/library/hello-world  latest      feb5d9fea6a5  7 weeks ago  19.9 kB

Podmanでコンテナを実行する

コンテナイメージ「nginx:alpine」をダウンロードした後、Podmanを使用して新しいコンテナを実行する方法を学びます。

1. 以下のコマンドを実行して、イメージ「nginx:alpine」に基づいてコンテナを実行します。

podman run -it --rm -d -p 8080:80 --name web nginx:alpine

コンテナのランダムな文字列と番号が得られます。

2. 次のコマンドを使用して、システムで実行中のコンテナを確認してください。

podman ps

あなたは以下のような出力を見るでしょう。

コンテナ名『web』は『Up』で、ホストマシンのポート『8080』を公開しています。

3. それでは、ウェブブラウザを開き、アドレスバーに Rocky Linux のIPアドレスを入力してください。この例では、Rocky Linux マシンのIPアドレスは '192.168.1.10' です。

http://192.168.1.10:8080/

コンテナ'web'からのデフォルトのindex.htmlが表示されます。これは、コンテナイメージ'nginx:alpine'に基づいています。

ポッドマンでコンテナーログを確認する

これから、'logs'オプションを使用してコンテナのログを確認するためのPodmanコマンドを学びます。

1. コンテナのログを確認するには、以下のPodmanコマンドを使用できます。

podman logs web

コンテナ 'web' の詳細なログを見ることができます。

2. コンテナのログ出力を制限するには、オプション「--tail n」を使用します。

podman logs --tail 10 web

以下はコンテナ「web」の類似ログ出力です。

Podmanを使用してコンテナを停止する

1. コンテナ「web」を停止するには、以下のPodmanコマンドを使用してください。

podman stop web

現在、コンテナ 'web' は停止されます。

2. 次のコマンドを使用して確認します。

podman ps
podman ps -a

コンテナ「web」は、自動的に削除されることに注意してください。これは、コンテナを実行するときにオプション「--rm」を使用しているためです。

Podmanでカスタムボリュームを設定する

このステップでは、Podmanを使ってボリュームを管理する方法を学びます。

1. 新しいディレクトリ「data」を作成し、カスタムファイル「index.html」を作成します。これにより、Nginxコンテナ内のデフォルトのNginx「index.html」ファイルが置き換えられます。

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

以下のHTMLスクリプトをコピーして貼り付けてください。

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

スクリプトを保存して終了します。

2. 次に、カスタムボリュームを持つ新しいコンテナを作成するために、次のコマンドを実行します。

podman run -it --rm -d -p 8080:80 --name web -v ~/data:/usr/share/nginx/html nginx:alpine

新しいコンテナのカスタムボリュームを設定するには、オプション '-v data:/usr/share/nginx/html' を使用してください。'data' ディレクトリはコンテナディレクトリ '/usr/share/nginx/html' にマウントされます。

3. 下記のPodmanコマンドを使用して実行中のコンテナを確認します。

podman ps

新しいコンテナ名「web」は、カスタムボリュームを使って「Up」になっています。

4. ウェブブラウザを開き、サーバーのIPアドレスにポート「8080」を入力してください。

http://192.168.1.10:8080/

これからカスタムの 'index.html' ページが以下のように表示されます。

稼働中のコンテナにSSH接続

このステップでは、実行中のコンテナのシェルにアクセスします。

1. 実行中のコンテナにログインするには、以下のようにPodmanの'exec'オプションを使用します。

podman exec -it web /bin/sh

2. コンテナにログインした後、コンテナのホスト名、IPアドレス、およびルーティングテーブルを確認してください。

hostname
ip a
route -n

今すぐ「exit」と入力し、Enterを押してコンテナからログアウトしてください。

環境をきれいにする

最後のステップでは、環境をきれいにします。

1. 次のコマンドを使用してコンテナ'web'を停止します。

podman stop web

次に、以下のpodmanコマンドを使用して、状態が「Exited」のすべてのコンテナを削除します。

podman rm $(podman ps --filter "status=exited" -q)

これで、コンテナとコンテナイメージを管理するためのPodmanの基本的な使用法が完了しました。

結論

おめでとうございます!Rocky LinuxシステムにPodmanを正常にインストールしました。また、コンテナとコンテナイメージを管理するためのPodmanの基本的な使い方を学びました。

次のステップとして、DockerイメージフォーマットまたはOCIコンテナイメージ仕様に基づいたカスタムコンテナイメージの作成に興味があるかもしれません。

関連記事: