コンテナーの構築、実行、および管理
Red Hat Enterprise Linux で Podman、Buildah、Skopeo を使用する
概要
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
Jira からのフィードバック送信 (アカウントが必要)
- Jira の Web サイトにログインします。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある Create をクリックします。
第1章 コンテナーの紹介 リンクのコピーリンクがクリップボードにコピーされました!
Linux コンテナーは、イメージベースのデプロイメント方法の柔軟性と、軽量アプリケーションの分離を組み合わせた、主要なオープンソースアプリケーションをパッケージ化して、配信するテクノロジーとして登場しました。Red Hat Enterprise Linux は、以下のようなコア技術を使用して Linux コンテナーを実装します。
- リソース管理用のコントロールグループ (cgroup)
- プロセス分離用の namespace
- SELinux (セキュリティー用)
- セキュアなマルチテナンシー
このような技術は、セキュリティーエクスプロイトの可能性を軽減し、エンタープライズ品質のコンテナーを生成および実行する環境を提供します。
Red Hat OpenShift は、強力なコマンドラインと Web UI ツールを提供し、Pod と呼ばれる単位でコンテナーを構築、管理、および実行します。Red Hat では、OpenShift 外で個々のコンテナーおよびコンテナーイメージをビルドして管理できます。このガイドでは、Red Hat Enterprise Linux システムで直接実行されるタスクを実行するためのツールを説明します。
他のコンテナーツールの実装とは異なり、ここで説明するツールはモノリシック Docker のコンテナーエンジンと、docker
コマンドを中心としたものではありません。代わりに、Red Hat はコンテナーエンジンがなくても動作できる一連のコマンドラインツールを提供します。これには、以下が含まれます。
-
Podman - Pod およびコンテナーイメージの直接管理 (
run
、stop
、start
、ps
、attach
、exec
など) - buildah - コンテナーイメージの構築、プッシュ、および署名
- skopeo - イメージのコピー、検証、削除、および署名
- runc - podman および buildah へのコンテナーの実行機能と構築機能の提供
- crun - ルートレスコンテナーの柔軟性、制御、セキュリティーを向上するために設定可能なオプションのランタイム。
これらのツールに加えて、コンテナー管理用の GUI ベースのアプリケーションである Podman Desktop も使用できます。Podman Desktop は Podman 上に構築されており、コンテナー化されたアプリケーションを視覚的に簡単に作成、管理、実行できます。
これは、このツールが、Docker が生成して管理するのと同じ Linux コンテナーや、その他の OCI 互換コンテナーエンジンの管理に使用する Open Container Initiative (OCI) と互換性があるためです。ただし、シングルノードのユースケースでは、Red Hat Enterprise Linux で直接実行することが特に適しています。
マルチノードコンテナープラットフォームの場合は、OpenShift および CRI-O Container Engine の使用 を参照してください。
1.1. Podman、Podman Desktop、Buildah、Skopeo の特徴 リンクのコピーリンクがクリップボードにコピーされました!
Podman、Podman Desktop、Skopeo、Buildah ツールは、Docker コマンド機能を置き換えるために開発されました。このシナリオの各ツールはより軽量になり、機能のサブセットに焦点を当てています。
Podman、Podman Desktop、Skopeo、Buildah ツールの主な利点は次のとおりです。
- ルートレスモードでの実行 - ルートレスコンテナーは、特権を追加しなくても実行されるため、はるかに安全です。
- デーモンの必要なし - コンテナーが実行されていない場合、Podman は実行されないので、これらのツールではアイドル時のリソース要件がはるかに少なくなります。Docker は逆に、デーモンが常に実行しています。
-
ネイティブ
systemd
統合 - Podman ではsystemd
ユニットファイルを作成し、コンテナーをシステムサービスとして実行できます。
Podman、Podman Desktop、Skopeo、Buildah の特徴は次のとおりです。
-
Podman、Buildah、および CRI-O のコンテナーエンジンはすべて、Docker の保存場所
/var/lib/docker
をデフォルトで使用する代わりに、同じバックエンドストアディレクトリー/var/lib/containers
を使用します。 - Podman、Buildah、および CRI-O は、同じストレージディレクトリーを共有しているため、互いのコンテナーと対話することはできません。このツールはイメージを共有できます。
- プログラムで Podman と対話するには、ルートおよびルートレス環境の両方で動作する Podman v2.0 RESTful API を使用してください。詳細は、コンテナーツール API の使用 の章を参照してください。
- Podman Desktop は、Podman エンジン上でアプリケーションワークロードを実行するためのシンプルで直感的なインターフェイスを提供します。
1.2. Docker を使用せずにコンテナーを実行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat では、RHEL 10 から Docker コンテナーエンジンと、docker コマンドが削除されました。
RHEL で Docker を引き続き使用する場合は、異なるアップストリームプロジェクトから Docker を取得できますが、RHEL 10 ではサポート対象外になります。
-
podman-docker
パッケージをインストールできます。docker
コマンドを実行するたびに、実際にはpodman
コマンドが実行されます。 -
Podman は Docker Socket API にも対応しているため、
podman-docker
パッケージは/var/run/docker.sock
と/var/run/podman/podman.sock
の間でリンクを設定します。そのため、Docker デーモンを必要とせずに、docker-py
とdocker-compose
ツールを使用して Docker API コマンドをそのまま実行できます。Podman はこのような要求を処理します。 -
docker
コマンドなどのpodman
コマンドは、Containerfile
またはDockerfile
からコンテナーイメージを構築できます。Containerfile
およびDockerfile
内で使用できる利用可能なコマンドは同じです。 -
podman
が対応していないdocker
コマンドのオプションには、network、node、plugin (podman
はプラグインをサポートしません)、rename (rm および create を使用してpodman
でコンテナーの名前を変更します)、secret、service、stack、swarm (podman
は Docker Swarm をサポートしません) が含まれます。container および image オプションは、podman
で直接使用されるサブコマンドを実行するのに使用します。
1.3. RHEL でのコンテナーデプロイメントでサポートされているアーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
Red Hat は、以下のコンピューターアーキテクチャーに、コンテナーイメージとコンテナー関連のソフトウェアを提供します。
- AMD64 および Intel 64 (ベースイメージおよびレイヤー構造イメージ。32 ビットアーキテクチャーはサポートされません)
- PowerPC 8 および 9 の 64 ビット (ベースイメージおよび大概のレイヤー構造イメージ)
- 64 ビット IBM Z (ベースイメージと、大概の階層構造イメージ)
- ARM 64 ビット (ベースイメージのみ)
初めは、すべてのアーキテクチャーですべての Red Hat イメージがサポートされたわけではありませんが、リストに挙げられているすべてのアーキテクチャーでほぼすべてが利用可能になりました。
1.4. コンテナーツールのインストール リンクのコピーリンクがクリップボードにコピーされました!
この手順では、Podman、Buildah、Skopeo、CRIU、Udica といった必要なライブラリーを含む container-tools
メタパッケージをインストールする方法を説明します。
安定したストリームは RHEL 9 では利用できません。Podman、Buildah、Skopeo などへの安定したアクセスを受けるには、RHEL EUS サブスクリプションを使用します。
手順
- RHEL をインストールします。
RHEL の登録: ユーザー名とパスワードを入力します。ユーザー名とパスワードは、Red Hat カスタマーポータルのログイン認証情報と同じです。
subscription-manager register
# subscription-manager register Registering to: subscription.rhsm.redhat.com:443/subscription Username: <username> Password: <password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL にサブスクライブします。
RHEL に自動的にサブスクライブするには、以下を実行します。
subscription-manager attach --auto
# subscription-manager attach --auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
container-tools
メタパッケージをインストールします。dnf install container-tools
# dnf install container-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
podman
、buildah
、skopeo
を個別にインストールすることもできます。オプション:
podman-docker
パッケージをインストールします。dnf install podman-docker
# dnf install podman-docker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman-docker
パッケージは、Docker コマンドラインインターフェイスとdocker-api
を、同等の Podman コマンドに置き換えます。
1.5. Podman Desktop のインストール リンクのコピーリンクがクリップボードにコピーされました!
Podman Desktop は、開発者が日常の開発タスクを実行し、実行中の Pod やコンテナーの数などの開発環境を視覚化するのに役立ちます。このツールは、macOS、Windows、Linux の 3 つの異なるオペレーティングシステムで実行できます。Podman Desktop は、Podman エンジン上でワークロードを実行するため、コンテナー化されたアプリケーションと対話するための Podman ネイティブ機能を提供します。開発者は、以下を実行できます。
- コンテナーまたは Pod を作成して管理する
- コンテナーイメージを管理する
- Kind、Lima、Minikube、OpenShift を使用してコンテナーまたは Pod を Kubernetes にデプロイする
- Docker の互換性を管理して、Docker ワークロードを Podman エンジンで実行する
- 拡張機能を使用してツールを統合する
インストールするには、RHEL 10 マシンでサブスクリプションマネージャーパッケージを使用します。
前提条件
- RHEL 10 マシンがある。
-
アカウントの詳細 または アクティベーションキー のいずれかを使用して、
subscription-manager
に登録している。
手順
ターミナルを開き、RHEL 拡張リポジトリーを有効にします。
subscription-manager repos --enable rhel-10-for-$(arch)-extensions-rpms
# subscription-manager repos --enable rhel-10-for-$(arch)-extensions-rpms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - プロンプトが表示されたらパスワードを入力します。
Podman Desktop をインストールします。
dnf install podman-desktop
# dnf install podman-desktop
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
インストールされたサイズを確認するには、
y
と入力します。 -
GPG キーをインポートしてインストールを完了するには、
y
と入力します。
検証
- ホーム画面の上部にある検索ボックスに Podman Desktop と入力し、Podman Desktop アプリケーションをクリックして開きます。
- 指示に従って、アプリケーションの簡単なオンボーディングプロセスを完了します。
Podman は RHEL サブスクリプションに含まれており、アプリケーションによって自動的に検出され、実行されます。
次のステップ
次のような基本的なタスクを実行します。
1.6. ルートレスコンテナーに関する特別な考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
root 以外のユーザーでコンテナーを実行する場合は、考慮事項が複数あります。
-
ホストコンテナーストレージへのパスは、root ユーザー (
/var/lib/containers/storage
) と root 以外のユーザー ($HOME/.local/share/containers/storage
) との間では異なります。 - ルートレスコンテナーを実行するユーザーには、ホストシステムでユーザー ID およびグループ ID の範囲として実行する特別な権限が付与されます。ただし、ホストのオペレーティングシステムに対する root 権限はありません。
-
etc/subuid
や/etc/subgid
を手動で変更した場合、新しい変更を適用させるためにpodman system migrate
コマンドを実行する必要があります。 -
ルートレスコンテナー環境を設定する必要がある場合は、ホームディレクトリーに設定ファイルを作成します (
$HOME/.config/containers
)。設定ファイルには、storage.conf
(ストレージ設定用) およびcontainers.conf
(さまざまなコンテナー設定用) が含まれます。また、registries.conf
ファイルを作成し、Podman を使用してイメージをプル、検索、または実行する時に利用可能なコンテナーレジストリーを識別することもできます。 root 権限なしで変更できないシステム機能もいくつかあります。たとえば、コンテナー内で
SYS_TIME
機能を設定し、ネットワークタイムサービス (ntpd
) を実行してシステムクロックを変更できません。root としてコンテナーを実行し、ルートレスコンテナー環境を省略して root ユーザーの環境を使用する必要があります。以下に例を示します。podman run -d --cap-add SYS_TIME ntpd
# podman run -d --cap-add SYS_TIME ntpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、
ntpd
がコンテナー内だけでなく、システム全体の時間を調整できることに注意してください。ルートレスコンテナーは、1024 未満のポート番号にアクセスできません。たとえば、ルートレスコンテナーの namespace 内では、コンテナーの httpd サービスからポート 80 を公開するサービスを開始しますが、この namespace の外部からはアクセスできません。
podman run -d httpd
$ podman run -d httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ただし、そのポートをホストシステムに公開するには、コンテナーには root ユーザーのコンテナー環境を使用するルート権限が必要です。
podman run -d -p 80:80 httpd
# podman run -d -p 80:80 httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ワークステーションの管理者は、ユーザーが 1024 未満のポートでサービスを公開できるようにしますが、セキュリティーへの影響を理解する必要があります。たとえば、一般ユーザーは、公式のポート 80 で Web サーバーを実行し、外部ユーザーに対して、管理者が設定したと見せかけることができます。これは、テスト用のワークステーションで問題ありませんが、ネットワークにアクセス可能な開発サーバーでは適切ではなく、実稼働サーバーでは実行しないでください。ユーザーがポート 80 にバインドできるようにするには、次のコマンドを実行します。
echo 80 > /proc/sys/net/ipv4/ip_unprivileged_port_start
# echo 80 > /proc/sys/net/ipv4/ip_unprivileged_port_start
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7. 高度な Podman 設定のためのモジュールの使用 リンクのコピーリンクがクリップボードにコピーされました!
Podman モジュールを使用して、事前に定義された設定セットをロードできます。Podman モジュールは、Tom's Obvious Minimal Language (TOML) 形式の containers.conf
ファイルです。
このモジュールは、次のディレクトリーまたはそのサブディレクトリーにあります。
-
rootless ユーザーの場合:
$HOME/.config/containers/containers.conf.modules
-
root ユーザーの場合:
/etc/containers/containers.conf.modules
、または/usr/share/containers/containers.conf.modules
podman --module <your_module_name>
コマンドを使用してオンデマンドでモジュールをロードし、システム設定ファイルおよびユーザー設定ファイルをオーバーライドできます。モジュールを操作する際には、次の点に留意してください。
-
--module
オプションを使用して、モジュールを複数回指定できます。 -
<your_module_name>
が絶対パスの場合、設定ファイルは直接ロードされます。 - 相対パスは、前述の 3 つのモジュールディレクトリーを基準にして解決されます。
-
$HOME
内のモジュールは、/etc/
および/usr/share/
ディレクトリー内のモジュールをオーバーライドします。
第2章 コンテナーイメージの種類 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーイメージは、単一コンテナー実行の全要件、およびそのニーズおよび機能を記述するメタデータを含むバイナリーです。
コンテナーイメージには、以下の 2 つのタイプがあります。
- Red Hat Enterprise Linux Base Images (RHEL ベースイメージ)
- Red Hat Universal Base Images (UBI イメージ)
どちらのタイプのコンテナーイメージも Red Hat Enterprise Linux の一部から構築されます。これらのコンテナーを使用することで、ユーザーは、信頼性、セキュリティー、パフォーマンス、ライフサイクルを最大限に活用できます。
2 種類のコンテナーイメージの主な違いは、UBI イメージではコンテナーイメージを他のタイプと共有できる点です。UBI を使用してコンテナー化アプリケーションをビルドして、任意のレジストリーサーバーにプッシュし、他のサーバーと簡単に共有し、Red Hat 以外のプラットフォームにもデプロイできます。UBI イメージは、コンテナーで開発されるクラウドネイティブおよび Web アプリケーションユースケースの基礎として設計されています。
2.1. RHEL コンテナーイメージの一般的な特徴 リンクのコピーリンクがクリップボードにコピーされました!
以下の特徴は、RHEL ベースイメージと UBI イメージの両方に当てはまります。
一般的には、RHEL コンテナーイメージの特徴は以下のとおりです。
- サポート対象 - コンテナー化されたアプリケーションでの使用は、Red Hat によりサポートされています。Red Hat Enterprise Linux で、安全で、テストされ、認定されたものと同じソフトウェアパッケージが含まれています。
- カタログ対象 - 各イメージの説明、技術的な詳細、ヘルスインデックスと共に、Red Hat Container Catalog 記載されています。
- 更新対象 - 明確に定義された更新スケジュールで提供されます。最新のソフトウェアを取得するには、Red Hat Container Image Updates を参照してください。
- 追跡対象 - Red Hat 製品エラータにより追跡され、各更新に追加された変更を理解するのに役立ちます。
- 再利用対象: コンテナーイメージは、一度実稼働環境にダウンロードしてキャッシュする必要があります。各コンテナーイメージは、基盤として含まれるすべてのコンテナーで再利用できます。
2.2. UBI イメージの特徴 リンクのコピーリンクがクリップボードにコピーされました!
UBI イメージを使用すると、コンテナーイメージを他と共有できます。4 つの UBI イメージ (Micro、Minimal、Standard、および init) が提供されます。アプリケーションのビルド用に、事前にビルドされた言語のランタイムイメージと DNF リポジトリーが提供されます。
UBI イメージの特徴は以下のとおりです。
- RHEL コンテンツのサブセットから構築 - Red Hat Universal Base イメージは、通常の Red Hat Enterprise Linux コンテンツのサブセットから構築されます。
- 再配布可能: UBI イメージは、Red Hat のお客様、パートナー、ISV など向けに標準化できます。UBI イメージを使用すると、自由に共有およびデプロイが可能な公式の Red Hat ソフトウェアにコンテナーイメージを構築できます。
- 4 つのベースイメージをセットで提供する: micro、minimal、standard、init
- 事前にビルドされた言語ランタイムコンテナーイメージのセットを提供する: Application Streams をベースとするランタイムイメージは、python、perl、php、dotnet、nodejs、ruby など、標準でサポートされているランタイムの恩恵を受けることができるアプリケーションのための基盤を提供します。
関連のある DNF リポジトリーセットを提供する: DNF リポジトリーには、RPM パッケージと更新が含まれており、アプリケーションの依存関係を追加して、UBI コンテナーイメージを再ビルドできます。
-
ubi-10-baseos
リポジトリーは、コンテナーに追加できる RHEL パッケージの再配布可能なサブセットを保持します。 -
ubi-10-appstream
リポジトリーは、特定のランタイムを必要とするアプリケーションで使用する環境を標準化するために、UBI イメージに追加できるアプリケーションストリームパッケージを保持しています。 -
UBI RPM の追加 - 事前設定された UBI リポジトリーから UBI イメージに RPM パッケージを追加できます。切断した環境でこのような機能を使用するには、その機能を使用する UBI コンテンツ配信ネットワーク (
https://cdn-ubi.redhat.com
) を許可リストに追加する必要があります。詳細は、Connect to https://cdn-ubi.redhat.com を参照してください。
-
- ライセンス - Red Hat Universal Base Image End User License Agreement に従い、UBI イメージを自由に使用および再配布できます。
レイヤー化されたイメージはすべて UBI イメージに基づいています。どの UBI イメージがイメージベースであるかを確認するには、Red Hat Container Catalog で Containerfile を表示し、UBI イメージに必要なすべてのコンテンツが含まれていることを確認します。
2.3. UBI 標準イメージの概要 リンクのコピーリンクがクリップボードにコピーされました!
標準イメージ (名称 ubi
) は、RHEL で実行されるアプリケーション用に設計されています。UBI 標準イメージの主な機能には、以下が含まれます。
-
init system -
systemd
サービスの管理に必要なsystemd
初期化システムのすべての機能は、標準のベースイメージで利用できます。この init システムを使用すると、Web サーバー (httpd
) や FTP サーバー (vsftpd
) などのサービスを自動的に起動するように事前設定された RPM パッケージをインストールできます。 -
dnf: ソフトウェアの追加や更新が可能な、無料の dnf リポジトリーにアクセスできます。
dnf
コマンドの標準セット (dnf
、dnf-config-manager
、dnfdownloader
など) を使用できます。 -
utilities: ユーティリティーには
tar
、dmidecode
、gzip
、getfacl
や他の ACL コマンド、dmsetup
、ここに記載されていない他のユーティリティーとのデバイスマッパーコマンドが含まれます。
2.4. UBI init イメージの概要 リンクのコピーリンクがクリップボードにコピーされました!
UBI init イメージ (名称 ubi8-init
) には、systemd
初期化システムが含まれているため、Web サーバーやファイルサーバーなどの systemd
サービスを実行するイメージを構築するのに役立ちます。init イメージには、最小イメージよりも多く、標準イメージよりも少ないコンテンツが含まれます。
ubi10-init
イメージは ubi10
イメージの上にビルドされるため、その内容はほぼ同じです。ただし、重要な相違点がいくつかあります。
ubi10-init
:-
CMD は
/sbin/init
に設定され、デフォルトでsystemd
Init サービスを開始します。 -
ps
およびプロセス関連のコマンド (procps-ng
パッケージ) が含まれます。 -
また、
SIGRTMIN+3
をStopSignal
として設定しています。これは、ubi10-init
のsystemd
が通常の終了信号 (SIGTERM
およびSIGKILL
) を無視しているためですが、SIGRTMIN+3
を受け取った場合は終了します。
-
CMD は
ubi10
:-
CMD は
/bin/bash
に設定されます。 -
ps
およびプロセス関連のコマンド (procps-ng
パッケージ) は含まれません。 -
通常の終了シグナルを無視しません (
SIGTERM
およびSIGKILL
)。
-
CMD は
2.5. UBI minimal イメージの概要 リンクのコピーリンクがクリップボードにコピーされました!
ubi-minimal
という名前の UBI minimal イメージは、縮小された事前にインストールされたコンテンツセットおよびパッケージマネージャー (microdnf
) を提供します。これにより、イメージに含まれる依存関係を縮小しながら、Containerfile
を使用できます。
UBI minimal イメージの主な機能には、以下が含まれます。
- サイズが小さい - 最小イメージは、ディスク上では約 92M、圧縮時は 32M です。これにより、サイズが、標準イメージの半分に満たなくなります。
-
ソフトウェアインストール (
microdnf
) - ソフトウェアリポジトリーおよび RPM ソフトウェアパッケージを使用する完全に開発されたdnf
機能を追加する代わりに、最小イメージにはmicrodnf
ユーティリティーが含まれます。microdnf
はdnf
の縮小バージョンであるため、リポジトリーの有効化/無効化、パッケージの削除と更新、パッケージのインストール後にキャッシュを削除できます。 -
RHEL パッケージをベースとする - 最小イメージには、通常の RHEL ソフトウェアの RPM パッケージから機能がいくつか削除されたものです。minimal イメージには、
systemd
や System V init、Python ランタイム環境、および一部のシェルユーティリティーなど、初期化およびサービス管理システムが含まれません。オーバーヘッドの量を可能な限り最小限に抑えながら、RHEL リポジトリーを使用してイメージを構築できます。 microdnf
のモジュールはサポート対象 -microdnf
コマンドで使用されるモジュールにより、利用可能な場合は、同じソフトウェアの複数のバージョンをインストールできます。microdnf module enable
、microdnf module disable
、およびmicrodnf module reset
を使用して、モジュールストリームをそれぞれ有効化、無効化、およびリセットできます。たとえば、UBI 最小コンテナー内で
nodejs:14
モジュールストリームを有効にするには、次のコマンドを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Red Hat は UBI の最新バージョンのみをサポートし、ドットリリースの過去バージョンはサポートしません。特定のドットリリースを使用し続ける必要がある場合は、延長更新サポート を参照してください。
2.6. UBI マイクロイメージの概要 リンクのコピーリンクがクリップボードにコピーされました!
ubi-micro
は、取得可能な最小の UBI イメージで、パッケージマネージャーと、通常はコンテナーイメージに含まれるすべての依存関係を除外することで得られます。これにより、他のアプリケーションに UBI Standard、Minimal、または Init を使用する場合でも、ubi-micro
イメージをベースとするコンテナーイメージに対する攻撃対象領域を最小限に抑えられるので、minimal アプリケーションに適しています。Linux ディストリビューションパッケージのないコンテナーイメージは Distroless コンテナーイメージと呼ばれます。
第3章 コンテナーレジストリーの使用 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーイメージレジストリーは、コンテナーイメージとコンテナーベースのアプリケーションアーティファクトを保存するためのリポジトリーまたはリポジトリーのコレクションです。/etc/containers/registries.conf
ファイルは、Podman、Buildah、Skopeo などのさまざまなコンテナーツールで使用できるコンテナーイメージレジストリーを含むシステム全体の設定ファイルです。
コンテナーツールに指定されたコンテナーイメージが完全修飾されていない場合に、コンテナーツールは registries.conf
ファイルを参照します。registries.conf
ファイル内で短縮名のエイリアスを指定すると、完全修飾されていないイメージの取得元を管理者が完全に制御できるようになります。たとえば、podman pull example.com/example_image
コマンドは、registries.conf ファイル
で指定されているように、example.com
レジストリーからローカルシステムにコンテナーイメージをプルします。
3.1. コンテナーレジストリー リンクのコピーリンクがクリップボードにコピーされました!
コンテナーレジストリーは、コンテナーイメージとコンテナーベースのアプリケーションアーティファクトを保存するためのリポジトリーまたはリポジトリーのコレクションです。Red Hat が提供するレジストリーは以下のとおりです。
- registry.redhat.io (認証が必要)
- registry.access.redhat.com (認証なし)
- registry.connect.redhat.com (Red Hat Partner Connect プログラムイメージ)
リモートレジストリー (Red Hat の独自のコンテナーレジストリーなど) からコンテナーイメージを取得して、ローカルシステムに追加するには、podman pull
コマンドを使用します。
podman pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
# podman pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
ここで、<registry>[:<port>]/[<namespace>/]<name>:<tag>
はコンテナーイメージの名前です。
たとえば、registry.redhat.io/ubi10/ubi
コンテナーイメージは以下によって識別されます。
-
レジストリーサーバー (
registry.redhat.io
) -
namespace (
ubi10
) -
イメージ名 (
ubi
)
同じイメージにバージョンが複数ある場合は、イメージ名を明示的に指定するタグを追加します。デフォルトでは、Podman は :latest
タグを使用します (例: ubi10/ubi:latest
)。
一部のレジストリーでは、<namespace> も使用して、異なるユーザーまたは組織によって所有される同じ <name> のイメージを区別します。以下に例を示します。
namespace | (<namespace>/<name>) の例 |
---|---|
organization |
|
login (ユーザー名) |
|
role |
|
レジストリー、namespace、イメージ名、タグを含む完全修飾イメージ名を使用します。短縮名を使用する場合は、なりすましの固有リスクが常にあります。不明なユーザーや匿名ユーザーが任意の名前でアカウントを作成できないように、信頼できるレジストリー (つまりレジストリー) を追加します。たとえば、ユーザーは example.registry.com registry
レジストリーから example コンテナーイメージをプルします。example.registry.com
が検索リストの最初にない場合には、攻撃者は検索リストの前のほうに別の example イメージを配置することができてしまいます。目的のコンテンツではなく、攻撃者が配置したイメージを間違ってプルして実行する可能性があります。
registry.redhat.io への移行の詳細は、Red Hat Container Registry Authentication を参照してください。registry.redhat.io からコンテナーを取得する前に、RHEL サブスクリプション認証情報を使用して認証する必要があります。
3.2. コンテナーレジストリーの設定 リンクのコピーリンクがクリップボードにコピーされました!
podman info --format
コマンドを使用して、コンテナーレジストリーを表示できます。
podman info
コマンドは、Podman 4.0.0 以降で使用できます。
registries.conf
設定ファイルでコンテナーレジストリーのリストを編集できます。root ユーザーとして、/etc/containers/registries.conf
ファイルを編集し、デフォルトのシステム全体の検索設定を変更します。
ユーザーとして、$HOME/.config/containers/registries.conf
ファイルを作成し、システム全体の設定を上書きします。
unqualified-search-registries = ["registry.access.redhat.com", "registry.redhat.io", "docker.io"] short-name-mode = "enforcing"
unqualified-search-registries = ["registry.access.redhat.com", "registry.redhat.io", "docker.io"]
short-name-mode = "enforcing"
デフォルトでは、podman pull
および podman search
コマンドは、unqualified-search-registries
のリストに記載のレジストリーから、その順序でコンテナーイメージを検索します。
- ローカルコンテナーレジストリーの設定
TLS 検証なしでローカルコンテナーレジストリーを設定できます。TLS 検証を無効にする方法は 2 つあります。まず、Podman で
--tls-verify=false
オプションを使用できます。次に、registries.conf
ファイルにinsecure=true
を設定できます。[[registry]] location="localhost:5000" insecure=true
[[registry]] location="localhost:5000" insecure=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - レジストリー、namespace、またはイメージのブロック
ローカルシステムがアクセスできないレジストリーを定義できます。
blocked=true
を設定して、特定のレジストリーをブロックできます。[[registry]] location = "registry.example.org" blocked = true
[[registry]] location = "registry.example.org" blocked = true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接頭辞を
prefix="registry.example.org/namespace"
に設定して、namespace をブロックすることもできます。たとえば、podman pull registry. example.org/example/image:latest
コマンドを使用するイメージのプルは、指定した接頭辞が一致するためブロックされます。[[registry]] location = "registry.example.org" prefix="registry.example.org/namespace" blocked = true
[[registry]] location = "registry.example.org" prefix="registry.example.org/namespace" blocked = true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記prefix
はオプションで、デフォルト値はlocation
の値と同じです。prefix="registry.example.org/namespace/image"
を設定して、特定のイメージをブロックできます。[[registry]] location = "registry.example.org" prefix="registry.example.org/namespace/image" blocked = true
[[registry]] location = "registry.example.org" prefix="registry.example.org/namespace/image" blocked = true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - レジストリーのミラーリング
元のレジストリーにアクセスできない場合は、レジストリーミラーを設定できます。たとえば、機密レベルの高い環境で作業するため、インターネットに接続することはできません。指定された順序でアクセスされる複数のミラーを指定できます。たとえば、
podman pull registry.example.com/myimage:latest
コマンドを実行すると、まずmirror-1.com
が試行され、次にmirror-2.com
が試行されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. コンテナーイメージの検索 リンクのコピーリンクがクリップボードにコピーされました!
podman search
コマンドを使用すると、イメージ用に選択したコンテナーレジストリーを検索できます。また、Red Hat コンテナーカタログ でイメージを検索することもできます。Red Hat コンテナーレジストリーには、イメージの説明、コンテンツ、ヘルスインデックスなど情報が含まれます。
podman search
コマンドは、イメージの存在を判断する信頼できる方法ではありません。v1 および v2 Docker ディストリビューション API の podman search
動作は、各レジストリーの実装に固有のものです。一部のレジストリーは、検索をまったくサポートしない場合があります。検索用語を使用しない検索は、v2 API を実装するレジストリーでのみ機能します。docker search
コマンドにも、同じことが言えます。
quay.io レジストリーで postgresql-10
イメージを検索するには、手順に従います。
前提条件
-
container-tools
メタパッケージがインストールされている。 - レジストリーが設定されている。
手順
レジストリーに対して認証します。
podman login quay.io
# podman login quay.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow イメージを検索します。
特定のレジストリーで特定のイメージを検索するには、以下を入力します。
podman search quay.io/postgresql-10
# podman search quay.io/postgresql-10 INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED redhat.io registry.redhat.io/rhel10/postgresql-10 This container image ... 0 redhat.io registry.redhat.io/rhscl/postgresql-10-rhel7 PostgreSQL is an ... 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、特定のレジストリーで提供されるすべてのイメージを表示するには、以下を入力します。
podman search quay.io/
# podman search quay.io/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのレジストリー全体でイメージ名を検索するには、以下を入力します。
podman search postgresql-10
# podman search postgresql-10
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 完全な説明を表示するには、
--no-trunc
オプションをコマンドに渡します。
3.4. 短縮名のエイリアスの設定 リンクのコピーリンクがクリップボードにコピーされました!
常に完全修飾名でイメージをプルします。ただし、短縮名でイメージをプルすることが一般的です。たとえば、registry.access.redhat.com/ubi10:latest
の代わりに ubi10
を使用できます。
registries.conf
ファイルにより、短縮名のエイリアスを指定でき、管理者はイメージをプルする場所を完全に制御できます。エイリアスは、テーブル内で "name" = "value"
の形式で指定されます。エイリアスのリストは、/etc/containers/registries.conf.d
ディレクトリーで確認できます。Red Hat は、このディレクトリーにエイリアスのセットを同梱しています。たとえば、podman pull ubi10
は、適切なイメージ、つまり registry.access.redhat.com/ubi10:latest
に対して、直接解決されます。
以下に例を示します。
unqualified-search-registries=["registry.fedoraproject.org", "quay.io"] [aliases] "fedora"="registry.fedoraproject.org/fedora"
unqualified-search-registries=["registry.fedoraproject.org", "quay.io"]
[aliases]
"fedora"="registry.fedoraproject.org/fedora"
short-names モードは以下のようになります。
-
enforcing: イメージのプル中に一致するエイリアスが見つからない場合、Podman はユーザーが非修飾レジストリーのいずれかを選択するよう求めます。選択したイメージを正常に取得すると、Podman は、
$HOME/.cache/containers/short-name-aliases.conf
ファイル (ルートレスユーザー) または/var/cache/containers/short-name-aliases.conf
(root ユーザー) に新しい短縮名のエイリアスを自動的に記録します。ユーザーを要求できない場合 (stdin や stdout など) が TTY ではない場合は、Podman は失敗します。short-name-aliases.conf
ファイルは、両方が同じエイリアスを指定する場合、registries.conf
ファイルよりも優先されることに注意してください。 - permissive: enforcing モードと似ていますが、ユーザーにプロンプトが表示されないと Podman は失敗しません。代わりに、Podman は指定された順序で修飾されていないすべてのレジストリーを検索します。エイリアスは記録されないことに注意してください。
- disabled: すべての非修飾検索レジストリーが指定の順序で試行され、エイリアスは記録されません。
第4章 コンテナーイメージを使用する リンクのコピーリンクがクリップボードにコピーされました!
Podman ツールは、コンテナーイメージと連携するように設計されています。このツールを使用して、イメージのプル、イメージ署名の検査、タグ付け、保存、読み込み、再配布、および定義を行うことができます。
4.1. レジストリーからのイメージの取得 (プル) リンクのコピーリンクがクリップボードにコピーされました!
podman pull
コマンドを使用して、ローカルシステムにイメージを取得します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
registry.redhat.io レジストリーにログインします。
podman login registry.redhat.io
$ podman login registry.redhat.io Username: <username> Password: <password> Login Succeeded!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow registry.redhat.io/ubi10/ubi コンテナーイメージをプルします。
podman pull registry.redhat.io/ubi10/ubi
$ podman pull registry.redhat.io/ubi10/ubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ローカルシステムにプルしたすべてのイメージをリスト表示します。
podman images
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.redhat.io/ubi10/ubi latest 3269c37eae33 7 weeks ago 208 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2. 短縮名のエイリアスを使用したコンテナーイメージのプル リンクのコピーリンクがクリップボードにコピーされました!
セキュアな短縮名を使用して、ローカルシステムにイメージを取得できます。以下の手順では、fedora
または nginx
のコンテナーイメージをプルする方法を説明します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
コンテナーイメージをプルします。
fedora
イメージをプルします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow エイリアスが検出され、
registry.fedoraproject.org/fedora
イメージが安全にプルされます。unqualified-search-registries
のリストは、fedora
イメージ名を解決するためには使用されません。nginx
イメージをプルします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一致するエイリアスが見つからない場合は、
unqualified-search-registries
リストのいずれかを選択するように求められます。選択したイメージが正常にプルされると、新しい短縮名のエイリアスがローカルに記録されます。そうでない場合はエラーが生じます。
検証
ローカルシステムにプルしたすべてのイメージをリスト表示します。
podman images
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.fedoraproject.org/fedora latest 28317703decd 12 days ago 184 MB docker.io/library/nginx latest 08b152afcfae 13 days ago 137 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3. イメージのリスト表示 リンクのコピーリンクがクリップボードにコピーされました!
podman images
コマンドを使用して、ローカルストレージのイメージをリスト表示します。
前提条件
-
container-tools
メタパッケージがインストールされている。 - プルしたイメージがローカルシステムで利用できる。
手順
ローカルストレージ内のイメージをすべてリスト表示します。
podman images
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi10/ubi latest 3269c37eae33 6 weeks ago 208 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4. ローカルイメージの検証 リンクのコピーリンクがクリップボードにコピーされました!
ローカルシステムにイメージをプルして実行したら、podman inspect
コマンドを使用してイメージを調査できます。たとえば、イメージの内容を理解して、イメージ内のソフトウェアを確認します。podman inspect
コマンドは、名前または ID で識別されるコンテナーおよびイメージに関する情報を表示します。
前提条件
-
container-tools
メタパッケージがインストールされている。 - プルしたイメージがローカルシステムで利用できる。
手順
registry.redhat.io/ubi10/ubi
イメージを検査します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow "Cmd"
キーは、コンテナー内で実行するデフォルトのコマンドを指定します。このコマンドは、podman run
コマンドに引数として指定すると、上書きできます。この ubi10/ubi コンテナーは、podman run
で起動時に他の引数を指定していない場合には、bash シェルを実行します。"Entrypoint"
キーが設定された場合は、"Cmd"
値の代わりにその値が使用されます (また、Entrypoint コマンドの引数として"Cmd"
の値が使用されます)。
4.5. リモートイメージの検証 リンクのコピーリンクがクリップボードにコピーされました!
skopeo inspect
コマンドを使用して、システムにイメージをプルする前に、リモートコンテナーレジストリーからイメージに関する情報を表示します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
registry.redhat.io/ubi10/ubi-init
イメージを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6. コンテナーイメージのコピー リンクのコピーリンクがクリップボードにコピーされました!
skopeo copy
コマンドを使用して、コンテナーイメージをあるレジストリーから別のレジストリーにコピーできます。たとえば、外部レジストリーのイメージを使用して内部リポジトリーに反映させたり、2 つの異なる場所のイメージレジストリーを同期したりできます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
skopeo
コンテナーイメージをdocker://quay.io
からdocker://registry.example.com
にコピーします。skopeo copy docker://quay.io/skopeo/stable:latest docker://registry.example.com/skopeo:latest
$ skopeo copy docker://quay.io/skopeo/stable:latest docker://registry.example.com/skopeo:latest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7. ローカルディレクトリーへのイメージレイヤーのコピー リンクのコピーリンクがクリップボードにコピーされました!
skopeo copy
コマンドを使用して、コンテナーイメージのレイヤーをローカルディレクトリーにコピーできます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
/var/lib/images/nginx
ディレクトリーを作成します。mkdir -p /var/lib/images/nginx
$ mkdir -p /var/lib/images/nginx
Copy to Clipboard Copied! Toggle word wrap Toggle overflow docker://docker.io/nginx:latest
イメージのレイヤーを、新たに作成したディレクトリーにコピーします。skopeo copy docker://docker.io/nginx:latest dir:/var/lib/images/nginx
$ skopeo copy docker://docker.io/nginx:latest dir:/var/lib/images/nginx
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
/var/lib/images/nginx
ディレクトリーの内容を表示します。ls /var/lib/images/nginx
$ ls /var/lib/images/nginx 08b11a3d692c1a2e15ae840f2c15c18308dcb079aa5320e15d46b62015c0f6f3 ... 4fcb23e29ba19bf305d0d4b35412625fea51e82292ec7312f9be724cb6e31ffd manifest.json version
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.8. イメージのタグ付け リンクのコピーリンクがクリップボードにコピーされました!
podman tag
コマンドを使用して、ローカルイメージに別の名前を追加します。この名前は、<registryhost>/<username>/<name>:<tag> のように複数の部分で構成されます。
前提条件
-
container-tools
メタパッケージがインストールされている。 - プルしたイメージがローカルシステムで利用できる。
手順
すべてのイメージをリスト表示します。
podman images
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.redhat.io/ubi10/ubi latest 3269c37eae33 7 weeks ago 208 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のいずれかのオプションを使用して、
myubi
名をregistry.redhat.io/ubi10/ubi
イメージに割り当てます。イメージ名:
podman tag registry.redhat.io/ubi10/ubi myubi
$ podman tag registry.redhat.io/ubi10/ubi myubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow イメージ ID:
podman tag 3269c37eae33 myubi
$ podman tag 3269c37eae33 myubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow どちらのコマンドも、同じ結果になります。
すべてのイメージをリスト表示します。
podman images
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.redhat.io/ubi10/ubi latest 3269c37eae33 2 months ago 208 MB localhost/myubi latest 3269c37eae33 2 months ago 208 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトのタグがいずれのイメージでも
latest
であることに注意してください。すべてのイメージ名が単一のイメージ ID 3269c37eae33 に割り当てられていることを確認できます。以下のいずれかを使用して、
10
タグをregistry.redhat.io/ubi10/ubi
イメージに追加します。イメージ名:
podman tag registry.redhat.io/ubi10/ubi myubi:10
$ podman tag registry.redhat.io/ubi10/ubi myubi:10
Copy to Clipboard Copied! Toggle word wrap Toggle overflow イメージ ID:
podman tag 3269c37eae33 myubi:10
$ podman tag 3269c37eae33 myubi:10
Copy to Clipboard Copied! Toggle word wrap Toggle overflow どちらのコマンドも、同じ結果になります。
検証
すべてのイメージをリスト表示します。
podman images
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.redhat.io/ubi10/ubi latest 3269c37eae33 2 months ago 208 MB localhost/myubi latest 3269c37eae33 2 months ago 208 MB localhost/myubi 10 3269c37eae33 2 months ago 208 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトのタグがいずれのイメージでも
latest
であることに注意してください。すべてのイメージ名が単一のイメージ ID 3269c37eae33 に割り当てられていることを確認できます。
registry.redhat.io/ubi10/ubi
イメージにタグ付けした後に、コンテナーを実行するオプションが 3 つあります。
-
ID (
3269c37eae33
) -
名前 (
localhost/myubi:latest
) -
名前 (
localhost/myubi:10
)
4.9. マルチアーキテクチャーイメージのビルド リンクのコピーリンクがクリップボードにコピーされました!
前提条件
container-tools
メタパッケージがインストールされている。-
サポートする必要がある各アーキテクチャーの
Containerfiles
を作成します。 各アーキテクチャー用のイメージをビルドします。以下に例を示します。
podman build --platform linux/arm64,linux/amd64 --manifest <registry>/<image> .
$ podman build --platform linux/arm64,linux/amd64 --manifest <registry>/<image> .
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
--platform linux/arm64,linux/amd64
オプションは、コンテナーイメージのビルド対象のターゲットプラットフォームを指定します。 -
--manifest <registry>/<image>
オプションは、指定の名前 (<registry>/<image>
) を含むマニフェストリストを作成し、新しくビルドされたイメージをそのリストに追加します。マニフェストリストは、それぞれ異なるアーキテクチャーをターゲットとするイメージマニフェストのコレクションです。
-
マニフェストリストをレジストリーにプッシュします。
podman manifest push <registry>/<image>
$ podman manifest push <registry>/<image>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このマニフェストリストは、マルチアーキテクチャーコンテナーをプルする際の唯一のエントリーポイントとして機能します。
-
サポートする必要がある各アーキテクチャーの
これにより、単一のマニフェストリストに基づいて、プラットフォームに適したコンテナーイメージをプルできるようになります。
また、podman manifest remove <manifest_list> <digest_ID>
コマンドを使用すると、マニフェストリストから項目を削除できます。<digest_ID>
は、コンテナーイメージの SHA-256 チェックサムです。例: podman manifest remove <registry>/<image> sha256:cb8a924afdf…
検証
マニフェストリストを表示します。
podman manifest inspect <registry>/<image>
$ podman manifest inspect <registry>/<image>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.10. イメージの保存および読み込み リンクのコピーリンクがクリップボードにコピーされました!
podman save
コマンドを使用して、イメージをコンテナーアーカイブに保存します。別のコンテナー環境に後で復元したり、別のユーザーに送信することもできます。--format
オプションを使用して、アーカイブ形式を指定できます。サポート対象の形式は以下のとおりです。
-
docker-archive
-
oci-archive
-
oci-dir
(oci マニフェストタイプのあるディレクトリー) -
docker-archive
(v2s2 マニフェストタイプのディレクトリー)
デフォルトの形式は、docker-archive
形式です。
podman load
コマンドを使用して、コンテナーイメージアーカイブからコンテナーストレージにイメージを読み込みます。
前提条件
-
container-tools
メタパッケージがインストールされている。 - プルしたイメージがローカルシステムで利用できる。
手順
registry.redhat.io/rhel10/support-tools
イメージを tarball として保存します。デフォルトの
docker-archive
形式の場合:podman save -o mysupport-tools.tar registry.redhat.io/rhel10/support-tools:latest
$ podman save -o mysupport-tools.tar registry.redhat.io/rhel10/support-tools:latest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oci-archive
形式で、--format
オプションを使用します。podman save -o mysupport-tools-oci.tar --format=oci-archive registry.redhat.io/rhel10/support-tools
$ podman save -o mysupport-tools-oci.tar --format=oci-archive registry.redhat.io/rhel10/support-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mysupport-tools.tar
およびmysupport-tools-oci.tar
アーカイブはカレントディレクトリーに保存されます。次の手順は、mysupport-tools.tar
tarball を使用して実行されます。
mysupport-tools.tar
のファイルタイプを確認します。file mysupport-tools.tar
$ file mysupport-tools.tar mysupport-tools.tar: POSIX tar archive
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mysupport-tools.tar
からregistry.redhat.io/rhel10/support-tools:latest
イメージをロードするには、以下を実行します。podman load -i mysupport-tools.tar
$ podman load -i mysupport-tools.tar ... Loaded image(s): registry.redhat.io/rhel10/support-tools:latest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.11. UBI イメージの再配布 リンクのコピーリンクがクリップボードにコピーされました!
podman push
コマンドを使用して、UBI イメージを独自のレジストリーやサードパーティーのレジストリーにプッシュするか、他のと共有します。UBI dnf リポジトリーから、必要に応じてイメージをアップグレードまたは追加できます。
前提条件
-
container-tools
メタパッケージがインストールされている。 - プルしたイメージがローカルシステムで利用できる。
手順
必要に応じて、
ubi
イメージに別の名前を追加します。podman tag registry.redhat.io/ubi10/ubi registry.example.com:5000/ubi10/ubi
# podman tag registry.redhat.io/ubi10/ubi registry.example.com:5000/ubi10/ubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow registry.example.com:5000/ubi10/ubi
イメージをローカルストレージからレジストリーにプッシュします。podman push registry.example.com:5000/ubi10/ubi
# podman push registry.example.com:5000/ubi10/ubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
このイメージを使用する方法には制限がいくつかありますが、その方法を参照する方法にもいくつかの制限があります。たとえば、Red Hat Container Certification または Red Hat OpenShift Operator Certification の Red Hat Partner Connect Program で認定されていなければ、Red Hat の認定イメージまたは Red Hat のサポートイメージとはみなされません。
4.12. イメージの削除 リンクのコピーリンクがクリップボードにコピーされました!
podman rmi
コマンドを使用して、ローカルに保存されたコンテナーイメージを削除します。ID または名前を使用して、イメージを削除できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
ローカルシステムにある全イメージのリストを表示します。
podman images
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.redhat.io/rhel10/support-tools latest 4b32d14201de 7 weeks ago 228 MB registry.redhat.io/ubi10/ubi latest 3269c37eae33 7 weeks ago 208 MB localhost/myubi X.Y 3269c37eae33 7 weeks ago 208 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのコンテナーをリスト表示します。
podman ps -a
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7ccd6001166e registry.redhat.io/rhel10/support-tools:latest usr/bin/bash 6 seconds ago Up 5 seconds ago my-support-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow registry.redhat.io/rhel10/support-tools
イメージを削除するには、podman stop
コマンドを使用して、このイメージから実行されているすべてのコンテナーを停止する必要があります。コンテナーを ID または名前を使用して停止できます。my-support-tools
コンテナーを停止します。podman stop my-support-tools
$ podman stop my-support-tools 7ccd6001166e9720c47fbeb077e0afd0bb635e74a1b0ede3fd34d09eaf5a52e9
Copy to Clipboard Copied! Toggle word wrap Toggle overflow registry.redhat.io/rhel10/support-tools
イメージを削除します。podman rmi registry.redhat.io/rhel10/support-tools
$ podman rmi registry.redhat.io/rhel10/support-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 複数のイメージを削除するには、以下のコマンドを実行します。
podman rmi registry.redhat.io/rhel10/support-tools registry.redhat.io/ubi10/ubi
$ podman rmi registry.redhat.io/rhel10/support-tools registry.redhat.io/ubi10/ubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムからすべてのイメージを削除するには、以下のコマンドを実行します。
podman rmi -a
$ podman rmi -a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 複数の名前 (タグ) が関連付けられているイメージを削除するには、
-f
オプションを追加して削除します。podman rmi -f 1de7d7b3f531
$ podman rmi -f 1de7d7b3f531 1de7d7b3f531...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-
podman images
コマンドを使用してすべてのイメージをリスト表示し、コンテナーイメージが削除されたことを確認します。
第5章 コンテナーの使用 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーは、デプロイメントされたコンテナーイメージにあるファイルから作成された、実行中プロセスまたは停止プロセスを表します。Podman ツールを使用してコンテナーと連携できます。
5.1. podman run コマンド リンクのコピーリンクがクリップボードにコピーされました!
podman run
コマンドは、コンテナーイメージをもとに新しいコンテナーでプロセスを実行します。コンテナーイメージがすでにロードされていない場合は、podman run
は、そのイメージからコンテナーを起動する前に、podman pull image
を実行するのと同じ方法で、リポジトリーからイメージおよびイメージの全依存関係を取得します。コンテナープロセスには、独自のファイルシステム、独自のネットワーク、独自のプロセスツリーがあります。
podman run
コマンドの形式は次のとおりです。
podman run [options] image [command [arg ...]]
podman run [options] image [command [arg ...]]
基本オプションは次のとおりです。
-
--detach(-d)
: コンテナーをバックグラウンドで実行し、新しいコンテナー ID を出力します。 -
--attach(-a)
: フォアグラウンドモードでコンテナーを実行します。 -
--name(-n)
: 名前をコンテナーに割り当てます。--name
で名前がコンテナーに割り当てられていない場合には、ランダムな文字列で名前が生成されます。これはバックグラウンドコンテナーとフォアグラウンドコンテナーの両方で機能します。 -
--rm
: 終了時にコンテナーを自動的に削除します。コンテナーが正常に作成または起動できない場合には、削除されない点に注意してください。 -
--tty(-t)
: コンテナーの標準入力に、疑似端末を割り当て、接続します。 -
--interactive(-i)
: 対話式プロセスの場合には、-i
と-t
を佩用してコンテナープロセスに端末を割り当てます。-i -t
は頻繁に-it
と記述されます。
5.2. ホストからのコンテナーでのコマンド実行 リンクのコピーリンクがクリップボードにコピーされました!
podman run
コマンドを使用して、コンテナーのオペレーティングシステムの種類を表示します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
cat /etc/os-release
コマンドを使用して、registry.access.redhat.com/ubi10/ubi
コンテナーイメージをベースとするコンテナーのオペレーティングシステムの種類を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: すべてのコンテナーをリスト表示します。
podman ps
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --rm
オプションがあるのでコンテナーは表示されません。コンテナーが削除されました。
5.3. コンテナー内でのコマンドの実行 リンクのコピーリンクがクリップボードにコピーされました!
podman run
コマンドを使用して、コンテナーを対話的に実行します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
registry.redhat.io/ubi10/ubi
イメージに基づいて、myubi
という名前のコンテナーを実行します。podman run --name=myubi -it registry.access.redhat.com/ubi10/ubi /bin/bash
$ podman run --name=myubi -it registry.access.redhat.com/ubi10/ubi /bin/bash [root@6ccffd0f6421 /]#
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
-i
オプションは対話式のセッションを作成します。-t
オプションを指定しないと、シェルは開いたままにも拘らず、シェルには何も入力できません。 -
-t
オプションは、端末セッションを開きます。-i
オプションを指定しないと、シェルが開き、終了します。
-
システムユーティリティーのセットが含まれる
procps-ng
パッケージをインストールします (例:ps
、top
、uptime
など)。dnf install procps-ng
[root@6ccffd0f6421 /]# dnf install procps-ng
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ps -ef
コマンドを使用して、現在のプロセスをリスト表示します。ps -ef
# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 12:55 pts/0 00:00:00 /bin/bash root 31 1 0 13:07 pts/0 00:00:00 ps -ef
Copy to Clipboard Copied! Toggle word wrap Toggle overflow exit
を実行してコンテナーを終了し、ホストに戻ります。exit
# exit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、すべてのコンテナーをリスト表示します。
podman ps
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1984555a2c27 registry.redhat.io/ubi10/ubi:latest /bin/bash 21 minutes ago Exited (0) 21 minutes ago myubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーが終了ステータスであることを確認できます。
5.4. コンテナーのリスト表示 リンクのコピーリンクがクリップボードにコピーされました!
podman ps
コマンドを使用して、システムで実行中のコンテナーのリストを表示します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
registry.redhat.io/rhel10/support-tools
イメージに基づいてコンテナーを実行します。podman run -d registry.redhat.io/rhel8/support-tools
$ podman run -d registry.redhat.io/rhel8/support-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのコンテナーをリスト表示します。
実行中のコンテナーのリストを表示するには、以下のコマンドを実行します。
podman ps
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 74b1da000a11 rhel10/support-tools /usr/bin/bash 2 minutes ago Up About a minute musing_brown
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (実行中または停止中の) すべてのコンテナーを一覧表示するには、以下を実行します。
podman ps -a
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES IS INFRA d65aecc325a4 ubi10/ubi /bin/bash 3 secs ago Exited (0) 5 secs ago peaceful_hopper false 74b1da000a11 rhel10/support-tools /usr/bin/bash 2 mins ago Up About a minute musing_brown false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
実行されていないものの削除されていない (--rm
オプション) コンテナーが存在する場合には、コンテナーがあるので、再起動できます。
5.5. コンテナーの起動 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーを実行してから停止し、削除しない場合には、ローカルシステムに保存されて再び実行する準備ができます。podman start
コマンドを使用して、コンテナーを再実行できます。コンテナー ID または名前を使用して、コンテナーを指定できます。
前提条件
-
container-tools
メタパッケージがインストールされている。 - 1 つ以上のコンテナーが停止されている。
手順
myubi
コンテナーを起動します。非対話モードで以下を行います。
podman start myubi
$ podman start myubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、
podman start 1984555a2c27
を使用することもできます。インタラクティブモードで
-a
(--attach
) および-i
(--interactive
) オプションを使用して、コンテナーの bash シェルと連携します。podman start -a -i myubi
$ podman start -a -i myubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、
podman start -a -i 1984555a2c27
を使用することができます。
exit
を実行してコンテナーを終了し、ホストに戻ります。exit
[root@6ccffd0f6421 /]# exit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6. ホストからのコンテナーの検証 リンクのコピーリンクがクリップボードにコピーされました!
podman inspect
コマンドを使用して、既存のコンテナーのメタデータを JSON 形式で検証します。コンテナー ID または名前を使用して、コンテナーを指定できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
ID 64ad95327c74 で定義されるコンテナーを検査します。
すべてのメタデータを取得するには、以下のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow JSON ファイルから特定の項目 (例:
StartedAt
タイムスタンプ) を取得するには、以下を実行します。podman inspect --format='{{.State.StartedAt}}' 64ad95327c74
$ podman inspect --format='{{.State.StartedAt}}' 64ad95327c74 2021-03-02 11:23:54.945071961 +0100 CET
Copy to Clipboard Copied! Toggle word wrap Toggle overflow その情報は階層構造で保存されます。コンテナーの
StartedAt
タイムスタンプ (StartedAt
はState
の配下にある) を確認するには、--format
オプションとコンテナー ID または名前を使用します。
検証する他の項目の例には、以下が含まれます。
-
.Path
: コンテナーとともに実行するコマンドを表示します。 -
.Args
: コマンドに指定する引数 -
.Config.ExposedPorts
: コンテナーから公開する TCP または UDP ポート -
.state.Pid
: コンテナーのプロセス ID を表示します。 -
.HostConfig.PortBindings
: コンテナーからホストへのポートマッピング
5.7. localhost のディレクトリーのコンテナーへのマウント リンクのコピーリンクがクリップボードにコピーされました!
コンテナーでホストの /dev/log
デバイスをマウントして、コンテナー内のログメッセージをホストシステムに公開できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
log_test
という名前のコンテナーを実行し、コンテナーにホストの/dev/log
デバイスをマウントします。podman run --name="log_test" -v /dev/log:/dev/log --rm \ registry.redhat.io/ubi10/ubi logger "Testing logging to the host"
# podman run --name="log_test" -v /dev/log:/dev/log --rm \ registry.redhat.io/ubi10/ubi logger "Testing logging to the host"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow journalctl
ユーティリティーを使用してログを表示します。journalctl -b | grep Testing
# journalctl -b | grep Testing Dec 09 16:55:00 localhost.localdomain root[14634]: Testing logging to the host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --rm
オプションは、終了時にコンテナーを削除します。
5.8. コンテナーのファイルシステムのマウント リンクのコピーリンクがクリップボードにコピーされました!
podman mount
コマンドを使用して、ホストからアクセス可能な場所に、作業コンテナーの root ファイルシステムをマウントします。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
mysyslog
という名前のコンテナーを実行します。podman run -d --name=mysyslog registry.redhat.io/rhel10/support-tools
# podman run -d --name=mysyslog registry.redhat.io/rhel10/support-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、すべてのコンテナーをリスト表示します。
podman ps -a
# podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c56ef6a256f8 registry.redhat.io/rhel10/support-tools:latest usr/bin/bash 20 minutes ago Up 20 minutes ago mysyslog
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mysyslog
コンテナーをマウントします。podman mount mysyslog
# podman mount mysyslog /var/lib/containers/storage/overlay/990b5c6ddcdeed4bde7b245885ce4544c553d108310e2b797d7be46750894719/merged
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ls
コマンドを使用して、マウントポイントのコンテンツを表示します。ls /var/lib/containers/storage/overlay/990b5c6ddcdeed4bde7b245885ce4544c553d108310e2b797d7be46750894719/merged
# ls /var/lib/containers/storage/overlay/990b5c6ddcdeed4bde7b245885ce4544c553d108310e2b797d7be46750894719/merged bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OS バージョンを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9. 静的 IP を使用したデーモンとしてのサービスの実行 リンクのコピーリンクがクリップボードにコピーされました!
次の例では、support-tools
サービスをデーモンプロセスとしてバックグラウンドで実行します。--ip
オプションは、コンテナーのネットワークインターフェイスを特定の IP アドレスに設定します (例: 10.88.0.44)。その後、podman inspect
コマンドを実行して、IP アドレスを適切に設定できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
コンテナーのネットワークインターフェイスを IP アドレス 10.88.0.44 に設定します。
podman run -d --ip=10.88.0.44 registry.access.redhat.com/rhel10/support-tools
# podman run -d --ip=10.88.0.44 registry.access.redhat.com/rhel10/support-tools efde5f0a8c723f70dd5cb5dc3d5039df3b962fae65575b08662e0d5b5f9fbe85
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IP アドレスが正しく設定されていることを確認します。
podman inspect efde5f0a8c723 | grep 10.88.0.44
# podman inspect efde5f0a8c723 | grep 10.88.0.44 "IPAddress": "10.88.0.44",
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10. 実行中のコンテナー内でのコマンドの実行 リンクのコピーリンクがクリップボードにコピーされました!
podman exec
コマンドを使用して、実行中のコンテナーでコマンドを実行し、そのコンテナーを調べます。コンテナーアクティビティーを中断せずに実行中のコンテナーを調査できるので、podman run
コマンドの代わりに podman exec
コマンドを使用します。
前提条件
-
container-tools
メタパッケージがインストールされている。 - コンテナーが実行されている。
手順
my-support-tools
コンテナー内でrpm -qa
コマンドを実行して、インストールされているすべてのパッケージをリスト表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow my-support-tools
コンテナーで/bin/bash
コマンドを実行します。podman exec -it my-support-tools /bin/bash
$ podman exec -it my-support-tools /bin/bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムユーティリティーのセットが含まれる
procps-ng
パッケージをインストールします (例:ps
、top
、uptime
など)。dnf install procps-ng
# dnf install procps-ng
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーを検査します。
システムにある全プロセスをリスト表示するには、以下のコマンドを実行します。
ps -ef
# ps -ef UID PID PPID C STIME TTY TIME CMD root 8 0 0 11:07 pts/0 00:00:00 /bin/bash root 47 8 0 11:13 pts/0 00:00:00 ps -ef
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルシステムのディスク領域の使用量を表示するには、次のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow システム情報を表示するには、以下のコマンドを実行します。
uname -r
# uname -r 6.13.4-200.fc41.x86_64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MB 単位でメモリーの空き容量を表示するには、次のコマンドを実行します。
free --mega
# free --mega total used free shared buff/cache available Mem: 2818 615 1183 12 1020 1957 Swap: 3124 0 3124
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11. 2 つのコンテナー間でのファイルの共有 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーが削除されても、ボリュームを使用してコンテナー内のデータを永続化できます。ボリュームは、複数のコンテナー間でのデータ共有に使用できます。ボリュームとは、ホストマシンに保存されているフォルダーです。ボリュームはコンテナーとホスト間で共有できます。
主な利点は以下のとおりです。
- ボリュームはコンテナー間で共有できます。
- ボリュームは、他と比べるとバックアップまたは移行が簡単です。
- ボリュームを使用するとコンテナーのサイズが増えません。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
ボリュームを作成します。
podman volume create hostvolume
$ podman volume create hostvolume
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ボリュームに関する情報を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow volumes ディレクトリーにボリュームが作成されることに注意してください。
$ mntPoint=$(podman volume inspect hostvolume --format {{.Mountpoint}})
で、変数へのマウントポイントパスを保存して操作を簡素化できます。sudo podman volume create hostvolume
を実行すると、マウントポイントが/var/lib/containers/storage/volumes/hostvolume/_data
に変わります。mntPoint
変数に保管されたパスを使用して、ディレクトリー内にテキストファイルを作成します。echo "Hello from host" >> $mntPoint/host.txt
$ echo "Hello from host" >> $mntPoint/host.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mntPoint
変数で定義されたディレクトリー内の全ファイルをリスト表示します。ls $mntPoint/
$ ls $mntPoint/ host.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow myubi1
という名前のコンテナーを実行し、ホストのボリューム名hostvolume
で定義したディレクトリーをコンテナーの/containervolume1
ディレクトリーにマッピングします。podman run -it --name myubi1 -v hostvolume:/containervolume1 registry.access.redhat.com/ubi10/ubi /bin/bash
$ podman run -it --name myubi1 -v hostvolume:/containervolume1 registry.access.redhat.com/ubi10/ubi /bin/bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mntPoint
変数 (-v $mntPoint:/containervolume1
) で定義したボリュームパスを使用する場合には、podman volume prune
コマンドを実行すると未使用のボリュームが削除され、データが失われる場合がある点に注意してください。常に-v hostvolume_name:/containervolume_name
を使用します。コンテナー上にある共有ボリューム内のファイルをリスト表示します。
ls /containervolume1
# ls /containervolume1 host.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホスト上で作成した
host.txt
ファイルが表示されます。/containervolume1
ディレクトリーにテキストファイルを作成します。echo "Hello from container 1" >> /containervolume1/container1.txt
# echo "Hello from container 1" >> /containervolume1/container1.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
CTRL+p
およびCTRL+q
を使用してコンテナーからデタッチします。 ホスト上にある共有ボリューム内のファイルをリスト表示します。以下の 2 つのファイルが表示されるはずです。
ls $mntPoint
$ ls $mntPoint container1.rxt host.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この時点で、コンテナーとホスト間でファイルを共有しています。2 つのコンテナー間でファイルを共有するには、
myubi2
という名前の別のコンテナーを実行します。myubi2
という名前のコンテナーを実行し、ホストのボリューム名hostvolume
で定義したディレクトリーをコンテナーの/containervolume2
ディレクトリーにマッピングします。podman run -it --name myubi2 -v hostvolume:/containervolume2 registry.access.redhat.com/ubi10/ubi /bin/bash
$ podman run -it --name myubi2 -v hostvolume:/containervolume2 registry.access.redhat.com/ubi10/ubi /bin/bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナー上にある共有ボリューム内のファイルをリスト表示します。
ls /containervolume2
# ls /containervolume2 container1.txt host.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストで作成した
host.txt
ファイルと、myubi1
コンテナー内に作成したcontainer1.txt
ファイルが表示されます。/containervolume2
ディレクトリーにテキストファイルを作成します。echo "Hello from container 2" >> /containervolume2/container2.txt
# echo "Hello from container 2" >> /containervolume2/container2.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
CTRL+p
およびCTRL+q
を使用してコンテナーからデタッチします。 ホスト上にある共有ボリューム内のファイルをリスト表示します。以下の 3 つのファイルが表示されるはずです。
ls $mntPoint
$ ls $mntPoint container1.rxt container2.txt host.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.12. コンテナーのエクスポートおよびインポート リンクのコピーリンクがクリップボードにコピーされました!
podman export
コマンドを使用して、実行中のコンテナーのファイルシステムをローカルマシンの tarball にエクスポートできます。たとえば、頻繁に使用しない大規模なコンテナーがある場合、スナップショットを保存して後で復元できるようにする場合には、podman export
コマンドを使用して、実行中のコンテナーの現在のスナップショットを tarball にエクスポートできます。
podman import
コマンドを使用して tarball をインポートし、ファイルシステムイメージとして保存できます。これにより、このファイルシステムイメージを実行するか、他のイメージのレイヤーとして使用できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
registry.access.redhat.com/ubi10/ubi
イメージに基づいて、myubi
コンテナーを実行します。podman run -dt --name=myubi registry.access.redhat.com/10/ubi
$ podman run -dt --name=myubi registry.access.redhat.com/10/ubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、すべてのコンテナーをリスト表示します。
podman ps -a
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a6a6d4896142 registry.access.redhat.com/10:latest /bin/bash 7 seconds ago Up 7 seconds ago myubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow myubi
コンテナーに割り当てます。podman attach myubi
$ podman attach myubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow testfile
という名前のファイルを作成します。echo "hello" > testfile
[root@a6a6d4896142 /]# echo "hello" > testfile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
CTRL+p
およびCTRL+q
を使用してコンテナーからデタッチします。 ローカルマシンで、
myubi
のファイルシステムをmyubi-container.tar
としてエクスポートします。podman export -o myubi.tar a6a6d4896142
$ podman export -o myubi.tar a6a6d4896142
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、現在のディレクトリーの内容をリスト表示します。
ls -l
$ ls -l -rw-r--r--. 1 user user 210885120 Apr 6 10:50 myubi-container.tar ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
myubi-container
ディレクトリーを作成し、myubi-container.tar
アーカイブからすべてのファイルをデプロイメントします。ツリー形式でmyubi-directory
の内容をリスト表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow myubi-container.tar
にコンテナーのファイルシステムが含まれていることを確認できます。myubi.tar
をインポートして、ファイルシステムイメージとして保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのイメージをリスト表示します。
podman images
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/myubi-imported latest c296689a17da 51 seconds ago 211 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow testfile
ファイルの内容を表示します。podman run -it --name=myubi-imported docker.io/library/myubi-imported cat testfile hello
$ podman run -it --name=myubi-imported docker.io/library/myubi-imported cat testfile hello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.13. コンテナーの停止 リンクのコピーリンクがクリップボードにコピーされました!
実行中のコンテナーを停止するには、podman stop
コマンドを使用します。コンテナー ID または名前を使用して、コンテナーを指定できます。
前提条件
-
container-tools
メタパッケージがインストールされている。 - 1 つ以上のコンテナーが実行中である。
手順
myubi
コンテナーを停止します。コンテナー名を使用する場合:
podman stop myubi
$ podman stop myubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナー ID を使用する場合:
podman stop 1984555a2c27
$ podman stop 1984555a2c27
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
端末セッションに接続されている、実行中のコンテナーを停止するには、コンテナーで exit
コマンドを入力してください。
podman stop
コマンドは、SIGTERM シグナルを送信し、実行中のコンテナーを終了します。定義された期間 (デフォルトでは 10 秒) 後にコンテナーが停止しない場合は、Podman は SIGKILL シグナルを送信します。
また、podman kill
コマンドを使用して、コンテナーを強制終了 (SIGKILL) するか、別のシグナルをコンテナーに送信することもできます。以下は、SIGHUP シグナルをコンテナーに送信する例です (アプリケーションでサポートされていると、SIGHUP により、アプリケーションが設定ファイルを再読み取りします)。
*podman kill --signal="SIGHUP" 74b1da000a11*
# *podman kill --signal="SIGHUP" 74b1da000a11*
74b1da000a114015886c557deec8bed9dfb80c888097aa83f30ca4074ff55fb2
5.14. コンテナーの削除 リンクのコピーリンクがクリップボードにコピーされました!
podman rm
コマンドを使用して、コンテナーを削除します。コンテナー ID または名前でコンテナーを指定できます。
前提条件
-
container-tools
メタパッケージがインストールされている。 - 1 つ以上のコンテナーが停止されている。
手順
(実行中または停止中の) すべてのコンテナーを一覧表示するには、以下を実行します。
podman ps -a
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES IS INFRA d65aecc325a4 ubi10/ubi /bin/bash 3 secs ago Exited (0) 5 secs ago peaceful_hopper false 74b1da000a11 rhel10/support-tools usr/bin/bash 2 mins ago Up About a minute musing_brown false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーを削除します。
peaceful_hopper
を削除するには以下を実行します。podman rm peaceful_hopper
$ podman rm peaceful_hopper
Copy to Clipboard Copied! Toggle word wrap Toggle overflow peaceful_hopper
コンテナーが終了ステータスであったことに注意してください。コンテナーが停止されているので、即座に削除できます。musing_brown
コンテナーを削除するには、まずコンテナーを停止してから削除します。podman stop musing_brown podman rm musing_brown
$ podman stop musing_brown $ podman rm musing_brown
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 複数のコンテナーを削除するには、以下を実行します。
podman rm clever_yonath furious_shockley
$ podman rm clever_yonath furious_shockley
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ローカルシステムからすべてのコンテナーを削除するには、以下のコマンドを実行します。
podman rm -a
$ podman rm -a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-
podman ps -a
コマンドを使用してすべてのイメージをリスト表示し、コンテナーが削除されたことを確認します。
5.15. コンテナーの SELinux ポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーの SELinux ポリシーを生成するには、UDICA ツールを使用します。詳細は、udica SELinux ポリシージェネレーターの概要 を参照してください。
5.16. Podman での事前実行フックの設定 リンクのコピーリンクがクリップボードにコピーされました!
プラグインスクリプトを作成して、コンテナー操作の詳細な制御を定義できます。特に、コンテナーイメージのプル、実行、リストなどの不正なアクションをブロックできます。
ファイル /etc/containers/podman_preexec_hooks.txt
は管理者が作成する必要があり、空であってもかまいません。/etc/containers/podman_preexec_hooks.txt
が存在しない場合、プラグインスクリプトは実行されません。
次のルールがプラグインスクリプトに適用されます。
- root 所有である必要があり、書き込み可能ではありません。
-
/usr/libexec/podman/pre-exec-hooks
および/etc/containers/pre-exec-hooks
ディレクトリーに配置する必要があります。 - 英数字順に順次実行します。
-
すべてのプラグインスクリプトがゼロ値を返す場合、
podman
コマンドが実行されます。 -
いずれかのプラグインスクリプトがゼロ以外の値を返した場合、それは失敗を示します。
podman
コマンドは終了し、最初に失敗したスクリプトのゼロ以外の値を返します。 Red Hat では、スクリプトを正しい順序で実行するために、
DDD_name.lang
の命名規則を使用することを推奨しています。ここで、-
DDD
は、スクリプトの実行順序を示す 10 進数です。必要に応じて、先頭に 1 つまたは 2 つのゼロを使用します。 -
name
はプラグインスクリプトの名前です。 -
lang
(オプション) は、指定されたプログラミング言語のファイル拡張子です。たとえば、プラグインスクリプトの名前は001-check-groups.sh
のようになります。
-
プラグインスクリプトは作成時点で有効です。プラグインスクリプトの前に作成されたコンテナーは影響を受けません。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
001-check-groups.sh
という名前のスクリプトプラグインを作成します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - スクリプトは、ユーザーが指定されたグループに属しているかどうかを確認します。
-
USER
とGROUP
は、Podman によって設定される環境変数です。 -
001-check-groups.sh
スクリプトによって提供される終了コードは、podman
バイナリーに提供されます。 -
podman
コマンドは終了し、最初に失敗したスクリプトのゼロ以外の値を返します。
検証
001-check-groups.sh
スクリプトが正しく動作するかどうかを確認します。podman run image
$ podman run image ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーが正しいグループに属していない場合は、次のエラーが表示されます。
external preexec hook /etc/containers/pre-exec-hooks/001-check-groups.sh failed
external preexec hook /etc/containers/pre-exec-hooks/001-check-groups.sh failed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.17. コンテナー内のアプリケーションのデバッグ リンクのコピーリンクがクリップボードにコピーされました!
トラブルシューティングのさまざまな側面に合わせてカスタマイズされたさまざまなコマンドラインツールを使用できます。詳細は、コンテナー内のアプリケーションのデバッグ を参照してください。
第6章 UBI コンテナーへのソフトウェアの追加 リンクのコピーリンクがクリップボードにコピーされました!
UBI (Red Hat Universal Base Images) は、RHEL コンテンツのサブセットから構築されます。UBI は、UBI でインストールするために自由に利用可能な RHEL パッケージのサブセットも提供します。実行中のコンテナーにソフトウェアを追加または更新するには、RPM パッケージと更新を含む DNF リポジトリーを使用できます。UBI は、Python、Perl、Node.js、Ruby などの事前にビルドされた言語ランタイムコンテナーイメージを提供します。
UBI コンテナーを実行するパッケージを UBI リポジトリーから追加するには、以下を行います。
-
UBI init および UBI 標準イメージでは、
dnf
コマンドを使用します。 -
UBI minimal イメージでは、
microdnf
コマンドを使用します。
実行中のコンテナーでソフトウェアパッケージを直接インストールして作業すると、パッケージを一時的に追加します。この変更はコンテナーイメージに保存されません。パッケージの変更を永続化するには、Buildah を使用した Containerfile からのイメージのビルド セクションを参照してください。
6.1. UBI init イメージの使用 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーがホストシステム上で実行されるときに、systemd
サービス (/sbin/init
) によって自動的に起動するように Web サーバー (httpd
) をインストールおよび設定する Containerfile
を使用してコンテナーを構築できます。podman build
コマンドは、1 つ以上の Containerfiles
と指定されたビルドコンテキストディレクトリー内の指示を使用してイメージをビルドします。コンテキストディレクトリーは、アーカイブ、Git リポジトリー、または Containerfile
の URL として指定できます。コンテキストディレクトリーが指定されていない場合、現在の作業ディレクトリーはビルドコンテキストと見なされ、Containerfile
が含まれている必要があります。--file
オプションで Containerfile
を指定することもできます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
新しいディレクトリーに以下の内容を含む
Containerfile
を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Containerfile
は、httpd
パッケージをインストールし、ブート時にhttpd
サービスが開始できるようにし、テストファイル (index.html
) を作成し、Web サーバーをホスト (ポート 80) に公開し、コンテナーの起動時、systemd
init サービス (/sbin/init
) を開始します。コンテナーをビルドします。
podman build --format=docker -t mysysd .
# podman build --format=docker -t mysysd .
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: お使いのシステムで
systemd
を使用してコンテナーを実行し、SELinux を有効にする場合は、container_manage_cgroup
ブール値変数を設定する必要があります。setsebool -P container_manage_cgroup 1
# setsebool -P container_manage_cgroup 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mysysd_run
という名前のコンテナーを実行します。podman run -d --name=mysysd_run -p 80:80 mysysd
# podman run -d --name=mysysd_run -p 80:80 mysysd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mysysd
イメージがmysysd_run
コンテナーをデーモンプロセスとして実行し、コンテナーのポート 80 がホストシステムのポート 80 に公開されます。注記ルートレスモードでは、1024 以上のホストのポート番号を選択する必要があります。以下に例を示します。
podman run -d --name=mysysd -p 8081:80 mysysd
$ podman run -d --name=mysysd -p 8081:80 mysysd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 1024 未満のポート番号を使用するには、
net.ipv4.ip_unprivileged_port_start
変数を変更する必要があります。sysctl net.ipv4.ip_unprivileged_port_start=80
# sysctl net.ipv4.ip_unprivileged_port_start=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーが実行されていることを確認します。
podman ps
# podman ps a282b0c2ad3d localhost/mysysd:latest /sbin/init 15 seconds ago Up 14 seconds ago 0.0.0.0:80->80/tcp mysysd_run
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Web サーバーをテストします。
curl localhost/index.html
# curl localhost/index.html Successful Web Server Test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2. UBI マイクロイメージの使用 リンクのコピーリンクがクリップボードにコピーされました!
Buildah ツールを使用して ubi-micro
コンテナーイメージをビルドできます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
registry.access.redhat.com/ubi10/ubi-micro
イメージをプルしてビルドします。microcontainer=$(buildah from registry.access.redhat.com/ubi10/ubi-micro)
# microcontainer=$(buildah from registry.access.redhat.com/ubi10/ubi-micro)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作業中のコンテナーの root ファイルシステムをマウントします。
micromount=$(buildah mount $microcontainer)
# micromount=$(buildah mount $microcontainer)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpd
サービスをmicromount
ディレクトリーにインストールします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作業コンテナーで root ファイルシステムをアンマウントします。
buildah umount $microcontainer
# buildah umount $microcontainer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作業コンテナーから
ubi-micro-httpd
イメージを作成します。buildah commit $microcontainer ubi-micro-httpd
# buildah commit $microcontainer ubi-micro-httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ubi-micro-httpd
イメージの詳細を表示します。podman images ubi-micro-httpd
# podman images ubi-micro-httpd localhost/ubi-micro-httpd latest 7c557e7fbe9f 22 minutes ago 151 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3. UBI コンテナーへのソフトウェアの追加 (サブスクライブされたホスト) リンクのコピーリンクがクリップボードにコピーされました!
登録およびサブスクライブされた RHEL ホストで UBI コンテナーを実行している場合は、RHEL Base リポジトリーおよび AppStream リポジトリーが、標準の UBI コンテナーとすべての UBI リポジトリーで有効になります。
Red Hat のエンタイトルメントは、Podman を実行しているホストの
/usr/share/containers/mounts.conf
で定義されたシークレットマウントとして、サブスクライブされた Red Hat ホストから渡されます。マウント設定を確認してください。
cat /usr/share/containers/mounts.conf /usr/share/rhel/secrets:/run/secrets
$ cat /usr/share/containers/mounts.conf /usr/share/rhel/secrets:/run/secrets
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
yum
コマンド、dnf
コマンド、およびmicrodnf
コマンドは、このパスでエンタイトルメントデータを検索するはずです。 - パスが存在しない場合、RHV リポジトリーなど、Red Hat のエンタイトルメント適用対象のコンテンツをコマンドで使用できません。これらのコマンドには、ホストが持つキーまたはコンテンツアクセス権がないためです。
- これは、Red Hat が出荷または提供する RHEL ホスト上の Podman にのみ適用されます。
- Red Hat が出荷していない Podman をインストールした場合は、記事 How do I attach subscription data to containers running in Docker not provided by Red Hat? の手順に従ってください。
6.4. 標準の UBI コンテナーへのソフトウェアの追加 リンクのコピーリンクがクリップボードにコピーされました!
標準の UBI コンテナー内にソフトウェアを追加するには、UBI 以外の dnf リポジトリーを無効にして、ビルドするコンテナーが再配布されるようにします。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
registry.access.redhat.com/ubi10/ubi
イメージをプルして実行します。podman run -it --name myubi registry.access.redhat.com/ubi10/ubi
$ podman run -it --name myubi registry.access.redhat.com/ubi10/ubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow myubi
コンテナーにパッケージを追加します。UBI リポジトリーにあるパッケージを追加するには、UBI リポジトリー以外の dnf リポジトリーをすべて無効にします。たとえば、
bzip2
パッケージを追加するには、次のコマンドを実行します。dnf install --disablerepo=* --enablerepo=ubi-8-appstream-rpms --enablerepo=ubi-8-baseos-rpms bzip2
# dnf install --disablerepo=* --enablerepo=ubi-8-appstream-rpms --enablerepo=ubi-8-baseos-rpms bzip2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow UBI リポジトリーにないパッケージを追加するには、リポジトリーを無効にしないでください。たとえば、
zsh
パッケージを追加するには、次のコマンドを実行します。dnf install zsh
# dnf install zsh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 別のホストリポジトリーにあるパッケージを追加するには、必要なリポジトリーを明示的に有効にします。たとえば、
codeready-builder-for-rhel-8-x86_64-rpms
リポジトリーからpython38-devel
パッケージをインストールするには、以下のコマンドを実行します。dnf install --enablerepo=codeready-builder-for-rhel-8-x86_64-rpms python38-devel
# dnf install --enablerepo=codeready-builder-for-rhel-8-x86_64-rpms python38-devel
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
コンテナー内で有効なリポジトリーのリストを表示します。
dnf repolist
# dnf repolist
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要なリポジトリーがリスト表示されていることを確認します。
インストール済みパッケージのリストを表示します。
rpm -qa
# rpm -qa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要なパッケージがリスト表示されていることを確認します。
Red Hat UBI リポジトリーに含まれていない Red Hat パッケージをインストールすると、サブスクライブしている RHEL システム以外でコンテナーを配布する機能が限定される可能性があります。
6.5. UBI minimal コンテナーへのソフトウェアの追加 リンクのコピーリンクがクリップボードにコピーされました!
UBI dnf リポジトリーは、デフォルトで UBI minimal イメージで有効になります。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
registry.access.redhat.com/ubi10/ubi-minimal
イメージをプルして実行します。podman run -it --name myubimin registry.access.redhat.com/ubi10/ubi-minimal
$ podman run -it --name myubimin registry.access.redhat.com/ubi10/ubi-minimal
Copy to Clipboard Copied! Toggle word wrap Toggle overflow myubimin
コンテナーにパッケージを追加します。UBI リポジトリーにあるパッケージを追加するには、リポジトリーを無効にしないでください。たとえば、
bzip2
パッケージを追加するには、次のコマンドを実行します。microdnf install bzip2 --setopt install_weak_deps=false
# microdnf install bzip2 --setopt install_weak_deps=false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 別のホストリポジトリーにあるパッケージを追加するには、必要なリポジトリーを明示的に有効にします。たとえば、
codeready-builder-for-rhel-8-x86_64-rpms
リポジトリーからpython38-devel
パッケージをインストールするには、以下のコマンドを実行します。microdnf install --enablerepo=codeready-builder-for-rhel-8-x86_64-rpms python38-devel --setopt install_weak_deps=false
# microdnf install --enablerepo=codeready-builder-for-rhel-8-x86_64-rpms python38-devel --setopt install_weak_deps=false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --setopt install_weak_deps=false
オプションは、weak 依存関係のインストールを無効にします。Weak 依存関係には、厳密には必要ではないが、デフォルトでインストールされることが多い推奨パッケージや提案パッケージが含まれます。
検証
コンテナー内で有効なリポジトリーのリストを表示します。
microdnf repolist
# microdnf repolist
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要なリポジトリーがリスト表示されていることを確認します。
インストール済みパッケージのリストを表示します。
rpm -qa
# rpm -qa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要なパッケージがリスト表示されていることを確認します。
Red Hat UBI リポジトリーに含まれていない Red Hat パッケージをインストールすると、サブスクライブしている RHEL システム以外でコンテナーを配布する機能が限定される可能性があります。
6.6. UBI コンテナーへのソフトウェアの追加 (サブスクライブしていないホスト) リンクのコピーリンクがクリップボードにコピーされました!
サブスクライブしていない RHEL システムにソフトウェアパッケージを追加するときに、リポジトリーを無効にする必要はありません。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
UBI 標準または UBI init イメージに基づいて、実行中のコンテナーにパッケージを追加します。リポジトリーを無効にしないでください。
podman run
コマンドを使用してコンテナーを実行し、コンテナー内でdnf install
コマンドを使用します。たとえば、
bzip2
パッケージを UBI 標準ベースのコンテナーに追加するには、次のコマンドを実行します。podman run -it --name myubi registry.access.redhat.com/ubi10/ubi dnf install bzip2
$ podman run -it --name myubi registry.access.redhat.com/ubi10/ubi # dnf install bzip2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、
bzip2
パッケージを UBI init ベースのコンテナーに追加するには、次のコマンドを実行します。podman run -it --name myubimin registry.access.redhat.com/ubi10/ubi-minimal microdnf install bzip2
$ podman run -it --name myubimin registry.access.redhat.com/ubi10/ubi-minimal # microdnf install bzip2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
有効なリポジトリーをリスト表示します。
UBI 標準イメージまたは UBI init イメージに基づいて、コンテナー内で有効なリポジトリーをすべてリスト表示するには、次のコマンドを実行します。
dnf repolist
# dnf repolist
Copy to Clipboard Copied! Toggle word wrap Toggle overflow UBI minimal コンテナーに基づいて、コンテナー内で有効なリポジトリーを一覧表示するには、以下を実行します。
microdnf repolist
# microdnf repolist
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 必要なリポジトリーがリスト表示されていることを確認します。
インストール済みパッケージのリストを表示します。
rpm -qa
# rpm -qa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要なパッケージがリスト表示されていることを確認します。
6.7. UBI ベースのイメージの構築 リンクのコピーリンクがクリップボードにコピーされました!
Buildah ユーティリティーを使用して、Containerfile
から UBI ベースの Web サーバーコンテナーを作成できます。非 UBI dnf リポジトリーをすべて無効にして、イメージに再配布できる Red Hat ソフトウェアのみが含まれていることを確認する必要があります。
UBI 最小イメージの場合は、dnf
の代わりに microdnf
を使用する: RUN microdnf update -y && rm -rf /var/cache/yum
および RUN microdnf install httpd -y && microdnf clean all
コマンド。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
Containerfile
を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーイメージをビルドします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Web サーバーを実行します。
podman run -d --name=myweb -p 80:80 johndoe/webserver
# podman run -d --name=myweb -p 80:80 johndoe/webserver bbe98c71d18720d966e4567949888dc4fb86eec7d304e785d5177168a5965f64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Web サーバーをテストします。
curl http://localhost/index.html
# curl http://localhost/index.html The Web Server is Running
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.8. Application Stream ランタイムイメージの使用 リンクのコピーリンクがクリップボードにコピーされました!
Application Streams に基づくランタイムイメージは、コンテナービルドのベースとして使用できる一連のコンテナーイメージを提供します。
サポートされるランタイムイメージは Python、Ruby、s2-core、s2i-base、.NET Core、PHP です。ランタイムイメージは Red Hat Container Catalog で利用できます。
このような UBI イメージコンテナーには、従来のイメージと同じ基本ソフトウェアが含まれているため、詳細は Using Red Hat Software Collections Container Images を参照してください。
6.9. UBI コンテナーイメージソースコードの取得 リンクのコピーリンクがクリップボードにコピーされました!
すべての Red Hat UBI ベースのイメージのソースコードは、ダウンロード可能なコンテナーイメージの形で入手できます。コンテナーとしてパッケージ化されているにもかかわらず、ソースコンテナーイメージを実行できません。システムに Red Hat ソースコンテナーイメージをインストールするには、podman pull
コマンドではなく、skopeo
コマンドを使用します。
ソースコンテナーイメージは、それらが表すバイナリーコンテナーに基づいて名前が付けられます。たとえば、特定の標準 RHEL UBI 10 コンテナー registry.access.redhat.com/ubi10:8.1-397
の場合、-source
を追加してソースコンテナーイメージ (registry.access.redhat.com/ubi10:8.1-397-source
) を取得します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
skopeo copy
コマンドを使用して、ソースコンテナーイメージをローカルディレクトリーにコピーします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow skopeo inspect
コマンドを使用して、ソースコンテナーイメージを検査します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのコンテンツをデプロイメントします。
cd $HOME/TEST for f in $(ls); do tar xvf $f; done
$ cd $HOME/TEST $ for f in $(ls); do tar xvf $f; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 結果を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 結果が正しい場合は、イメージを使用できる状態になります。
コンテナーイメージがリリースされてから、関連するソースコンテナーが利用可能になるまでに数時間かかる場合があります。
第7章 Pod の使用 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーは、Podman、Skopeo、および Buildah のコンテナーツールで管理できる最小単位です。Podman Pod は、1 つ以上のコンテナーのグループです。Pod の概念は Kubernetes により導入されました。Podman Pod は Kubernetes 定義に似ています。Pod は、OpenShift または Kubernetes 環境で作成、デプロイ、管理できる最小のコンピュート単位です。すべての Podman Pod には infra コンテナーが含まれます。このコンテナーは Pod に関連付けられた namespace を保持し、Podman が他のコンテナーを Pod に接続できるようにします。これにより、Pod を稼働したまま、Pod 内のコンテナーの起動や停止が可能になります。デフォルトの infra コンテナーは、registry.access.redhat.com/ubi10/pause
イメージ上にあります。
7.1. Pod の作成 リンクのコピーリンクがクリップボードにコピーされました!
1 つのコンテナーで Pod を作成できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
空の Pod を作成します。
podman pod create --name mypod
$ podman pod create --name mypod 223df6b390b4ea87a090a4b5207f7b9b003187a6960bd37631ae9bc12c433aff The pod is in the initial state Created.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod の初期状態は Created です。
必要に応じて、すべての Pod をリスト表示します。
podman pod ps
$ podman pod ps POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 223df6b390b4 mypod Created Less than a second ago 1 3afdcd93de3e
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod にはコンテナーが 1 つあることに注意してください。
必要に応じて、関連付けられている全 Pod およびコンテナーをリスト表示します。
podman ps -a --pod
$ podman ps -a --pod CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD 3afdcd93de3e registry.access.redhat.com/ubi10/pause Less than a second ago Created 223df6b390b4-infra 223df6b390b4
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman ps
コマンドからの Pod ID とpodman pod ps
コマンドの Pod ID が一致することが確認できます。デフォルトの infra コンテナーはregistry.access.redhat.com/ubi10/pause
イメージをベースとしています。mypod
という名前の既存 Pod 内で、名前がmyubi
のコンテナーを実行します。podman run -dt --name myubi --pod mypod registry.access.redhat.com/ubi10/ubi /bin/bash
$ podman run -dt --name myubi --pod mypod registry.access.redhat.com/ubi10/ubi /bin/bash 5df5c48fea87860cf75822ceab8370548b04c78be9fc156570949013863ccf71
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、すべての Pod をリスト表示します。
podman pod ps
$ podman pod ps POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 223df6b390b4 mypod Running Less than a second ago 2 3afdcd93de3e
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod にはコンテナーが 2 つあることが分かります。
必要に応じて、関連付けられている全 Pod およびコンテナーをリスト表示します。
podman ps -a --pod
$ podman ps -a --pod CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD 5df5c48fea87 registry.access.redhat.com/ubi10/ubi:latest /bin/bash Less than a second ago Up Less than a second ago myubi 223df6b390b4 3afdcd93de3e registry.access.redhat.com/ubi10/pause Less than a second ago Up Less than a second ago 223df6b390b4-infra 223df6b390b4
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2. Pod 情報の表示 リンクのコピーリンクがクリップボードにコピーされました!
Pod 情報を表示する方法を説明します。
前提条件
-
container-tools
メタパッケージがインストールされている。 - Pod が作成されている。詳細は、Pod の作成 セクションを参照してください。
手順
Pod で実行されているアクティブなプロセスを表示します。
Pod 内のコンテナーで実行中のプロセスを表示するには、以下を入力します。
podman pod top mypod
$ podman pod top mypod USER PID PPID %CPU ELAPSED TTY TIME COMMAND 0 1 0 0.000 24.077433518s ? 0s /pause root 1 0 0.000 24.078146025s pts/0 0s /bin/bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 1 つ以上の Pod のコンテナーにおけるリソース使用状況の統計をライブストリームで表示するには、以下を入力します。
podman pod stats -a --no-stream
$ podman pod stats -a --no-stream ID NAME CPU % MEM USAGE / LIMIT MEM % NET IO BLOCK IO PIDS a9f807ffaacd frosty_hodgkin -- 3.092MB / 16.7GB 0.02% -- / -- -- / -- 2 3b33001239ee sleepy_stallman -- -- / -- -- -- / -- -- / -- --
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod に関する情報を表示するには、以下を入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod 内のコンテナーの情報を確認できます。
7.3. Pod の停止 リンクのコピーリンクがクリップボードにコピーされました!
1 つ以上の Pod を停止するには、podman pod stop
コマンドを使用します。
前提条件
-
container-tools
メタパッケージがインストールされている。 - Pod が作成されている。詳細は、Pod の作成 セクションを参照してください。
手順
Pod
mypod
を停止します。podman pod stop mypod
$ podman pod stop mypod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、関連付けられている全 Pod およびコンテナーをリスト表示します。
podman ps -a --pod
$ podman ps -a --pod CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME 5df5c48fea87 registry.redhat.io/ubi10/ubi:latest /bin/bash About a minute ago Exited (0) 7 seconds ago myubi 223df6b390b4 mypod 3afdcd93de3e registry.access.redhat.com/10/pause About a minute ago Exited (0) 7 seconds ago 8a4e6527ac9d-infra 223df6b390b4 mypod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod
mypod
およびコンテナーmyubi
のステータスが "Exited" であることが分かります。
7.4. Pod の削除 リンクのコピーリンクがクリップボードにコピーされました!
podman pod rm
コマンドを使用して、停止した 1 つ以上の Pod とコンテナーを削除できます。
前提条件
手順
以下を入力して、Pod
mypod
を削除します。podman pod rm mypod
$ podman pod rm mypod 223df6b390b4ea87a090a4b5207f7b9b003187a6960bd37631ae9bc12c433aff
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod を削除すると、その Pod 中の全コンテナーが自動的に削除されることに注意してください。
必要に応じて、すべてのコンテナーおよび Pod が削除されたことを確認します。
podman ps podman pod ps
$ podman ps $ podman pod ps
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第8章 コンテナーネットワークの管理 リンクのコピーリンクがクリップボードにコピーされました!
この章では、コンテナー間の通信方法を説明します。
8.1. コンテナーネットワークのリストアップ リンクのコピーリンクがクリップボードにコピーされました!
Podman には、ルートレスとルートフルという 2 つのネットワークの動作があります。
- ルートレスネットワーク: ネットワークは自動的に設定され、コンテナーには IP アドレスがありません。
- ルートフルネットワーク: コンテナーには IP アドレスがあります。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
ルートユーザーで全ネットワークをリスト表示します。
podman network ls
# podman network ls NETWORK ID NAME VERSION PLUGINS 2f259bab93aa podman 0.4.0 bridge,portmap,firewall,tuning
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - デフォルトでは、Podman はブリッジネットワークを提供します。
- ルートレスユーザーのネットワークリストは、ルートフルユーザーと同じです。
8.2. ネットワークの検査 リンクのコピーリンクがクリップボードにコピーされました!
podman network ls
コマンドでリストアップされた特定のネットワークの IP 範囲、有効なプラグイン、ネットワークのタイプなどを表示します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
デフォルトの
Podman
ネットワークを検査します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow IP 範囲、有効なプラグイン、ネットワークの種類など、ネットワークの設定を確認できます。
8.3. ネットワークの作成 リンクのコピーリンクがクリップボードにコピーされました!
新しいネットワークを作成するには、Podman network create
コマンドを使用します。
デフォルトでは、Podman は外部ネットワークを作成します。podman network create --internal
コマンドで内部ネットワークを作成することができます。内部ネットワーク内のコンテナーは、ホスト上の他のコンテナーと通信できますが、ホスト外のネットワークに接続したり、ホストから到達したりすることはできません。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
mynet
という名前の外部ネットワークを作成します。podman network create mynet
# podman network create mynet /etc/cni/net.d/mynet.conflist
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
すべてのネットワークをリストアップします。
podman network ls
# podman network ls NETWORK ID NAME VERSION PLUGINS 2f259bab93aa podman 0.4.0 bridge,portmap,firewall,tuning 11c844f95e28 mynet 0.4.0 bridge,portmap,firewall,tuning,dnsname
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作成された
mynet
ネットワークとデフォルトのPodman
ネットワークが表示されます。
Podman 4.0 以降では、podman network create
コマンドを使用して新しい外部ネットワークを作成すると、DNS プラグインがデフォルトで有効になります。
8.4. コンテナーのネットワークへの接続 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーをネットワークに接続するには、Podman network connect
コマンドを使用します。
前提条件
-
container-tools
メタパッケージがインストールされている。 -
podman network create
コマンドを使用してネットワークが作成さている。 - コンテナーが作成されている。
手順
mycontainer
という名前のコンテナーをmynet
という名前のネットワークに接続します。podman network connect mynet mycontainer
# podman network connect mynet mycontainer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
mycontainer
がmynet
ネットワークに接続されていることを確認します。podman inspect --format='{{.NetworkSettings.Networks}}' mycontainer
# podman inspect --format='{{.NetworkSettings.Networks}}' mycontainer map[podman:0xc00042ab40 mynet:0xc00042ac60]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mycontainer
がmynet
とpodman
のネットワークに接続されていることがわかります。
8.5. コンテナーのネットワークからの切断 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーをネットワークから切断するには、podman network disconnect
コマンドを使用します。
前提条件
-
container-tools
メタパッケージがインストールされている。 -
podman network create
コマンドを使用してネットワークが作成さている。 - コンテナーがネットワークに接続されている。
手順
mycontainer
というコンテナーをmynet
というネットワークから切り離します。podman network disconnect mynet mycontainer
# podman network disconnect mynet mycontainer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
mycontainer
がmynet
ネットワークから切断されていることを確認します。podman inspect --format='{{.NetworkSettings.Networks}}' mycontainer
# podman inspect --format='{{.NetworkSettings.Networks}}' mycontainer map[podman:0xc000537440]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mycontainer
がmynet
ネットワークから切断され、mycontainer
がデフォルトのPodman
ネットワークにのみ接続されていることがわかります。
8.6. ネットワークの削除 リンクのコピーリンクがクリップボードにコピーされました!
指定したネットワークを削除するには、podman network rm
コマンドを使用します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
すべてのネットワークをリストアップします。
podman network ls
# podman network ls NETWORK ID NAME VERSION PLUGINS 2f259bab93aa podman 0.4.0 bridge,portmap,firewall,tuning 11c844f95e28 mynet 0.4.0 bridge,portmap,firewall,tuning,dnsname
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mynet
ネットワークを削除します。podman network rm mynet
# podman network rm mynet mynet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
削除されたネットワークに関連するコンテナーがある場合は、Podman network rm -f
コマンドを使用してコンテナーと Pod を削除する必要があります。
検証
mynet
ネットワークが削除されたかどうかを確認します。podman network ls
# podman network ls NETWORK ID NAME VERSION PLUGINS 2f259bab93aa podman 0.4.0 bridge,portmap,firewall,tuning
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.7. 未使用の全ネットワークの削除 リンクのコピーリンクがクリップボードにコピーされました!
podman network prune
で、使われていないネットワークをすべて削除してください。未使用のネットワークとは、コンテナーが接続されていないネットワークのことです。podman network prune
コマンドでは、デフォルトの podman
ネットワークは削除されません。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
未使用のネットワークをすべて削除します。
podman network prune
# podman network prune WARNING! This will remove all networks not used by at least one container. Are you sure you want to continue? [y/N] y
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
すべてのネットワークが削除されたことを確認します。
podman network ls
# podman network ls NETWORK ID NAME VERSION PLUGINS 2f259bab93aa podman 0.4.0 bridge,portmap,firewall,tuning
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第9章 コンテナー間の通信 リンクのコピーリンクがクリップボードにコピーされました!
ポートマッピング、DNS 解決、または Pod 内の通信のオーケストレーションを活用して、コンテナー、アプリケーション、ホストシステム間の通信を確立する方法を学習します。
9.1. ネットワークモードとレイヤー リンクのコピーリンクがクリップボードにコピーされました!
Podman には、いくつかの異なるネットワークモードがあります。
-
bridge
- デフォルトのブリッジネットワーク上に別のネットワークを作成します。 -
container:<id>
- id が<id>
のコンテナーと同じネットワークを使用します。 -
host
- ホストネットワークスタックを使用します。 -
network-id
-podman
network create コマンドで作成されたユーザー定義のネットワークを使用します。 -
private
- コンテナーの新しいネットワークを作成します。 -
slirp4nets
- ルートレスコンテナーのデフォルトオプションであるslirp4netns
を使用してユーザーネットワークスタックを作成します。 -
pasta
-slirp4netns
の高性能な代替品。Podman v4.4.1 以降ではpasta
を使用できます。 -
none
- コンテナーのネットワークの namespace を作成しますが、ネットワークインターフェイスは設定しません。コンテナーにはネットワーク接続がありません。 -
ns:<path>
- 参加するネットワーク namespace へのパス
ホストモードでは、D-bus (コンテナーはプロセス間通信 (IPC) システム) などのローカルシステムサービスにフルアクセスできるため、安全でないと考えられています。
9.2. slirp4netns と pasta の違い リンクのコピーリンクがクリップボードにコピーされました!
slirp4netns
と比較した pasta
ネットワークモードの顕著な違いは次のとおりです。
-
pasta
は、IPv6 ポート転送をサポートしています。 -
pasta
は、slirp4netns
よりも効率的です。 -
pasta
は、ホストから IP アドレスをコピーしますが、slirp4netns は定義済みの IPv4 アドレスを使用します。 -
pasta
は、ホストからのインターフェイス名を使用しますが、slirp4netns はインターフェイス名として tap0 を使用します。 -
pasta
は、ホストからのゲートウェイアドレスを使用しますが、slirp4netns
は、独自のゲートウェイアドレスを定義して NAT を使用します。
ルートレスコンテナーのデフォルトのネットワークモードは slirp4netns
です。
9.3. ネットワークモードの設定 リンクのコピーリンクがクリップボードにコピーされました!
--network
オプションを指定した podman run
コマンドを使用して、ネットワークモードを選択できます。
前提条件
-
container-tools
モジュールがインストールされている。
手順
オプション:
pasta
ネットワークモードを使用する場合は、passt
パッケージをインストールします。{PackageManager} install passt
$ {PackageManager} install passt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow registry.access.redhat.com/ubi10/ubi
イメージに基づいてコンテナーを実行します。podman run --network=<netwok_mode> -d --name=myubi registry.access.redhat.com/ubi9/ubi
$ podman run --network=<netwok_mode> -d --name=myubi registry.access.redhat.com/ubi9/ubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <netwok_mode>
は必要なネットワークモードです。あるいは、containers.conf
ファイルのdefault_rootless_network_cmd
オプションを使用して、デフォルトのネットワークモードを切り替えることもできます。
ルートレスコンテナーのデフォルトのネットワークモードは slirp4netns
です。
検証
ネットワークモードの設定を確認します。
podman inspect --format {{.HostConfig.NetworkMode}} myubi
$ podman inspect --format {{.HostConfig.NetworkMode}} myubi <netwok_mode>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.4. コンテナーのネットワーク設定の検査 リンクのコピーリンクがクリップボードにコピーされました!
podman inspect
コマンドに --format
オプションを付けると、podman inspect
の出力から個々の項目を表示できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
コンテナーの IP アドレスを表示します。
podman inspect --format='{{.NetworkSettings.IPAddress}}' <containerName>
# podman inspect --format='{{.NetworkSettings.IPAddress}}' <containerName>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーが接続されている全ネットワークを表示します。
podman inspect --format='{{.NetworkSettings.Networks}}' <containerName>
# podman inspect --format='{{.NetworkSettings.Networks}}' <containerName>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポートマッピングを表示します。
podman inspect --format='{{.NetworkSettings.Ports}}' <containerName>
# podman inspect --format='{{.NetworkSettings.Ports}}' <containerName>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5. コンテナーとアプリケーション間の通信 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーとアプリケーションの間で通信を行うことができます。アプリケーションのポートは、リスニング状態かオープン状態のどちらかです。これらのポートは自動的にコンテナーネットワークに公開されるため、このようなネットワークを使用してコンテナーに到達できます。デフォルトでは、Web サーバーはポート 80 でリッスンします。この手順で、myubi
コンテナーは web-container
アプリケーションと通信を行います。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
web-container
という名前のコンテナーを起動します。podman run -dt --name=web-container docker.io/library/httpd
# podman run -dt --name=web-container docker.io/library/httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのコンテナーをリスト表示します。
podman ps -a
# podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b8c057333513 docker.io/library/httpd:latest httpd-foreground 4 seconds ago Up 5 seconds ago web-container
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーを点検し、IP アドレスを表示します。
podman inspect --format='{{.NetworkSettings.IPAddress}}' web-container
# podman inspect --format='{{.NetworkSettings.IPAddress}}' web-container 10.88.0.2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow myubi
コンテナーを実行し、Web サーバーが動作していることを確認します。podman run -it --name=myubi ubi10/ubi curl 10.88.0.2:80
# podman run -it --name=myubi ubi10/ubi curl 10.88.0.2:80 <html><body><h1>It works!</h1></body></html>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.6. コンテナーとホスト間の通信 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Podman
ネットワークはブリッジネットワークです。つまり、ネットワークデバイスがコンテナーネットワークとホストネットワークをつなぎます。
前提条件
-
container-tools
メタパッケージがインストールされている。 -
web-container
が動作している。詳細は、コンテナーとアプリケーションの間の通信 のセクションを参照してください。
手順
ブリッジが設定されていることを確認します。
podman network inspect podman | grep bridge
# podman network inspect podman | grep bridge "type": "bridge"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストネットワークの設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow web-container
にpodman0
サブネットの IP が指定されており、ネットワークがホストにブリッジされていることがわかります。web-container
をチェックし、その IP アドレスを表示します。podman inspect --format='{{.NetworkSettings.IPAddress}}' web-container
# podman inspect --format='{{.NetworkSettings.IPAddress}}' web-container 10.88.0.2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストから直接
web-container
にアクセスします。curl 10.88.0.2:80
$ curl 10.88.0.2:80 <html><body><h1>It works!</h1></body></html>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.7. ポートマッピングによるコンテナー間の通信 リンクのコピーリンクがクリップボードにコピーされました!
2 つのコンテナー間で通信する最も便利な方法は、公開ポートを使用することです。ポートの公開は、自動と手動の 2 つの方法で行うことができます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
未公開のコンテナーを実行します。
podman run -dt --name=web1 ubi10/httpd-24
# podman run -dt --name=web1 ubi10/httpd-24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 自動的に公開されたコンテナーを実行します。
podman run -dt --name=web2 -P ubi10/httpd-24
# podman run -dt --name=web2 -P ubi10/httpd-24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 手動で公開したコンテナーを実行し、コンテナーポート 8080 を公開します。
podman run -dt --name=web3 -p 8888:8080 ubi10/httpd-24
# podman run -dt --name=web3 -p 8888:8080 ubi10/httpd-24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのコンテナーをリスト表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下が確認できます。
-
コンテナー
web1
には公開ポートがなく、コンテナーネットワークまたはブリッジにでのみアクセスできます。 コンテナー
web2
は、ポート 43595 と 42423 を自動的にマッピングして、それぞれアプリケーションポート 8080 と 8443 を公開します。注記registry.access.redhat.com/10/httpd-24
イメージの Containerfile にEXPOSE 8080
とEXPOSE 8443
コマンドがあるため、自動ポートマッピングが可能です。-
コンテナー
web3
は手動でポートを公開しています。ホストポート 8888 はコンテナーポート 8080 にマッピングされています。
-
コンテナー
web1
、web3
コンテナーの IP アドレスを表示します。podman inspect --format='{{.NetworkSettings.IPAddress}}' web1 podman inspect --format='{{.NetworkSettings.IPAddress}}' web3
# podman inspect --format='{{.NetworkSettings.IPAddress}}' web1 # podman inspect --format='{{.NetworkSettings.IPAddress}}' web3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <IP>:<port> 表記を使用して
web1
コンテナーに到達します。curl 10.88.0.2:8080
# curl 10.88.0.2:8080 ... <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title> ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow localhost:<port> 表記を使用して
web2
コンテナーに到達します。curl localhost:43595
# curl localhost:43595 ... <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title> ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <IP>:<port> 表記を使用して
web3
コンテナーに到達します:curl 10.88.0.4:8080
# curl 10.88.0.4:8080 ... <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title> ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.8. DNS を利用したコンテナー間の通信 リンクのコピーリンクがクリップボードにコピーされました!
DNS プラグインが有効な場合に、コンテナー名を使用してコンテナーのアドレスを指定します。
前提条件
-
container-tools
メタパッケージがインストールされている。 -
DNS プラグインを有効にしたネットワークが
podman network create
コマンドで作成されている。
手順
mynet
ネットワークに接続されたreceiver
コンテナーを実行します。podman run -d --net mynet --name receiver ubi9 sleep 3000
# podman run -d --net mynet --name receiver ubi9 sleep 3000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sender
コンテナーを実行し、その名前でreceiver
コンテナーにアクセスします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow CTRL+C
で終了します。
sender
コンテナーは、receiver
コンテナーの名前を使用して ping を送信できることがわかります。
9.9. Pod 内の 2 つのコンテナー間での通信 リンクのコピーリンクがクリップボードにコピーされました!
同じ Pod 内のコンテナーはすべて、IP アドレス、MAC アドレス、およびポートマッピングを共有します。同じ Pod 内のコンテナー間では、localhost:port の表記で通信が可能です。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
web-pod
という名前の Pod を作成します。podman pod create --name=web-pod
$ podman pod create --name=web-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow web-container
という名前の Web コンテナーを Pod で実行します。podman container run -d --pod web-pod --name=web-container docker.io/library/httpd
$ podman container run -d --pod web-pod --name=web-container docker.io/library/httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 関連付けられている全 Pod およびコンテナーをリスト表示します。
podman ps --pod
$ podman ps --pod CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME 58653cf0cf09 k8s.gcr.io/pause:3.5 4 minutes ago Up 3 minutes ago 4e61a300c194-infra 4e61a300c194 web-pod b3f4255afdb3 docker.io/library/httpd:latest httpd-foreground 3 minutes ago Up 3 minutes ago web-container 4e61a300c194 web-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow docker.io/library/fedora イメージを元に、
web-pod
でコンテナーを実行します。podman container run -it --rm --pod web-pod docker.io/library/fedora curl localhost
$ podman container run -it --rm --pod web-pod docker.io/library/fedora curl localhost <html><body><h1>It works!</h1></body></html>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーが
web-container
に到達できることがわかります。
9.10. Pod での通信 リンクのコピーリンクがクリップボードにコピーされました!
Pod 作成時に、Pod 内のコンテナー用のポートを公開する必要があります。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
web-pod
という名前の Pod を作成します。podman pod create --name=web-pod-publish -p 80:80
# podman pod create --name=web-pod-publish -p 80:80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべての Pod をリスト表示します。
podman pod ls
# podman pod ls POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS 26fe5de43ab3 publish-pod Created 5 seconds ago 7de09076d2b3 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow web-pod
でweb-container
という名前の Web コンテナーを実行します。podman container run -d --pod web-pod-publish --name=web-container docker.io/library/httpd
# podman container run -d --pod web-pod-publish --name=web-container docker.io/library/httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーの一覧を表示します。
podman ps
# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7de09076d2b3 k8s.gcr.io/pause:3.5 About a minute ago Up 23 seconds ago 0.0.0.0:80->80/tcp 26fe5de43ab3-infra 088befb90e59 docker.io/library/httpd httpd-foreground 23 seconds ago Up 23 seconds ago 0.0.0.0:80->80/tcp web-container
Copy to Clipboard Copied! Toggle word wrap Toggle overflow web-container
に到達できることを確認します。curl localhost:80
$ curl localhost:80 <html><body><h1>It works!</h1></body></html>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.11. コンテナーネットワークへの Pod のアタッチ リンクのコピーリンクがクリップボードにコピーされました!
Pod 作成時に Pod 内のコンテナーをネットワークにアタッチします。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
pod-net
という名前のネットワークを作成します。podman network create pod-net
# podman network create pod-net /etc/cni/net.d/pod-net.conflist
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod
web-pod
を作成します。podman pod create --net pod-net --name web-pod
# podman pod create --net pod-net --name web-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow web-pod
でweb-container
という名前のコンテナーを実行します。podman run -d --pod webt-pod --name=web-container docker.io/library/httpd
# podman run -d --pod webt-pod --name=web-container docker.io/library/httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: コンテナーが関連付けられている Pod を表示します。
podman ps -p
# podman ps -p CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME b7d6871d018c registry.access.redhat.com/ubi10/pause:latest 9 minutes ago Up 6 minutes ago a8e7360326ba-infra a8e7360326ba web-pod 645835585e24 docker.io/library/httpd:latest httpd-foreground 6 minutes ago Up 6 minutes ago web-container a8e7360326ba web-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
コンテナーに接続されているすべてのネットワークを表示します。
podman ps --format="{{.Networks}}"
# podman ps --format="{{.Networks}}" pod-net
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.12. Podman の HTTP プロキシー変数の設定 リンクのコピーリンクがクリップボードにコピーされました!
プロキシーサーバーの背後でイメージをプルするには、Podman の HTTP プロキシー変数を設定する必要があります。Podman は環境変数 HTTP_PROXY
を読み取り、HTTP プロキシー情報を確認します。HTTP プロキシー情報は、環境変数として、または /etc/profile.d
で設定できます。
手順
Podman のプロキシー変数を設定します。以下に例を示します。
非認証プロキシー:
cat /etc/profile.d/unauthenticated_http_proxy.sh export HTTP_PROXY=http://192.168.0.1:3128 export HTTPS_PROXY=http://192.168.0.1:3128 export NO_PROXY=example.com,172.5.0.0/16
# cat /etc/profile.d/unauthenticated_http_proxy.sh export HTTP_PROXY=http://192.168.0.1:3128 export HTTPS_PROXY=http://192.168.0.1:3128 export NO_PROXY=example.com,172.5.0.0/16
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 認証プロキシー:
cat /etc/profile.d/authenticated_http_proxy.sh export HTTP_PROXY=http://USERNAME:PASSWORD@192.168.0.1:3128 export HTTPS_PROXY=http://USERNAME:PASSWORD@192.168.0.1:3128 export NO_PROXY=example.com,172.5.0.0/16
# cat /etc/profile.d/authenticated_http_proxy.sh export HTTP_PROXY=http://USERNAME:PASSWORD@192.168.0.1:3128 export HTTPS_PROXY=http://USERNAME:PASSWORD@192.168.0.1:3128 export NO_PROXY=example.com,172.5.0.0/16
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第10章 コンテナーネットワークモードの設定 リンクのコピーリンクがクリップボードにコピーされました!
この章では、さまざまなネットワークモードを設定する方法を説明します。
10.1. 静的 IP でのコンテナー実行 リンクのコピーリンクがクリップボードにコピーされました!
podman run
コマンドで --ip
オプションを指定すると、コンテナーのネットワークインターフェイスが特定の IP アドレスに設定さします (例: 10.88.0.44)。podman inspect
コマンドを実行して、IP アドレスが正しく設定されていることを確認します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
コンテナーのネットワークインターフェイスを IP アドレス 10.88.0.44 に設定します。
podman run -d --name=myubi --ip=10.88.0.44 registry.access.redhat.com/ubi9/ubi
# podman run -d --name=myubi --ip=10.88.0.44 registry.access.redhat.com/ubi9/ubi efde5f0a8c723f70dd5cb5dc3d5039df3b962fae65575b08662e0d5b5f9fbe85
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
IP アドレスが正しく設定されていることを確認します。
podman inspect --format='{{.NetworkSettings.IPAddress}}' myubi
# podman inspect --format='{{.NetworkSettings.IPAddress}}' myubi 10.88.0.44
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2. systemd を使用した Netavark の DHCP プラグインの実行 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
systemd ソケットを使用して DHCP プロキシーを有効にします。
systemctl enable --now netavark-dhcp-proxy.socket Created symlink /etc/systemd/system/sockets.target.wants/netavark-dhcp-proxy.socket → /usr/lib/systemd/system/netavark-dhcp-proxy.socket.
systemctl enable --now netavark-dhcp-proxy.socket Created symlink /etc/systemd/system/sockets.target.wants/netavark-dhcp-proxy.socket → /usr/lib/systemd/system/netavark-dhcp-proxy.socket.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: ソケットユニットファイルを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow macvlan ネットワークを作成し、それを使用してホストインターフェイスを指定します。通常、これは外部インターフェイスです。
podman network create -d macvlan --interface-name <LAN_INTERFACE> mv1
# podman network create -d macvlan --interface-name <LAN_INTERFACE> mv1 mv1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しく作成したネットワークを使用してコンテナーを実行します。
podman run --rm --network mv1 -d --name test alpine top
# podman run --rm --network mv1 -d --name test alpine top 894ae3b6b1081aca2a5d90a9855568eaa533c08a174874be59569d4656f9bc45
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
コンテナーにローカルサブネット上の IP があることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーを検査して、正しい IP アドレスが使用されていることを確認します。
podman container inspect test --format {{.NetworkSettings.Networks.mv1.IPAddress}}
# podman container inspect test --format {{.NetworkSettings.Networks.mv1.IPAddress}} 192.168.188.36
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
この IP アドレスへの接続を試みるときは、必ず別のホストから接続してください。macvlan ネットワークを使用する場合、同じホストから接続することはできません。
10.3. macvlan プラグイン リンクのコピーリンクがクリップボードにコピーされました!
ほとんどのコンテナーイメージには DHCP クライアントがありませんが、dhcp
プラグインは、コンテナーが DHCP サーバーを操作するためのプロキシー DHCP クライアントとして機能します。
ホストシステムには、コンテナーへのネットワークアクセス権がありません。ホスト外部からコンテナーへのネットワーク接続を許可するには、コンテナーには、ホストと同じネットワーク上に IP が必要です。macvlan
プラグインを使用すると、コンテナーをホストと同じネットワークに接続することができます。
この手順は、ルートフルコンテナーにのみ適用されます。ルートレスコンテナーは、macvlan
および dhcp
プラグインを使用することができません。
podman network create --driver=macvlan
コマンドを使用して macvlan ネットワークを作成できます。
第11章 Podman を使用した systemd へのコンテナーの移植 リンクのコピーリンクがクリップボードにコピーされました!
Podman (Pod Manager) は、シンプルなデーモンレスツールである、フル機能のコンテナーエンジンです。Podman は、他のコンテナーエンジンからの移行を容易にし、Pod、コンテナー、およびイメージの管理を可能にする Docker-CLI と同等のコマンドラインを備えています。
もともと、Podman は、Linux システム全体を提供したり、起動順序、依存関係のチェック、失敗したサービスの回復などのサービスを管理したりするように設計されたものではありませんでした。完全なシステム初期化は、systemd
が担当していました。Red Hat はコンテナーを systemd
と統合しているため、Linux システムで他のサービスや機能が管理するのと同じ方法で、Podman によってビルドされた OCI および Docker 形式のコンテナーを管理できます。systemd
初期化サービスを使用して、Pod とコンテナーを操作できます。
systemd
ユニットファイルを使用すると、次のことが可能になります。
-
systemd
サービスとして開始するようにコンテナーまたは Pod をセットアップします。 - コンテナー化されたサービスを実行して依存関係を確認する順序を定義します (たとえば、別のサービスが実行されていること、ファイルが利用可能であること、またはリソースがマウントされていることなど)。
-
systemctl
コマンドを使用して、systemd
システムの状態を制御します。
systemd
ユニットファイルを使用して、コンテナーと Pod の移植可能な説明を生成できます。
11.1. Quadlets を使用した systemd ユニットファイルの自動生成 リンクのコピーリンクがクリップボードにコピーされました!
Quadlet を使用する場合、通常の systemd
ユニットファイルによく似た形式でコンテナーを実行する方法を記述します。コンテナーの記述は、関連するコンテナーの詳細を中心に行うため、systemd
でのコンテナー実行に関する技術的詳細を意識せずに済みます。次のいずれかのディレクトリーに <CTRNAME>.container
ユニットファイルを作成します。
-
root ユーザーの場合:
/usr/share/containers/systemd/
または/etc/containers/systemd/
-
ルートレスユーザーの場合:
$HOME/.config/containers/systemd/
、$XDG_CONFIG_HOME/containers/systemd/、
/etc/containers/systemd/users/$(UID)
、または/etc/containers/systemd/users/
Quadlet は、Podman v4.6 以降で利用可能です。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
mysleep.container
ユニットファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow [Container]
セクションでは、以下を指定する必要があります。-
Image
- 実行するコンテナーイメージ Exec
- コンテナー内で実行するコマンドこれにより、
systemd
ユニットファイルで指定する他のすべてのフィールドを使用できるようになります。
-
mysleep.container
ファイルに基づいてmysleep.service
を作成します。systemctl --user daemon-reload
$ systemctl --user daemon-reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
mysleep.service
のステータスを確認します。systemctl --user status mysleep.service
$ systemctl --user status mysleep.service ○ mysleep.service - The sleep container Loaded: loaded (/home/username/.config/containers/systemd/mysleep.container; generated) Active: inactive (dead)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mysleep.service
を起動します。systemctl --user start mysleep.service
$ systemctl --user start mysleep.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
mysleep.service
のステータスを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのコンテナーをリスト表示します。
podman ps -a
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 421c8293fc1b registry.access.redhat.com/ubi10-minimal:latest sleep 1000 30 seconds ago Up 10 seconds ago systemd-mysleep
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作成されたコンテナーの名前は次の要素で構成されています。
-
systemd-
接頭辞 systemd
ユニットの名前、つまりsystemd-mysleep
この名前は、一般的なコンテナーと
systemd
ユニットで実行されているコンテナーを区別するのに役立ちます。また、コンテナーがどのユニットで実行されるかを判断するのにも役立ちます。コンテナーの名前を変更する場合は、[Container]
セクションのContainerName
フィールドを使用します。
-
11.2. systemd サービスの有効化 リンクのコピーリンクがクリップボードにコピーされました!
サービスの有効化には、さまざまなオプションがあります。
手順
サービスの有効化:
システムの起動時にサービスを有効にするには、ユーザーがログインしているかどうかに拘らず、次のコマンドを実行します。
systemctl enable <service>
# systemctl enable <service>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemd
ユニットファイルを/etc/systemd/system
ディレクトリーにコピーする必要があります。ユーザーのログイン時にサービスを起動し、ユーザーのログアウト時に停止するには、次のコマンドを実行します。
systemctl --user enable <service>
$ systemctl --user enable <service>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemd
ユニットファイルを$HOME/.config/systemd/user
ディレクトリーにコピーする必要があります。システムの起動時にサービスを起動し、ログアウト後もそのまま起動した状態を保つには、次のコマンドを実行します。
loginctl enable-linger <username>
# loginctl enable-linger <username>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.3. systemd を使用したコンテナーの自動起動 リンクのコピーリンクがクリップボードにコピーされました!
systemctl
コマンドを使用して、systemd
システムおよびサービスマネージャーの状態を制御できます。root 以外のユーザーでサービスを有効化、起動、停止できます。root ユーザーとしてサービスをインストールするには、--user
オプションを省略します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
systemd
マネージャー設定をリロードします。systemctl --user daemon-reload
# systemctl --user daemon-reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービス
container.service
を有効にし、起動時に開始します。systemctl --user enable container.service
# systemctl --user enable container.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスをすぐに起動します。
systemctl --user start container.service
# systemctl --user start container.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスのステータスを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl is-enabled container.service
コマンドを使用して、サービスが有効化されているか確認できます。
検証
実行中または終了したコンテナーをリスト表示します。
podman ps
# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f20988d59920 registry.access.redhat.com/ubi10-minimal:latest top 12 seconds ago Up 11 seconds ago funny_zhukovsky
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
container.service
を停止するには、以下を入力します。
systemctl --user stop container.service
# systemctl --user stop container.service
11.4. podman generate systemd コマンドではなく Quadlets を使用する利点 リンクのコピーリンクがクリップボードにコピーされました!
通常の systemd
ユニットファイルと同様の形式でコンテナーを実行する方法を記述する Quadlets ツールを使用できます。
Quadlet は、Podman v4.6 以降で利用可能です。
Quadlets には、podman generate systemd
コマンドを使用してユニットファイルを生成する場合に比べて、次のような多くの利点があります。
-
メンテナンスが簡単: コンテナーの記述は、関連するコンテナーの詳細を中心に行うため、
systemd
でのコンテナー実行に関する技術的詳細を意識せずに済みます。 -
自動更新: Quadlets では、更新後にユニットファイルを手動で再生成する必要はありません。Podman の新しいバージョンがリリースされた場合、起動時などに
systemclt daemon-reload
コマンドを実行すると、サービスが自動的に更新されます。 - シンプルなワークフロー: 簡素化された構文のおかげで、Quadlet ファイルをゼロから作成して、どこにでもデプロイできます。
- 標準の systemd オプションのサポート: Quadlet は、既存の systemd-unit 構文を新しいテーブル (コンテナーを設定するテーブルなど) で拡張します。
Quadlet は Kubernetes YAML 機能のサブセットをサポートします。詳細は、サポートされる YAML フィールドのサポートマトリックス を参照してください。次のツールのいずれかを使用して YAML ファイルを生成できます。
-
Podman:
podman generate kube
コマンド -
OpenShift:
oc generate
コマンドと--dry-run
オプション -
Kubernetes:
kubectl create
コマンドと--dry-run
オプション
Quadlet は次のユニットファイルタイプをサポートします。
コンテナーユニット:
podman run
コマンドを実行してコンテナーを管理するために使用します。-
ファイル拡張子:
.container
-
セクション名:
[Container]
-
必須フィールド: サービスによって実行されるコンテナーイメージを記述する
Image
-
ファイル拡張子:
Kube ユニット:
podman kube play
コマンドを実行して、Kubernetes YAML ファイルで定義したコンテナーを管理するために使用します。-
ファイル拡張子:
.kube
-
セクション名:
[Kube]
-
必須フィールド: Kubernetes YAML ファイルへのパスを定義する
Yaml
-
ファイル拡張子:
ネットワークユニット:
.container
または.kube
ファイルで参照できる Podman ネットワークを作成するために使用します。-
ファイル拡張子:
.network
-
セクション名:
[Network]
- 必須フィールド: なし
-
ファイル拡張子:
ボリュームユニット:
.container
ファイルで参照できる Podman ボリュームを作成するために使用します。-
ファイル拡張子:
.volume
-
セクション名:
[Volume]
- 必須フィールド: なし
-
ファイル拡張子:
11.5. Podman を使用した systemd ユニットファイルの生成 リンクのコピーリンクがクリップボードにコピーされました!
Podman により、systemd
はコンテナープロセスを制御および管理できます。podman generate systemd
コマンドを使用して、既存のコンテナーと Pod の systemd
ユニットファイルを生成できます。生成されたユニットファイルは頻繁に変更され (Podman に対する更新)、podman generate systemd
で最新のユニットファイルの取得を確認できるので、podman generate systemd
の使用を推奨します。
podman v4.6 以降では、Quadlets を使用できるようになりました。Quadlets を使用すると、通常の systemd
ユニットファイルと同様の形式でコンテナーを実行する方法を記述でき、systemd
でコンテナーを実行する際の複雑さを意識せずに済みます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
コンテナー (例:
myubi
) を作成します。podman create --name myubi registry.access.redhat.com/ubi10:latest sleep infinity
$ podman create --name myubi registry.access.redhat.com/ubi10:latest sleep infinity 0280afe98bb75a5c5e713b28de4b7c5cb49f156f1cce4a208f13fee2f75cb453
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナー名または ID を使用して
systemd
ユニットファイルを生成し、それを~/.config/systemd/user/container-myubi.service
ファイルに送ります。podman generate systemd --name myubi > ~/.config/systemd/user/container-myubi.service
$ podman generate systemd --name myubi > ~/.config/systemd/user/container-myubi.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
生成された
systemd
ユニットファイルの内容を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Restart=on-failure
行は再起動ポリシーを設定し、サービスを正常に開始または停止できない場合、またはプロセスがゼロ以外で終了した場合に再起動するようにsystemd
に指示します。 -
ExecStart
行は、コンテナーの開始方法を示しています。 -
ExecStop
行は、コンテナーを停止して削除する方法を示しています。
-
11.6. Podman を使用した systemd ユニットファイルの自動生成 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトで、Podman は既存のコンテナーまたは Pod のユニットファイルを生成します。podman generate systemd --new
を使用すると、より移植性の高い systemd
ユニットファイルを生成できます。--new
フラグでは、コンテナーの作成、起動、削除を行うユニットファイルを生成するように Podman に指示します。
podman v4.6 以降では、Quadlets を使用できるようになりました。Quadlets を使用すると、通常の systemd
ユニットファイルと同様の形式でコンテナーを実行する方法を記述でき、systemd
でコンテナーを実行する際の複雑さを意識せずに済みます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
システムで使用するイメージをプルします。たとえば、
httpd-24
イメージをプルするには、以下を実行します。podman pull registry.access.redhat.com/ubi10/httpd-24
# podman pull registry.access.redhat.com/ubi10/httpd-24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: システムで使用可能なすべてのイメージをリストします。
podman images
# podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi10/httpd-24 latest 8594be0a0b57 2 weeks ago 462 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpd
コンテナーを作成します。podman create --name httpd -p 8080:8080 registry.access.redhat.com/ubi10/httpd-24
# podman create --name httpd -p 8080:8080 registry.access.redhat.com/ubi10/httpd-24 cdb9f981cf143021b1679599d860026b13a77187f75e46cc0eac85293710a4b1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: コンテナーが作成されたことを確認します。
podman ps -a
# podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cdb9f981cf14 registry.access.redhat.com/ubi10/httpd-24:latest /usr/bin/run-http... 5 minutes ago Created 0.0.0.0:8080->8080/tcp httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow httpd
コンテナーのsystemd
ユニットファイルを生成します。podman generate systemd --new --files --name httpd
# podman generate systemd --new --files --name httpd /root/container-httpd.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成された
container-httpd.service
systemd
ユニットファイルの内容を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
--new
オプションを使用して生成されたユニットファイルでは、コンテナーと Pod が存在することを想定していません。したがって、サービスの起動時に (ExecStart
の行を参照)、podman start
コマンドではなく、podman run
コマンドを実行します。たとえば、Generating a systemd unit file using Podman のセクションを参照してください。
podman run
コマンドは、以下のコマンドラインオプションを使用します。-
--conmon-pidfile
オプションは、ホストで実行しているconmon
プロセスのプロセス ID を格納するパスを指します。conmon
プロセスはコンテナーと同じ終了ステータスで終了します。これにより、systemd
は正しいサービスステータスを報告し、必要に応じてコンテナーを再起動できます。 -
--cidfile
オプションは、コンテナー ID を格納するパスを指します。 -
%t
は、ランタイムディレクトリーのルートへのパスです (例:/run/user/$UserID
)。 %n
は、サービスの完全な名前です。/etc/systemd/system
にユニットファイルをコピーして root ユーザーとしてインストールします。cp -Z container-httpd.service /etc/systemd/system
# cp -Z container-httpd.service /etc/systemd/system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow container-httpd.service
を有効にして起動します。systemctl daemon-reload systemctl enable --now container-httpd.service
# systemctl daemon-reload # systemctl enable --now container-httpd.service Created symlink /etc/systemd/system/multi-user.target.wants/container-httpd.service → /etc/systemd/system/container-httpd.service. Created symlink /etc/systemd/system/default.target.wants/container-httpd.service → /etc/systemd/system/container-httpd.service.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
検証
container-httpd.service
のステータスを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.7. systemd を使用した Pod の自動起動 リンクのコピーリンクがクリップボードにコピーされました!
複数のコンテナーを systemd
サービスとして起動できます。systemctl
コマンドは、Pod でだけ使用するようにしてください。コンテナーは Pod サービスと内部の infra-container で管理されているので systemctl
を使用して個別にコンテナーを開始または停止しないでください。
podman v4.6 以降では、Quadlets を使用できるようになりました。Quadlets を使用すると、通常の systemd
ユニットファイルと同様の形式でコンテナーを実行する方法を記述でき、systemd
でコンテナーを実行する際の複雑さを意識せずに済みます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
たとえば、
systemd-pod
などの空の Pod を作成します。podman pod create --name systemd-pod
$ podman pod create --name systemd-pod 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、すべての Pod をリスト表示します。
podman pod ps
$ podman pod ps POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 11d4646ba41b systemd-pod Created 40 seconds ago 1 8a428b257111 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 空の Pod に 2 つのコンテナーを作成します。たとえば、
container0
とcontainer1
をsystemd-pod
に作成するには、以下を実行します。*podman create --pod systemd-pod --name container0 registry.access.redhat.com/ubi*10 top *podman create --pod systemd-pod --name container1 registry.access.redhat.com/ubi*10 top
$ *podman create --pod systemd-pod --name container0 registry.access.redhat.com/ubi*10 top $ *podman create --pod systemd-pod --name container1 registry.access.redhat.com/ubi*10 top
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、関連付けられている全 Pod およびコンテナーをリスト表示します。
podman ps -a --pod
$ podman ps -a --pod CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME 24666f47d9b2 registry.access.redhat.com/ubi10:latest top 3 minutes ago Created container0 3130f724e229 systemd-pod 56eb1bf0cdfe k8s.gcr.io/pause:3.2 4 minutes ago Created 3130f724e229-infra 3130f724e229 systemd-pod 62118d170e43 registry.access.redhat.com/ubi10:latest top 3 seconds ago Created container1 3130f724e229 systemd-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい Pod の
systemd
ユニットファイルを生成します。podman generate systemd --files --name systemd-pod
$ podman generate systemd --files --name systemd-pod /home/user1/pod-systemd-pod.service /home/user1/container-container0.service /home/user1/container-container1.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 3 つの
systemd
ユニットファイルが生成されることに注意してください。1 つはsystemd-pod
Pod 用、2 つはコンテナーcontainer0
およびcontainer1
用です。pod-systemd-pod.service
ユニットファイルを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
[Unit]
セクションのRequires
行は、container-container0.service
とcontainer-container1.service
ユニットファイルの依存関係を定義します。両方のユニットファイルがアクティベートされます。 -
[Service]
セクションのExecStart
行およびExecStop
行はそれぞれ infra-container を開始して停止します。
-
container-container0.service
ユニットファイルを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
[Unit]
セクションのBindsTo
l 行は、pod-systemd-pod.service
ユニットファイルの依存関係を定義します。 -
[Service]
セクションのExecStart
行およびExecStop
行では、それぞれcontainer0
を起動および停止します。
-
container-container1.service
ユニットファイルを表示します。cat container-container1.service
$ cat container-container1.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成されたファイルをすべて
$HOME/.config/systemd/user
にコピーして、root 以外のユーザーとしてインストールします。cp pod-systemd-pod.service container-container0.service container-container1.service $HOME/.config/systemd/user
$ cp pod-systemd-pod.service container-container0.service container-container1.service $HOME/.config/systemd/user
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーのログイン時に、サービスを有効にして開始します。
systemctl enable --user pod-systemd-pod.service
$ systemctl enable --user pod-systemd-pod.service Created symlink /home/user1/.config/systemd/user/multi-user.target.wants/pod-systemd-pod.service → /home/user1/.config/systemd/user/pod-systemd-pod.service. Created symlink /home/user1/.config/systemd/user/default.target.wants/pod-systemd-pod.service → /home/user1/.config/systemd/user/pod-systemd-pod.service.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスは、ユーザーのログアウト時に停止される点に注意してください。
検証
サービスが有効になっているかどうかを確認します。
systemctl is-enabled pod-systemd-pod.service
$ systemctl is-enabled pod-systemd-pod.service enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.8. Podman を使用したコンテナーの自動更新 リンクのコピーリンクがクリップボードにコピーされました!
podman auto-update
コマンドを使用すると、自動更新のポリシーに従ってコンテナーを自動的に更新できます。podman auto-update
コマンドは、コンテナーイメージがレジストリーで更新されるとサービスを更新します。自動更新を使用するには、コンテナーを --label "io.containers.autoupdate=image"
ラベルで作成し、podman generate systemd --new
コマンドによって生成された systemd
ユニットで実行する必要があります。
Podman は、"io.containers.autoupdate"
ラベルが "image"
に設定されている実行中のコンテナーを検索して、コンテナーのレジストリーと通信します。イメージが変更された場合、Podman は対応する systemd
ユニットを再起動して古いコンテナーを停止し、新しいイメージで新しいコンテナーを作成します。そのため、コンテナー、その環境、およびすべての依存関係が再起動されます。
podman v4.6 以降では、Quadlets を使用できるようになりました。Quadlets を使用すると、通常の systemd
ユニットファイルと同様の形式でコンテナーを実行する方法を記述でき、systemd
でコンテナーを実行する際の複雑さを意識せずに済みます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
registry.access.redhat.com/ubi10/ubi-init
イメージをもとに、myubi
コンテナーを起動します。podman run --label "io.containers.autoupdate=image" \ --name myubi -dt registry.access.redhat.com/ubi10/ubi-init top
# podman run --label "io.containers.autoupdate=image" \ --name myubi -dt registry.access.redhat.com/ubi10/ubi-init top bc219740a210455fa27deacc96d50a9e20516492f1417507c13ce1533dbdcd9d
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、実行中または終了したコンテナーをリスト表示します。
podman ps -a
# podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 76465a5e2933 registry.access.redhat.com/10/ubi-init:latest top 24 seconds ago Up 23 seconds ago myubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow myubi
コンテナーのsystemd
ユニットファイルを生成します。podman generate systemd --new --files --name myubi
# podman generate systemd --new --files --name myubi /root/container-myubi.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /usr/lib/systemd/system
にユニットファイルをコピーして root ユーザーとしてインストールします。cp -Z ~/container-myubi.service /usr/lib/systemd/system
# cp -Z ~/container-myubi.service /usr/lib/systemd/system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemd
マネージャー設定をリロードします。systemctl daemon-reload
# systemctl daemon-reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーを起動して、ステータスを確認します。
systemctl start container-myubi.service systemctl status container-myubi.service
# systemctl start container-myubi.service # systemctl status container-myubi.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーを自動更新します。
podman auto-update
# podman auto-update
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.9. systemd を使用したコンテナーの自動更新 リンクのコピーリンクがクリップボードにコピーされました!
Podman を使用したコンテナーの自動更新 セクションで述べたように、
podman auto-update
コマンドを使用してコンテナーを更新できます。カスタムスクリプトに組み込み、必要に応じて呼び出すことができます。コンテナーを自動更新するもう 1 つの方法は、プリインストールされている podman-auto-update.timer
および podman-auto-update.service
systemd
サービスを使用することです。podman-auto-update.timer
は、特定の日付と時刻で自動更新をトリガーするように設定できます。podman-auto-update.service
は、systemctl
コマンドによってさらに開始することも、他の systemd
サービスによる依存関係として使用することもできます。その結果、時間およびイベントに基づく自動更新は、個々のニーズやユースケースを満たすためにさまざまな方法でトリガーできます。
podman v4.6 以降では、Quadlets を使用できるようになりました。Quadlets を使用すると、通常の systemd
ユニットファイルと同様の形式でコンテナーを実行する方法を記述でき、systemd
でコンテナーを実行する際の複雑さを意識せずに済みます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
podman-auto-update.service
ユニットファイルを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman-auto-update.timer
ユニットファイルを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、
podman auto-update
コマンドは、毎日、深夜に起動します。システム起動時に
podman-auto-update.timer
サービスを有効にします。systemctl enable podman-auto-update.timer
# systemctl enable podman-auto-update.timer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemd
サービスを開始します。systemctl start podman-auto-update.timer
# systemctl start podman-auto-update.timer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、すべてのタイマーをリスト表示します。
systemctl list-timers --all
# systemctl list-timers --all NEXT LEFT LAST PASSED UNIT ACTIVATES Wed 2020-12-09 00:00:00 CET 9h left n/a n/a podman-auto-update.timer podman-auto-update.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman-auto-update.timer
がpodman-auto-update.service
を有効化したことが確認できます。
第12章 Podman を使用した OpenShift へのコンテナーの移植 リンクのコピーリンクがクリップボードにコピーされました!
YAML ("YAML Ain’t Markup Language") 形式を使用して、コンテナーおよび Pod の移植可能な記述を生成できます。YAML は、設定データの記述に使用されるテキスト形式です。
YAML ファイルは以下のとおりです。
- 読み取り可能
- 生成が簡単
- 環境間の移植性 (RHEL と OpenShift の間など)
- プログラミング言語間で移植が可能
- 使いやすい (全パラメーターをコマンドラインに追加する必要はない)。
YAML ファイルを使用する理由:
- 必要最小限の入力でオーケストレーションされたコンテナーおよび Pod のローカルオーケストレーションセットを再実行でき、反復型開発に役立ちます。
-
同じコンテナーおよび Pod を別のマシンで実行できます。たとえば、OpenShift 環境でアプリケーションを実行し、アプリケーションが正常に機能していることを確認します。
podman generate kube
コマンドを使用して、Kubernetes YAML ファイルを生成できます。次に、podman play
コマンドを使用して、生成された YAML ファイルを Kubernetes または OpenShift 環境に転送する前に、ローカルシステムで Pod およびコンテナーの作成をテストできます。podman play
コマンドを使用して、OpenShift または Kubernetes 環境で最初に作成された Pod およびコンテナーを再作成することもできます。
podman kube play
コマンドは、Kubernetes YAML 機能のサブセットをサポートします。詳細は、サポートされる YAML フィールドのサポートマトリックス を参照してください。
12.1. Podman を使用した Kubernetes YAML ファイルの生成 リンクのコピーリンクがクリップボードにコピーされました!
1 つのコンテナーで Pod を作成し、podman generate kube
コマンドを使用して Kubernetes YAML ファイルを生成できます。
前提条件
-
container-tools
メタパッケージがインストールされている。 - Pod が作成されている。詳細は、Pod の作成 セクションを参照してください。
手順
関連付けられている全 Pod およびコンテナーをリスト表示します。
podman ps -a --pod
$ podman ps -a --pod CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD 5df5c48fea87 registry.access.redhat.com/ubi10/ubi:latest /bin/bash Less than a second ago Up Less than a second ago myubi 223df6b390b4 3afdcd93de3e k8s.gcr.io/pause:3.1 Less than a second ago Up Less than a second ago 223df6b390b4-infra 223df6b390b4
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod 名または ID を使用して Kubernetes YAML ファイルを生成します。
podman generate kube mypod > mypod.yaml
$ podman generate kube mypod > mypod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman generate
コマンドは、コンテナーに接続されている論理ボリュームマネージャー (LVM) の論理ボリュームまたは物理ボリュームへは反映されないので注意してください。mypod.yaml
ファイルを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.2. OpenShift 環境での Kubernetes YAML ファイルの生成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift 環境では、oc create
コマンドを使用して、アプリケーションを記述する YAML ファイルを生成します。
手順
myapp
アプリケーションの YAML ファイルを生成します。oc create myapp --image=me/myapp:v1 -o yaml --dry-run > myapp.yaml
$ oc create myapp --image=me/myapp:v1 -o yaml --dry-run > myapp.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create
コマンドはmyapp
イメージを作成して実行します。オブジェクトは--dry-run
オプションを使用して出力され、myapp.yaml
出力ファイルにリダイレクトされます。
Kubernetes 環境では、同じフラグを指定して kubectl create
コマンドを使用できます。
12.3. Podman でのコンテナーおよび Pod の起動 リンクのコピーリンクがクリップボードにコピーされました!
生成された YAML ファイルを使用すると、任意の環境でコンテナーおよび Pod を自動的に起動できます。YAML ファイルは、Kubernetes や Openshift など、Podman 以外のツールを使用して生成できます。podman play kube
コマンドを使用すると、YAML 入力ファイルに基づいて Pod およびコンテナーを再作成できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
mypod.yaml
ファイルから Pod およびコンテナーを作成します。podman play kube mypod.yaml
$ podman play kube mypod.yaml Pod: b8c5b99ba846ccff76c3ef257e5761c2d8a5ca4d7ffa3880531aec79c0dacb22 Container: 848179395ebd33dd91d14ffbde7ae273158d9695a081468f487af4e356888ece
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべての Pod をリスト表示します。
podman pod ps
$ podman pod ps POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID b8c5b99ba846 mypod Running 19 seconds ago 2 aa4220eaf4bb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 関連付けられている全 Pod およびコンテナーをリスト表示します。
podman ps -a --pod
$ podman ps -a --pod CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD 848179395ebd registry.access.redhat.com/ubi10/ubi:latest /bin/bash About a minute ago Up About a minute ago myubi b8c5b99ba846 aa4220eaf4bb k8s.gcr.io/pause:3.1 About a minute ago Up About a minute ago b8c5b99ba846-infra b8c5b99ba846
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman ps
コマンドからの Pod ID と、podman pod ps
コマンドからの Pod ID が一致します。
12.4. OpenShift 環境でのコンテナーおよび Pod の起動 リンクのコピーリンクがクリップボードにコピーされました!
oc create
コマンドを使用して、OpenShift 環境で Pod およびコンテナーを作成できます。
手順
OpenShift 環境で YAML ファイルから Pod を作成します。
oc create -f mypod.yaml
$ oc create -f mypod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Kubernetes 環境では、同じフラグを指定して kubectl create
コマンドを使用できます。
12.5. Podman を使用したコンテナーと Pod の手動実行 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順は、Podman を使用して MariaDB データベースと対になる WordPress コンテンツマネジメントシステムを手動で作成する方法を説明します。
次のようなディレクトリーレイアウトがあるとします。
├── mariadb-conf │ ├── Containerfile │ ├── my.cnf
├── mariadb-conf
│ ├── Containerfile
│ ├── my.cnf
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
mariadb-conf/Containerfile
ファイルを表示します。cat mariadb-conf/Containerfile FROM docker.io/library/mariadb COPY my.cnf /etc/mysql/my.cnf
$ cat mariadb-conf/Containerfile FROM docker.io/library/mariadb COPY my.cnf /etc/mysql/my.cnf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mariadb-conf/my.cnf
ファイルを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mariadb-conf/Containerfile
を使用してdocker.io/library/mariadb
イメージをビルドします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、すべてのイメージをリスト表示します。
podman images
$ podman images LIST IMAGES REPOSITORY TAG IMAGE ID CREATED SIZE localhost/mariadb-conf latest b66fa0fa0ef2 57 seconds ago 416 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow wordpresspod
という名前の pod を作成し、コンテナーとホストシステム間のポートマッピングを設定します。podman pod create --name wordpresspod -p 8080:80
$ podman pod create --name wordpresspod -p 8080:80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow wordpresspod
pod の中にmydb
コンテナーを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow wordpresspod
pod の中にmyweb
コンテナーを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、関連付けられている全 Pod およびコンテナーをリスト表示します。
podman ps --pod -a
$ podman ps --pod -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME 9ea56f771915 k8s.gcr.io/pause:3.5 Less than a second ago Up Less than a second ago 0.0.0.0:8080->80/tcp 4b7f054a6f01-infra 4b7f054a6f01 wordpresspod 60e8dbbabac5 localhost/mariadb-conf:latest mariadbd Less than a second ago Up Less than a second ago 0.0.0.0:8080->80/tcp mydb 4b7f054a6f01 wordpresspod 045d3d506e50 docker.io/library/wordpress:latest apache2-foregroun... Less than a second ago Up Less than a second ago 0.0.0.0:8080->80/tcp myweb 4b7f054a6f01 wordpresspod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod が実行されていることを確認します。http://localhost:8080/wp-admin/install.php ページに移動するか、
curl
コマンドを使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.6. Podman を使用した YAML ファイルの生成 リンクのコピーリンクがクリップボードにコピーされました!
Kubernetes の YAML ファイルは、podman generate kube
コマンドを使用して生成できます。
前提条件
-
container-tools
メタパッケージがインストールされている。 -
wordpresspod
という名前の Pod が作成されている。詳細は、Pod の作成 セクションを参照してください。
手順
関連付けられている全 Pod およびコンテナーをリスト表示します。
podman ps --pod -a
$ podman ps --pod -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME 9ea56f771915 k8s.gcr.io/pause:3.5 Less than a second ago Up Less than a second ago 0.0.0.0:8080->80/tcp 4b7f054a6f01-infra 4b7f054a6f01 wordpresspod 60e8dbbabac5 localhost/mariadb-conf:latest mariadbd Less than a second ago Up Less than a second ago 0.0.0.0:8080->80/tcp mydb 4b7f054a6f01 wordpresspod 045d3d506e50 docker.io/library/wordpress:latest apache2-foregroun... Less than a second ago Up Less than a second ago 0.0.0.0:8080->80/tcp myweb 4b7f054a6f01 wordpresspod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod 名または ID を使用して Kubernetes YAML ファイルを生成します。
podman generate kube wordpresspod >> wordpresspod.yaml
$ podman generate kube wordpresspod >> wordpresspod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
wordpresspod.yaml
ファイルを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.7. Podman を使用したコンテナーと Pod の自動実行 リンクのコピーリンクがクリップボードにコピーされました!
次に、podman play kube
コマンドを使用して、生成された YAML ファイルを Kubernetes または OpenShift 環境に転送する前に、ローカルシステムで Pod およびコンテナーの作成をテストできます。
podman play kube
コマンドは、YAML ファイルを使って、1 つのポッド内に複数のコンテナーを含む複数のポッドを自動的にビルドおよび実行することもできます。これは docker compose コマンドと類似した動作です。以下の条件が該当する場合には、自動的にイメージが構築されます。
- YAML ファイルで使用されているイメージと同じ名前のディレクトリーが存在する
- そのディレクトリーには Containerfile が含まれている
前提条件
-
container-tools
メタパッケージがインストールされている。 -
wordpresspod
という名前の Pod が作成されている。詳細は、Podman を使用したコンテナーと Pod の手動実行 を参照してください。 - YAML ファイルが生成されている。詳細は、Podman を使用した YAML ファイルの生成 を参照してください。
最初からやり直す場合は、ローカルに保存されているイメージを削除してください。
podman rmi localhost/mariadb-conf podman rmi docker.io/library/wordpress podman rmi docker.io/library/mysql
$ podman rmi localhost/mariadb-conf $ podman rmi docker.io/library/wordpress $ podman rmi docker.io/library/mysql
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
wordpress.yaml
ファイルを使用して、wordpress Pod を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman play kube
コマンド:-
docker.io/library/mariadb
イメージを元にlocalhost/mariadb-conf:latest
イメージを自動構築します。 -
docker.io/library/wordpress:latest
のイメージをプルします。 -
wordpresspod-mydb
とwordpresspod-myweb
の 2 つのコンテナーが含まれる、wordpresspod
という名前の Pod を作成します。
-
すべてのコンテナーと Pod を表示します。
podman ps --pod -a
$ podman ps --pod -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME a1dbf7b5606c k8s.gcr.io/pause:3.5 3 minutes ago Up 2 minutes ago 0.0.0.0:8080->80/tcp 3e391d091d19-infra 3e391d091d19 wordpresspod 6c59ebe96846 localhost/mariadb-conf:latest mariadbd 2 minutes ago Exited (1) 2 minutes ago 0.0.0.0:8080->80/tcp wordpresspod-mydb 3e391d091d19 wordpresspod 29717878452f docker.io/library/wordpress:latest apache2-foregroun... 2 minutes ago Up 2 minutes ago 0.0.0.0:8080->80/tcp wordpresspod-myweb 3e391d091d19 wordpresspod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod が実行されていることを確認します。http://localhost:8080/wp-admin/install.php ページに移動するか、
curl
コマンドを使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.8. Podman を使用した Pod の自動停止/削除 リンクのコピーリンクがクリップボードにコピーされました!
podman play kube --down
コマンドは、すべての Pod とそのコンテナーを停止して削除します。
ボリュームが使用中の場合には削除されません。
前提条件
-
container-tools
メタパッケージがインストールされている。 -
wordpresspod
という名前の Pod が作成されている。詳細は、Podman を使用したコンテナーと Pod の手動実行 を参照してください。 - YAML ファイルが生成されている。詳細は、Podman を使用した YAML ファイルの生成 を参照してください。
- Pod が実行中である。詳細は、Podman を使用したコンテナーや Pod の自動実行 を参照してください。
手順
wordpresspod.yaml
ファイルで作成された全 Pod とコンテナーを削除します。podman play kube --down wordpresspod.yaml
$ podman play kube --down wordpresspod.yaml Pods stopped: 3e391d091d190756e655219a34de55583eed3ef59470aadd214c1fc48cae92ac Pods removed: 3e391d091d190756e655219a34de55583eed3ef59470aadd214c1fc48cae92ac
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
wordpresspod.yaml
ファイルで作成された全 Pod とコンテナーが削除されたことを確認します。podman ps --pod -a
$ podman ps --pod -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第13章 RHEL システムロールを使用したコンテナーの管理 リンクのコピーリンクがクリップボードにコピーされました!
podman
RHEL システムロールを使用すると、Podman 設定、コンテナー、および Podman コンテナーを実行する systemd
サービスを管理できます。
13.1. podman RHEL システムロールを使用したバインドマウントによるルートレスコンテナーの作成 リンクのコピーリンクがクリップボードにコピーされました!
podman
RHEL システムロールを使用すると、Ansible Playbook を実行してバインドマウントによりルートレスコンテナーを作成し、アプリケーション設定を管理できます。
サンプルの Ansible Playbook は、データベース用と Web アプリケーション用の 2 つの Kubernetes Pod を起動します。データベース Pod の設定は Playbook で指定します。Web アプリケーション Pod は外部 YAML ファイルで定義します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 -
ユーザーとグループ
webapp
が存在し、ホスト上の/etc/subuid
および/etc/subgid
ファイルにリストされている。 -
dbuser
という名前のユーザーとdbgroup
という名前のグループが、すでに作成されている必要がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
run_as_user
とrun_as_group
- コンテナーがルートレスであることを指定します。
kube_file_content
db
という名前の 1 つ目コンテナーを定義する Kubernetes YAML ファイルが含まれています。Kubernetes YAML ファイルは、podman kube generate
コマンドを使用して生成できます。-
db
コンテナーは、quay.io/db/db:stable
コンテナーイメージに基づいています。 -
db
バインドマウントは、ホスト上の/var/lib/db
ディレクトリーをコンテナー内の/var/lib/db
ディレクトリーにマップします。Z
フラグはコンテンツにプライベート非共有ラベルを付けるため、db
コンテナーのみがコンテンツにアクセスできます。
-
kube_file_src: <path>
-
2 つ目のコンテナーを定義します。コントローラーノードの
/path/to/webapp.yml
ファイルの内容は、マネージドノードのkube_file
フィールドにコピーされます。 volumes: <list>
-
1 つ以上のコンテナーで提供するデータのソースを定義する YAML リスト。たとえば、ホスト上のローカルディスク (
hostPath
) またはその他のディスクデバイスなどです。 volumeMounts: <list>
- 個々のコンテナーが特定のボリュームをマウントするマウント先を定義する YAML リスト。
podman_create_host_directories: true
-
ホスト上にディレクトリーを作成します。これにより、
hostPath
ボリュームの kube 仕様を確認し、ホスト上にそれらのディレクトリーを作成するようにロールに指示します。所有権と権限をさらに細かく制御する必要がある場合は、podman_host_directories
を使用します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.podman/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.2. podman RHEL システムロールを使用した Podman ボリュームを持つルートフルコンテナーの作成 リンクのコピーリンクがクリップボードにコピーされました!
podman
RHEL システムロールを使用すると、Ansible Playbook を実行して Podman ボリュームを持つルートフルコンテナーを作成し、アプリケーション設定を管理できます。
サンプルの Ansible Playbook は、ubi8-httpd
という名前の Kubernetes Pod をデプロイします。この Pod は、registry.access.redhat.com/ubi8/httpd-24
イメージから HTTP サーバーコンテナーを実行します。コンテナーの Web コンテンツは、ubi8-html-volume
という名前の永続ボリュームからマウントされます。デフォルトでは、podman
ロールはルートフルコンテナーを作成します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
kube_file_content
db
という名前の 1 つ目コンテナーを定義する Kubernetes YAML ファイルが含まれています。Kubernetes YAML ファイルは、podman kube generate
コマンドを使用して生成できます。-
ubi8-httpd
コンテナーは、registry.access.redhat.com/ubi8/httpd-24
コンテナーイメージに基づいています。 -
ubi8-html-volume
は、ホスト上の/var/www/html
ディレクトリーをコンテナーにマップします。Z
フラグはコンテンツにプライベート非共有ラベルを付けるため、ubi8-httpd
コンテナーのみがコンテンツにアクセスできます。 -
Pod は、マウントパス
/var/www/html
を使用して、ubi8-html-volume
という名前の既存の永続ボリュームをマウントします。
-
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.podman/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.3. podman RHEL システムロールを使用したシークレットを含む Quadlet アプリケーションの作成 リンクのコピーリンクがクリップボードにコピーされました!
podman
RHEL システムロールを使用して、Ansible Playbook を実行することで、シークレットを含む Quadlet アプリケーションを作成できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 -
コンテナー内の Web サーバーが使用する証明書と対応する秘密鍵が、
~/certificate.pem
ファイルと~/key.pem
ファイルに保存されている。
手順
証明書と秘密鍵ファイルの内容を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この情報は後の手順で必要になります。
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
ansible-vault create ~/vault.yml
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow certificate
変数およびkey
変数のすべての行が 2 つのスペースで始まるようにします。- 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この手順では、MySQL データベースと組み合わせた WordPress コンテンツ管理システムを作成します。
podman_quadlet_specs
ロール変数では、Quadlet の一連の設定を定義します。この設定は、特定の方法で連携するコンテナーまたはサービスのグループを参照します。これには次の仕様を含めます。-
Wordpress ネットワークを、
quadlet-demo
ネットワークユニットで定義します。 -
MySQL コンテナーのボリューム設定を、
file_src: quadlet-demo-mysql.volume
フィールドで定義します。 -
template_src: quadlet-demo-mysql.container.j2
フィールドを使用して、MySQL コンテナーの設定を生成します。 -
その後に、2 つの YAML ファイル
file_src: envoy-proxy-configmap.yml
およびfile_src:quadlet-demo.yml
を指定します。.yml は有効な Quadlet ユニットタイプではないため、これらのファイルはコピーされるだけで、Quadlet 仕様としては処理されないことに注意してください。 Wordpress および envoy プロキシーコンテナーと設定を、
file_src: quadlet-demo.kube
フィールドで定義します。kube ユニットは、[Kube]
セクション内の上記の YAML ファイルを、Yaml=quadlet-demo.yml
およびConfigMap=envoy-proxy-configmap.yml
として参照します。Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.podman/README.md
ファイルを参照してください。
-
Wordpress ネットワークを、
Playbook の構文を検証します。
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第14章 RHEL Web コンソールを使用したコンテナーイメージの管理 リンクのコピーリンクがクリップボードにコピーされました!
RHEL Web コンソールの Web ベースのインターフェイスを使用して、コンテナーイメージをプル、プルーニング、または削除できます。
14.1. Web コンソールでのコンテナーイメージの取得 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーイメージをローカルシステムにダウンロードし、それを使用してコンテナーを作成できます。
前提条件
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
cockpit-podman
アドオンをインストールしている。dnf install cockpit-podman
# dnf install cockpit-podman
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
- RHEL 10 Web コンソールにログインします。
- メインメニューで Podman containers をクリックします。
- Images テーブルで、右上隅にあるオーバーフローメニューをクリックし、Download new image を選択します。
- Search for an image ダイアログボックスが表示されます。
- Search for フィールドに、イメージの名前を入力するか、その説明を指定します。
- in ドロップダウンリストで、イメージを取得するレジストリーを選択します。
- オプション: Tag フィールドに、イメージのタグを入力します。
- をクリックします。
検証
- メインメニューで Podman containers をクリックします。新しくダウンロードしたイメージは、Images テーブルで確認できます。
Images テーブルで をクリックすると、ダウンロードしたイメージからコンテナーを作成できます。コンテナーを作成するには、Web コンソールでのコンテナーの作成 の手順 3 - 8 に従います。
14.2. Web コンソールでのコンテナーイメージのプルーニング リンクのコピーリンクがクリップボードにコピーされました!
コンテナーを持たない未使用のイメージをすべて削除できます。
前提条件
- 少なくとも 1 つのコンテナーイメージがプルされます。
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
cockpit-podman
アドオンをインストールしている。dnf install cockpit-podman
# dnf install cockpit-podman
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
- RHEL 10 Web コンソールにログインします。
- メインメニューで Podman containers をクリックします。
- Images テーブルで、右上隅のオーバーフローメニューをクリックし、Prune unused images を選択します。
- イメージのリストを含むポップアップウィンドウが表示されます。Prune をクリックして選択を確定します。
検証
- メインメニューで Podman containers をクリックします。削除されたイメージは、Images テーブルにリストされません。
14.3. Web コンソールでのコンテナーイメージの削除 リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールを使用して、以前にプルしたコンテナーイメージを削除できます。
前提条件
- 少なくとも 1 つのコンテナーイメージがプルされます。
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
cockpit-podman
アドオンをインストールしている。dnf install cockpit-podman
# dnf install cockpit-podman
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
- RHEL 10 Web コンソールにログインします。
- メインメニューで をクリックします。
- Images テーブルで、削除するイメージを選択し、オーバーフローメニューをクリックして Delete を選択します。
- ウィンドウが表示されます。Delete tagged images をクリックして選択を確認します。
検証
- メインメニューで Podman containers クリックします。削除されたコンテナーは、Images テーブルにリストされません。
第15章 RHEL Web コンソールを使用したコンテナーの管理 リンクのコピーリンクがクリップボードにコピーされました!
RHEL Web コンソールを使用して、コンテナーと Pod を管理できます。Web コンソールを使用すると、非 root または root ユーザーとしてコンテナーを作成できます。
- root ユーザーとして、追加の権限とオプションを備えたシステムコンテナーを作成できます。
非 root ユーザーには 2 つのオプションがあります。
- ユーザーコンテナーのみを作成するには、Web コンソールをデフォルトモード (Limited access) で使用できます。
- ユーザーコンテナーとシステムコンテナーの両方を作成するには、Web コンソールページの上部パネルで Administrative access をクリックします。
ルートコンテナーとルートレスコンテナーの違いの詳細は、ルートレスコンテナーに関する特別な考慮事項 を参照してください。
15.1. Web コンソールでのコンテナーチェックポイントの作成 リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールを使用すると、実行中のコンテナーまたは個々のアプリケーションにチェックポイントを設定し、その状態をディスクに保存できます。
チェックポイントの作成は、システムコンテナーでのみ使用できます。
前提条件
- コンテナーが実行されている。
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
cockpit-podman
アドオンをインストールしている。dnf install cockpit-podman
# dnf install cockpit-podman
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
- RHEL 10 Web コンソールにログインします。
- メインメニューで Podman containers をクリックします。
- Containers テーブルで、変更するコンテナーを選択し、オーバーフローアイコンメニューをクリックして Containers を選択します。
オプション: Checkpoint container フォームで、必要なオプションをチェックします。
- すべての一時チェックポイントファイルを保持する: チェックポイント作成中に CRIU によって作成されたすべての一時ログおよび統計ファイルを保持します。さらなるデバッグのためのチェックポイント設定が失敗した場合でも、これらのファイルは削除されません。
- チェックポイントをディスクに書き込んだ後も実行したままにする: チェックポイントを作成した後もコンテナーを停止するのではなく、実行したままにします。
- 確立された TCP 接続の維持のサポート
- をクリックします。
検証
- メインメニューで Podman containers クリックします。チェックポイントを設定したコンテナーを選択し、オーバーフローメニューアイコンをクリックして、Restore オプションがあることを確認します。
15.2. Web コンソールでのコンテナーチェックポイントの復元 リンクのコピーリンクがクリップボードにコピーされました!
保存したデータを使用して、再起動後に、チェックポイントの時点にコンテナーを復元できます。
チェックポイントの作成は、システムコンテナーでのみ使用できます。
前提条件
- コンテナーにチェックポイントが設定されている。
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
cockpit-podman
アドオンをインストールしている。dnf install cockpit-podman
# dnf install cockpit-podman
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
- RHEL 10 Web コンソールにログインします。
- メインメニューで Podman containers をクリックします。
- Containers テーブルで、変更するコンテナーを選択し、オーバーフローメニューをクリックして Restore を選択します。
オプション: Restore container フォームで、必要なオプションを確認します。
- すべての一時チェックポイントファイルを保持する: チェックポイント処理中に CRIU によって作成されたすべての一時ログおよび統計ファイルを保持します。さらなるデバッグのためのチェックポイント設定が失敗した場合でも、これらのファイルは削除されません。
- Restore with established TCP connections
- 静的に設定されている場合は IP アドレスを無視する: コンテナーが IP アドレスで開始された場合、復元されたコンテナーもその IP アドレスの使用を試み、その IP アドレスがすでに使用されている場合は復元は失敗します。このオプションは、コンテナーの作成時に Integration タブでポートマッピングを追加した場合に適用されます。
- 静的に設定されている場合は MAC アドレスを無視する: コンテナーが MAC アドレスで開始された場合、復元されたコンテナーもその MAC アドレスの使用を試み、その MAC アドレスがすでに使用されている場合は復元は失敗します。
- をクリックします。
検証
- メインメニューで Podman containers クリックします。Containers テーブルで復元されたコンテナーが実行されていることがわかります。
15.3. Web コンソールでの Pod の作成 リンクのコピーリンクがクリップボードにコピーされました!
RHEL Web コンソールインターフェイスで Pod を作成できます。
前提条件
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
cockpit-podman
アドオンをインストールしている。dnf install cockpit-podman
# dnf install cockpit-podman
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
- RHEL 10 Web コンソールにログインします。
- メインメニューで Podman containers をクリックします。
- をクリックします。
Create pod フォームに必要な情報を入力します。
- 管理アクセスでのみ使用可能: コンテナーの所有者: システムまたはユーザーを選択します。
- Name フィールドに、コンテナーの名前を入力します。
- IP アドレス、ホストポート、コンテナーポート、プロトコルを入力します。
- ホストパス、コンテナーパスを入力します。書き込み可能チェックボックスをオンにして、書き込み可能なボリュームを作成できます。SELinux ドロップダウンリストで、次のオプションのいずれかを選択します: No Label、Shared、または Private。
- をクリックします。
検証
- メインメニューで Podman containers をクリックします。新しく作成された Pod は Containers テーブルで確認できます。
15.4. Web コンソールの Pod 内にコンテナーを作成する リンクのコピーリンクがクリップボードにコピーされました!
Pod 内にコンテナーを作成できます。
前提条件
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
cockpit-podman
アドオンをインストールしている。dnf install cockpit-podman
# dnf install cockpit-podman
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
- RHEL 10 Web コンソールにログインします。
- メインメニューで Podman containers をクリックします。
- をクリックします。
- Name フィールドに、コンテナーの名前を入力します。
Details タブに必要な情報を入力します。
- 管理アクセスでのみ使用可能: コンテナーの所有者: システムまたはユーザーを選択します。
Image ドロップダウンリストで、選択したレジストリー内のコンテナーイメージを選択または検索します。
- オプション: 最新のコンテナーイメージをプルするには、Pull latest image チェックボックスをオンにします。
Command フィールドはコマンドを指定します。必要に応じて、デフォルトのコマンドを変更できます。
- オプション: ターミナルを使用してコンテナーを実行するには、With terminal チェックボックスをオンにします。
- Memory limit フィールドでは、コンテナーのメモリー制限を指定します。デフォルトのメモリー制限を変更するには、チェックボックスをオンにして制限を指定します。
- システムコンテナーでのみ使用可能: CPU シェアフィールド で、相対的な CPU 時間量を指定します。デフォルト値は 1024 です。デフォルト値を変更するには、チェックボックスをオンにします。
システムコンテナーでのみ使用可能: Restart policy ドロップダウンメニューで、次のオプションのいずれかを選択します。
- No (デフォルト値): アクションはありません。
- On Failure: 失敗時にコンテナーを再起動します。
- Always: コンテナーの終了時またはシステム起動後にコンテナーを再起動します。
Integration タブに必要な情報を入力します。
- IP アドレス、ホストポート、コンテナーポート、および プロトコル を入力します。
- ホストパス、コンテナーパス を入力します。Writable オプションのチェックボックスをオンにして、書き込み可能なボリュームを作成できます。SELinux ドロップダウンリストで、No Label、Shared、または Private のいずれかのオプションを選択します。
- Key と Value を入力します。
Health check タブに必要な情報を入力します。
- Command フィールドに、ヘルスチェックコマンドを入力します。
ヘルスチェックオプションを指定します。
- Interval (デフォルトは 30 秒)
- Timeout (デフォルトは 30 秒)
- Start period
- Retries (デフォルトは 3)
When unhealthy: 次のいずれかのオプションを選択します。
- No action (デフォルト): アクションはありません。
- Restart: コンテナーを再起動します。
- Stop: コンテナーを停止します。
- Force stop: コンテナーを強制的に停止します。コンテナーが終了するまで待ちません。
コンテナーの所有者は Pod の所有者と同じです。
Pod では、コンテナーの検査、コンテナーのステータスの変更、コンテナーのコミット、またはコンテナーの削除を行うことができます。
検証
- メインメニューで Podman containers をクリックします。Pod 内の Containers テーブルの下に、新しく作成されたコンテナーが表示されます。
第16章 コンテナーでの Skopeo、Buildah、および Podman の実行 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーで Skopeo、Buildah、および Podman を実行できます。
Skopeo を使用すると、すべてのレイヤーでイメージ全体をダウンロードすることなく、リモートレジストリーのイメージを検査できます。また、Skopeo を使用して、イメージのコピー、イメージの署名、イメージの同期、さまざまな形式およびレイヤー圧縮でのイメージ変換を行うこともできます。
Buildah を使用すると、OCI コンテナーイメージのビルドが容易になります。Buildah を使用すると、作業コンテナーをゼロから作成することも、イメージを開始点として使用して作成することも可能です。作業コンテナーからか、Containerfile
の指示を使用して、イメージを作成できます。作業コンテナーの root ファイルシステムをマウントおよびアンマウントできます。
Podman を使用すると、コンテナーおよびイメージ、それらのコンテナーにマウントされたボリューム、およびコンテナーのグループから作成された Pod を管理できます。Podman は、コンテナーライフサイクル管理の libpod
ライブラリーに基づいています。libpod
ライブラリーは、コンテナー、Pod、コンテナーイメージ、およびボリュームを管理するための API を提供します。
コンテナーで Buildah、Skopeo、および Podman を実行する理由:
CI/CD システム:
- Podman および Skopeo: Kubernetes で CI/CD システムを実行するか、OpenShift を使用してコンテナーイメージをビルドし、これらのイメージを異なるコンテナーレジストリーに配布できます。Skopeo を Kubernetes ワークフローに統合するには、Skopeo をコンテナーで実行する必要があります。
-
Buildah: 常にイメージをビルドする Kubernetes または OpenShift CI/CD システムに OCI/コンテナーイメージをビルドします。以前は、Docker ソケットを使用してコンテナーエンジンに接続し、
docker build
コマンドを実行していました。これは、パスワードなしにシステムに root アクセスを提供するのと同じで、安全ではありません。このため、Red Hat はコンテナーで Buildah を使用することを推奨します。
各種バージョン:
- All: ホストで古いオペレーティングシステムを実行していても、最新バージョンの Skopeo、Buildah、または Podman を実行します。このソリューションは、コンテナーでコンテナーツールを実行します。たとえば、これは、最新版をネイティブで使用できない Red Hat Enterprise Linux 7 コンテナーホストで、Red Hat Enterprise Linux 8 で提供される最新版のコンテナーツールを実行するのに役立ちます。
HPC 環境:
- All: HPC 環境における一般的な制限として、root ユーザー以外のユーザーはホストにパッケージをインストールできません。コンテナーで Skopeo、Buildah、または Podman を実行すると、root 以外のユーザーとしてこの特定のタスクを実行することができます。
16.1. コンテナーでの Skopeo の実行 リンクのコピーリンクがクリップボードにコピーされました!
Skopeo を使用してリモートコンテナーイメージを検査できます。コンテナーで Skopeo を実行すると、コンテナーの root ファイルシステムがホストの root ファイルシステムから分離されることを意味します。ホストとコンテナー間でファイルを共有またはコピーするには、ファイルとディレクトリーをマウントする必要があります。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
registry.redhat.io レジストリーにログインします。
podman login registry.redhat.io
$ podman login registry.redhat.io Username: myuser@mycompany.com Password: <password> Login Succeeded!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow registry.redhat.io/rhel10/skopeo
コンテナーイメージを取得します。podman pull registry.redhat.io/rhel10/skopeo
$ podman pull registry.redhat.io/rhel10/skopeo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Skopeo を使用して、リモートコンテナーイメージ
registry.access.redhat.com/ubi10/ubi
を検査します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow --rm
オプションは、コンテナーの終了後にregistry.redhat.io/rhel10/skopeo
イメージを削除します。
16.2. 認証情報を使用したコンテナーでの Skopeo の実行 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーレジストリーを使用する場合には、データへのアクセスや変更に認証が必要です。Skopeo は、さまざまな認証情報の指定方法に対応します。
このアプローチでは、--cred USERNAME[:PASSWORD]
オプションを使用してコマンドラインで認証情報を指定できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
ロックされたレジストリーに対して Skopeo を使用してリモートコンテナーイメージを検証します。
podman run --rm registry.redhat.io/rhel10/skopeo inspect --creds $USER:$PASSWORD docker://$IMAGE
$ podman run --rm registry.redhat.io/rhel10/skopeo inspect --creds $USER:$PASSWORD docker://$IMAGE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.3. authfile を使用したコンテナーでの Skopeo の実行 リンクのコピーリンクがクリップボードにコピーされました!
認証ファイル (authfile) を使用して認証情報を指定できます。skopeo login
コマンドは、特定のレジストリーにログインし、認証トークンを authfile に保存します。authfiles を使用する利点は、認証情報を繰り返し入力する必要がないことです。
同じホストで実行する場合、Skopeo、Buildah、Podman などのすべてのコンテナーツールで同じ authfile を共有します。コンテナーで Skopeo を実行する場合は、コンテナーに authfile をボリュームマウントしてホスト上で authfile を共有するか、コンテナー内で再認証する必要があります。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
ロックされたレジストリーに対して Skopeo を使用してリモートコンテナーイメージを検証します。
podman run --rm -v $AUTHFILE:/auth.json registry.redhat.io/rhel10/skopeo inspect docker://$IMAGE
$ podman run --rm -v $AUTHFILE:/auth.json registry.redhat.io/rhel10/skopeo inspect docker://$IMAGE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -v $AUTHFILE:/auth.json
オプションの volume-mounts は、コンテナー内の /auth.json に authfile をマウントします。Skopeo は、ホストの authfile の認証トークンにアクセスでき、レジストリーにセキュアにアクセスできるようになります。
その他の Skopeo コマンドは、以下の例のように機能します。
-
skopeo-copy
コマンドで--source-creds
および--dest-creds
オプションを使用して、ソースおよび宛先のイメージに、コマンドラインで認証情報を指定します。また、/auth.json
の authfile も読み取ります。 -
ソースイメージおよび宛先イメージに個別の authfile を指定する場合は、
--source-authfile
オプションおよび--dest-authfile
オプションを使用し、ホストからコンテナーにこれらの authfile をボリュームマウントします。
16.4. ホストに対するコンテナーイメージのコピー リンクのコピーリンクがクリップボードにコピーされました!
Skopeo、Buildah、Podman は同じローカルコンテナーイメージストレージを共有します。ホストコンテナーストレージとの間でコンテナーをコピーする場合は、これを Skopeo コンテナーにマウントする必要があります。
ホストコンテナーストレージへのパスは、root (/var/lib/containers/storage
) と root 以外のユーザー ($HOME/.local/share/containers/storage
) の間で異なります。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
registry.access.redhat.com/ubi10/ubi
イメージをローカルストレージにコピーします。podman run --privileged --rm -v $HOME/.local/share/containers/storage:/var/lib/containers/storage \ registry.redhat.io/rhel10/skopeo skopeo copy \ docker://registry.access.redhat.com/ubi10/ubi containers-storage:registry.access.redhat.com/ubi10/ubi
$ podman run --privileged --rm -v $HOME/.local/share/containers/storage:/var/lib/containers/storage \ registry.redhat.io/rhel10/skopeo skopeo copy \ docker://registry.access.redhat.com/ubi10/ubi containers-storage:registry.access.redhat.com/ubi10/ubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
--privileged
オプションは、すべてのセキュリティーメカニズムを無効にします。Red Hat では、このオプションは信頼できる環境でのみ使用することを推奨します。 セキュリティーメカニズムを無効にするには、イメージを tarball またはその他のパスベースのイメージトランスポートにエクスポートして Skopeo コンテナーにマウントします。
-
$ podman save --format oci-archive -o oci.tar $IMAGE
-
$ podman run --rm -v oci.tar:/oci.tar registry.redhat.io/rhel10/skopeo copy oci-archive:/oci.tar $DESTINATION
-
-
オプション: ローカルストレージ内のイメージをリスト表示します。
podman images
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi10/ubi latest ecbc6f53bba0 8 weeks ago 211 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.5. コンテナーでの Buildah の実行 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、コンテナーで Buildah を実行し、イメージを基に作業コンテナーを作成する方法を説明します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
registry.redhat.io レジストリーにログインします。
podman login registry.redhat.io
$ podman login registry.redhat.io Username: myuser@mycompany.com Password: <password> Login Succeeded!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow registry.redhat.io/rhel10/buildah
イメージをプルして実行します。podman run --rm --device /dev/fuse -it \ registry.redhat.io/rhel10/buildah /bin/bash
# podman run --rm --device /dev/fuse -it \ registry.redhat.io/rhel10/buildah /bin/bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
--rm
オプションは、コンテナーの終了後にregistry.redhat.io/rhel10/buildah
イメージを削除します。 -
--device
オプションは、ホストデバイスをコンテナーに追加します。 -
sys_chroot
- 別のルートディレクトリーに変更する機能。コンテナーのデフォルト機能には含まれていません。
-
registry.access.redhat.com/ubi10/
イメージを使用して、新しいコンテナーを作成します。buildah from registry.access.redhat.com/ubi10/
# buildah from registry.access.redhat.com/ubi10/ ... ubi10/-working-container
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ubi10/-working-container
コンテナー内でls /
コマンドを実行します。buildah run --isolation=chroot ubi10/-working-container ls /
# buildah run --isolation=chroot ubi10/-working-container ls / bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、ローカルストレージ内の全イメージをリスト表示します。
buildah images
# buildah images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi10/ latest ecbc6f53bba0 5 weeks ago 211 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、作業用コンテナーとそのベースイメージをリスト表示します。
buildah containers
# buildah containers CONTAINER ID BUILDER IMAGE ID IMAGE NAME CONTAINER NAME 0aaba7192762 * ecbc6f53bba0 registry.access.redhat.com/ub... ubi10/-working-container
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
registry.access.redhat.com/ubi10/
イメージをregistry.example.com
にあるローカルレジストリーにプッシュします。buildah push ecbc6f53bba0 registry.example.com:5000/ubi10/ubi
# buildah push ecbc6f53bba0 registry.example.com:5000/ubi10/ubi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.6. 特権および非特権 Podman コンテナー リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Podman コンテナーは権限がないため、たとえばホスト上のオペレーティングシステムの一部を変更することはできません。これは、デフォルトでは、コンテナーはデバイスへの限定的なアクセスしか許可されないためです。
以下は、特権コンテナーの重要なプロパティーのリストです。特権コンテナーは、podman run --privileged <image_name>
コマンドを使用して実行できます。
- 特権コンテナーには、コンテナーを起動するユーザーと同じデバイスへのアクセス権限が付与されます。
- 特権コンテナーは、コンテナーをホストから分離するセキュリティー機能を無効にします。削除された機能、制限されたデバイス、読み取り専用マウントポイント、Apparmor/SELinux の分離、および Seccomp フィルターは、すべて無効にされます。
- 特権コンテナーには、それらを起動したアカウント以上の特権を割り当てることはできません。
16.7. 拡張された権限での Podman の実行 リンクのコピーリンクがクリップボードにコピーされました!
ルートレス環境でワークロードを実行できない場合は、これらのワークロードを root ユーザーとして実行する必要があります。拡張された権限でのコンテナーの実行は、慎重に実施する必要があります。すべてのセキュリティー機能が無効になるためです。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
Podman コンテナー内で Podman コンテナーを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
registry.access.redhat.com/ubi10/podman
イメージに基づいて、privileged_podman
という名前の外部コンテナーを実行します。 -
--privileged
オプションは、コンテナーをホストから分離するセキュリティー機能を無効にします。 -
podman run ubi10 echo hello
コマンドを実行して、ubi10
イメージに基づいて内部コンテナーを作成します。 -
ubi10
の短縮イメージ名がエイリアスとして解決されていることに注意してください。これにより、registry.access.redhat.com/ubi10:latest
i イメージがプルされます。
検証
すべてのコンテナーをリスト表示します。
podman ps -a
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 52537876caf4 registry.access.redhat.com/ubi10/podman podman run ubi10 e... 30 seconds ago Exited (0) 13 seconds ago privileged_podman
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.8. 少ない権限での Podman の実行 リンクのコピーリンクがクリップボードにコピーされました!
--privileged
オプションを指定せずに、ネストされた 2 つの Podman コンテナーを実行できます。--privileged
オプションを指定せずにコンテナーを実行することは、より安全なオプションです。
これは、可能な限り安全な方法で異なるバージョンの Podman を試す場合に役立ちます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
ネストされた 2 つのコンテナーを実行します。
podman run --name=unprivileged_podman --security-opt label=disable \ --user podman --device /dev/fuse \ registry.access.redhat.com/ubi10/podman \ podman run ubi10 echo hello
$ podman run --name=unprivileged_podman --security-opt label=disable \ --user podman --device /dev/fuse \ registry.access.redhat.com/ubi10/podman \ podman run ubi10 echo hello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
registry.access.redhat.com/ubi10/podman
イメージに基づいて、unprivileged_podman
という名前の外部コンテナーを実行します。 -
--security-opt label=disable
オプションは、ホスト Podman での SELinux の分離を無効にします。SELinux では、コンテナー化されたプロセスは、コンテナー内で実行するために必要なすべてのファイルシステムをマウントすることはできません。 -
--user podman
オプションを指定すると、自動的に、外部コンテナー内の Podman がユーザーの namespace 内で実行されるようになります。 -
--device /dev/fuse
オプションは、コンテナー内のfuse-overlayfs
パッケージを使用します。このオプションは/dev/fuse
を外部コンテナーに追加し、コンテナー内の Podman がこれを使用できるようにします。 -
podman run ubi10 echo hello
コマンドを実行して、ubi10
イメージに基づいて内部コンテナーを作成します。 -
ubi10 の短縮イメージ名がエイリアスとして解決されていることに注意してください。これにより、
registry.access.redhat.com/ubi10:latest
i イメージがプルされます。
検証
すべてのコンテナーをリスト表示します。
podman ps -a
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a47b26290f43 podman run ubi10 e... 30 seconds ago Exited (0) 13 seconds ago unprivileged_podman
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.9. Podman コンテナー内でのコンテナーのビルド リンクのコピーリンクがクリップボードにコピーされました!
Podman を使用してコンテナー内でコンテナーを実行できます。この例では、Podman を使用してコンテナーから別のコンテナーをビルドし、実行する方法を示しています。コンテナーは、簡単なテキストベースのゲーム "Moon-buggy" を実行します。
前提条件
-
container-tools
メタパッケージがインストールされている。 registry.redhat.io レジストリーにログインしている。
podman login registry.redhat.io
# podman login registry.redhat.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
registry.redhat.io/rhel10/podman
イメージをベースとするコンテナーを実行します。podman run --privileged --name podman_container -it \ registry.redhat.io/rhel10/podman /bin/bash
# podman run --privileged --name podman_container -it \ registry.redhat.io/rhel10/podman /bin/bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
registry.redhat.io/rhel10/podman
イメージに基づいて、podman_container
という名前の外部コンテナーを実行します。 -
--it
オプションは、コンテナー内で対話式 bash シェルを実行します。 -
--privileged
オプションは、コンテナーをホストから分離するセキュリティー機能を無効にします。
-
podman_container
コンテナー内にContainerfile
を作成します。vi Containerfile
# vi Containerfile FROM registry.access.redhat.com/ubi10/ubi RUN dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm RUN dnf -y install moon-buggy && dnf clean all CMD ["/usr/bin/moon-buggy"]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Containerfile
のコマンドで以下の build コマンドが実行されます。-
registry.access.redhat.com/ubi10/ubi
イメージからコンテナーをビルドします。 -
epel-release-latest-8.noarch.rpm
パッケージをインストールします。 -
moon-buggy
パッケージをインストールします。 - コンテナーコマンドを設定します。
-
Containerfile
を使用してmoon-buggy
という名前の新しいコンテナーイメージをビルドします。podman build -t moon-buggy .
# podman build -t moon-buggy .
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、すべてのイメージをリスト表示します。
podman images
# podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/moon-buggy latest c97c58abb564 13 seconds ago 1.67 GB registry.access.redhat.com/ubi10/ubi latest 4199acc83c6a 132seconds ago 213 MB
Copy to Clipboard Copied! Toggle word wrap Toggle overflow moon-buggy
コンテナーに基づいて新しいコンテナーを実行します。podman run -it --name moon moon-buggy
# podman run -it --name moon moon-buggy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
moon-buggy
イメージをタグ付けします。podman tag moon-buggy registry.example.com/moon-buggy
# podman tag moon-buggy registry.example.com/moon-buggy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
moon-buggy
イメージをレジストリーにプッシュします。podman push registry.example.com/moon-buggy
# podman push registry.example.com/moon-buggy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第17章 コンテナーの監視 リンクのコピーリンクがクリップボードにコピーされました!
Podman コマンドを使用して Podman 環境を管理します。これにより、システムおよび Pod 情報を表示し、Podman イベントをモニターすることで、コンテナーの正常性を判別できます。
17.1. コンテナーでヘルスチェックを使用する リンクのコピーリンクがクリップボードにコピーされました!
ヘルスチェックを使用して、コンテナー内で実行されているプロセスの状態または準備ができているかどうかを判断できます。
ヘルスチェックが成功すると、コンテナーは "正常" とマークされます。そうでなければ、それは "正常ではありません"。podman exec
コマンドを実行して終了コードを調べることで、ヘルスチェックを比較できます。ゼロの終了値は、コンテナーが "正常" であることを意味します。
Containerfile
で HEALTHCHECK
命令を使用してイメージをビルドするとき、またはコマンドラインでコンテナーを作成するときに、ヘルスチェックを設定できます。podman inspect
または podman ps
コマンドを使用して、コンテナーのヘルスチェックのステータスを表示できます。
ヘルスチェックは、次の 6 つの基本コンポーネントで構成されます。
- コマンド
- Retries
- Interval
- Start-period
- Timeout
- コンテナー回収
ヘルスチェックコンポーネントの説明は次のとおりです。
- コマンド (
--health-cmd
オプション) - Podman は、ターゲットコンテナー内でコマンドを実行して終了コードを待ちます。
他の 5 つのコンポーネントは、ヘルスチェックのスケジューリングに関連しており、オプションです。
- 再試行 (
--health-retries
オプション) - "正常でない" とマークするまでに、ヘルスチェックで連続して不合格とならなければならないか、その回数を定義します。healthcheck に成功すると、再試行数がリセットされます。
- 間隔 (
--health-interval
オプション) - 次回に healthcheck コマンドを実行するまでの時間を指定します。間隔が短いと、システムでの healthcheck の実行時間が長くなる点に注意してください。間隔が長いと、タイムアウトの検出が困難になります。
- 開始期間 (
--health-start-period
オプション) - コンテナーを起動してから healthcheck の不合格を無視するまでの時間を指定します。
- タイムアウト (
--health-timeout
オプション) - healthcheck の完了前に不合格とみなされるまでの期間を指定します。
Retries、Interval、および Start-period コンポーネントの値は、“30s” や “1h15m” などの期間です。有効な時間単位は、"ns"、"us" または "µs"、"ms"、"s"、"m"、および "h"。
- コンテナーの復旧 (
--health-on-failure
オプション) コンテナーのステータスが異常な場合に実行するアクションを決定します。アプリケーションに障害が発生すると、Podman は自動的にアプリケーションを再起動して堅牢性を提供します。
--health-on-failure
オプションは、次の 4 つのアクションをサポートします。-
none
: アクションを実行しません。これがデフォルトのアクションです。 -
kill
: コンテナーを強制終了します。 -
restart
: コンテナーを再起動します。 stop
: コンテナーを停止します。注記--health-on-failure
オプションは、Podman バージョン 4.2 以降で使用できます。
-
restart
アクションを --restart
オプションと組み合わせないでください。systemd
ユニット内で実行する場合は、代わりに kill
または stop
アクションを使用して、systemd
再起動ポリシーを利用することを検討してください。
コンテナー内でヘルスチェックが実行されます。ヘルスチェックは、サービスのヘルス状態がどのようなものかを把握しており、ヘルスチェックの成功と失敗を区別できる場合にのみ意味があります。
17.2. コマンドラインを使用してヘルスチェックを実行する リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインでコンテナーを作成するときに、ヘルスチェックを設定できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
ヘルスチェックを定義します。
podman run -dt --name=hc-container -p 8080:8080 --health-cmd='curl http://localhost:8080 || exit 1' --health-interval=0 registry.access.redhat.com/ubi8/httpd-24
$ podman run -dt --name=hc-container -p 8080:8080 --health-cmd='curl http://localhost:8080 || exit 1' --health-interval=0 registry.access.redhat.com/ubi8/httpd-24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
--health-cmd
オプションは、コンテナーの healthcheck コマンドを設定します。 -
healthcheck を手動で実行するには、
--health-interval=0
オプションで 0 の値を指定します。
-
hc-container
コンテナーのヘルスステータスを確認します。podman inspect
コマンドの使用:podman inspect --format='{{json .State.Health.Status}}' hc-container
$ podman inspect --format='{{json .State.Health.Status}}' hc-container healthy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman ps
コマンドの使用:podman ps
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a680c6919fe localhost/hc-container:latest /usr/bin/run-http... 2 minutes ago Up 2 minutes (healthy) hc-container
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman healthcheck run
コマンドを使用します。podman healthcheck run hc-container
$ podman healthcheck run hc-container healthy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
17.3. Containerfile を使用してヘルスチェックを実行する リンクのコピーリンクがクリップボードにコピーされました!
Containerfile
で HEALTHCHECK
命令を使用してヘルスチェックを設定できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
Containerfile
を作成します。cat Containerfile FROM registry.access.redhat.com/ubi8/httpd-24 EXPOSE 8080 HEALTHCHECK CMD curl http://localhost:8080 || exit 1
$ cat Containerfile FROM registry.access.redhat.com/ubi8/httpd-24 EXPOSE 8080 HEALTHCHECK CMD curl http://localhost:8080 || exit 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記HEALTHCHECK
命令は、docker
イメージ形式でのみサポートされています。oci
イメージ形式の場合、命令は無視されます。コンテナーをビルドし、イメージ名を追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーを実行します。
podman run -dt --name=hc-container localhost/hc-container
$ podman run -dt --name=hc-container localhost/hc-container
Copy to Clipboard Copied! Toggle word wrap Toggle overflow hc-container
コンテナーのヘルスステータスを確認します。podman inspect
コマンドの使用:podman inspect --format='{{json .State.Health.Status}}' hc-container
$ podman inspect --format='{{json .State.Health.Status}}' hc-container healthy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman ps
コマンドの使用:podman ps
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a680c6919fe localhost/hc-container:latest /usr/bin/run-http... 2 minutes ago Up 2 minutes (healthy) hc-container
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman healthcheck run
コマンドを使用します。podman healthcheck run hc-container
$ podman healthcheck run hc-container healthy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
17.4. Podman システム情報の表示 リンクのコピーリンクがクリップボードにコピーされました!
podman system
コマンドを使用すると、システム情報を表示することで Podman システムを管理できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
Podman システム情報を表示します。
Podman のディスク使用量を表示するには、以下を入力します。
podman system df
$ podman system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 3 2 1.085GB 233.4MB (0%) Containers 2 0 28.17kB 28.17kB (100%) Local Volumes 3 0 0B 0B (0%)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 領域の使用状況に関する詳細情報を表示するには、次のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Podman のホスト、現在のストレージ統計、およびビルドに関する情報を表示するには、以下を入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 未使用のコンテナー、イメージ、およびボリュームデータをすべて削除するには、次のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
podman system prune
コマンドは、未使用のコンテナー (関連付けられていないコンテナーおよび参照されていないコンテナー両方)、Pod、ローカルストレージのボリューム (任意) をすべて削除します。 -
--all
オプションを使用して、未使用のイメージをすべて削除します。未使用のイメージとは、ベースとするコンテナーのないイメージや、関連付けられていないイメージを指します。 -
ボリュームをプルーニングするには、
--volume
オプションを使用します。デフォルトでは、現在ボリュームを使用するコンテナーがない場合に、重要なデータが削除されないようにボリュームは削除されません。
-
17.5. Podman イベントタイプ リンクのコピーリンクがクリップボードにコピーされました!
Podman で発生するイベントをモニターできます。イベントタイプが複数存在し、イベントタイプごとに異なるステータスを報告します。
コンテナー イベントタイプは以下のステータスを報告します。
- attach
- checkpoint
- cleanup
- commit
- create
- exec
- export
- import
- init
- kill
- mount
- pause
- prune
- remove
- restart
- restore
- start
- stop
- sync
- unmount
- unpause
Pod イベントタイプは以下のステータスを報告します。
- create
- kill
- pause
- remove
- start
- stop
- unpause
image イベントタイプは以下のステータスを報告します。
- prune
- push
- pull
- save
- remove
- tag
- untag
system タイプは、以下のステータスを報告します。
- refresh
- renumber
volume タイプは、以下のステータスを報告します。
- create
- prune
- remove
17.6. Podman イベントのモニタリング リンクのコピーリンクがクリップボードにコピーされました!
podman events
コマンドを使用して、Podman で発生するイベントを監視および出力できます。各イベントには、タイムスタンプ、タイプ、ステータス、名前 (該当する場合)、およびイメージ (該当する場合) が含まれます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
myubi
コンテナーを実行します。podman run -q --rm --name=myubi registry.access.redhat.com/ubi8/ubi:latest
$ podman run -q --rm --name=myubi registry.access.redhat.com/ubi8/ubi:latest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Podman イベントを表示します。
すべての Podman イベントを表示するには、次のように入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --stream=false
オプションを使用すると、最後の既知のイベントを読み取るときにpodman events
コマンドが確実に終了します。podman run
コマンドを入力すると、発生したいくつかのイベントが表示されます。-
新しいコンテナーを作成する際は、
container create
。 -
コンテナーイメージがローカルストレージに存在しない場合、イメージをプルする際は、
image pull
。 -
ランタイムでコンテナーを初期化し、ネットワークを設定する際は、
container init
。 -
コンテナーを起動する際は、
container start
。 -
コンテナーのターミナルにアタッチする際は、
container attach
。これは、コンテナーがフォアグラウンドで実行されるためです。 -
コンテナーが終了すると、
container died
が発行されます。 -
--rm
フラグは、コンテナーの終了後、コンテナーの削除に使用されたため、container remove
。
-
新しいコンテナーを作成する際は、
また、
journalctl
コマンドを使用して Podman イベントを表示することもできます。journalctl --user -r SYSLOG_IDENTIFIER=podman
$ journalctl --user -r SYSLOG_IDENTIFIER=podman Mar 08 14:27:20 fedora podman[129324]: 2023-03-08 14:27:20.913786892 +0100 CET m=+0.066920979 container remove ... Mar 08 14:27:20 fedora podman[129289]: 2023-03-08 14:27:20.696167362 +0100 CET m=+0.079089208 container create d4748226a2bcd271b1bc4b9f88b54e8271c13ffea9b30529968291c62d72f>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Podman の作成イベントのみを表示するには、以下を入力します。
podman events --filter event=create
$ podman events --filter event=create 2023-03-08 14:27:20.696167362 +0100 CET container create d4748226a2bcd271b1bc4b9f88b54e8271c13ffea9b30529968291c62d72fe09 (image=registry.access.redhat.com/ubi8/ubi:latest, name=myubi,...)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow また、
journalctl
コマンドを使用して Podman 作成イベントを表示することもできます。journalctl --user -r PODMAN_EVENT=create
$ journalctl --user -r PODMAN_EVENT=create Mar 08 14:27:20 fedora podman[129289]: 2023-03-08 14:27:20.696167362 +0100 CET m=+0.079089208 container create d4748226a2bcd271b1bc4b9f88b54e8271c13ffea9b30529968291c62d72f>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
17.7. Podman イベントを使用した監査 リンクのコピーリンクがクリップボードにコピーされました!
以前は、イベントを正しく解釈するには、イベントをイベントに接続する必要がありました。たとえば、どのイメージが使用されたかを知るには、container-create
イベントを image-pull
イベントにリンクする必要がありました。また、container-create
イベントには、セキュリティー設定、ボリューム、マウントなどのすべてのデータが含まれているわけではありません。
Podman v4.4 以降、コンテナーに関するすべての関連情報を 1 つのイベントと journald
エントリーから直接収集できるようになりました。データは podman container inspect
コマンドからのものと同じ JSON 形式であり、コンテナーのすべての設定とセキュリティー設定が含まれます。監査目的でコンテナー検査データを添付するように Podman を設定できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
~/.config/containers/containers.conf
ファイルを変更し、events_container_create_inspect_data=true
オプションを[engine]
セクションに追加します。cat ~/.config/containers/containers.conf [engine] events_container_create_inspect_data=true
$ cat ~/.config/containers/containers.conf [engine] events_container_create_inspect_data=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow システム全体の設定の場合は、
/etc/containers/containers.conf
または/usr/share/container/containers.conf
ファイルを変更します。コンテナーを作成します。
podman create registry.access.redhat.com/ubi8/ubi:latest
$ podman create registry.access.redhat.com/ubi8/ubi:latest 19524fe3c145df32d4f0c9af83e7964e4fb79fc4c397c514192d9d7620a36cd3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Podman イベントを表示します。
podman events
コマンドを使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
--format "{{.ContainerInspectData}}"
オプションは検査データを表示します。 -
jq ".Config.CreateCommand"
は、JSON データをより読みやすい形式に変換し、podman create
コマンドのパラメーターを表示します。
-
journalctl
コマンドを使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman events
とjournalctl
コマンドの出力データは同じです。
第18章 開発とトラブルシューティングに Toolbx を使用する リンクのコピーリンクがクリップボードにコピーされました!
システムにソフトウェアをインストールすると、システムの動作が変更したり、不要になったファイルやディレクトリーが残されたりするなど、一定のリスクが生じます。ベースオペレーティングシステムに影響を与えることなく、お気に入りの開発およびデバッグツール、エディター、ソフトウェア開発キット (SDK) を、完全に変更可能な Toolbx コンテナーにインストールすることで、これらのリスクを回避できます。less
、lsof
、rsync
、ssh
、sudo
、unzip
などのコマンドを使用して、ホストシステム上で変更を実行できます。
Toolbx ユーティリティーは次のアクションを実行します。
-
registry.access.redhat.com/ubi10/toolbox:latest
イメージをローカルシステムにプルする - イメージからコンテナーを起動する
- コンテナー内でシェルを実行し、そこからホストシステムにアクセスできる
Toolbx は、Toolbx コンテナーを作成したユーザーの権限に応じて、ルートコンテナーまたはルートレスコンテナーを実行できます。ホストシステムでルート権限を必要とするユーティリティーも、ルートコンテナーで実行する必要があります。
デフォルトのコンテナー名は rhel-toolbox
です。
18.1. Toolbx コンテナーの起動 リンクのコピーリンクがクリップボードにコピーされました!
toolbox create
コマンドを使用して Toolbx コンテナーを作成できます。その後、toolbox enter
コマンドを使用してコンテナーに入ることができます。
手順
Toolbx コンテナーを作成します。
ルートレスユーザーとして:
toolbox create <mytoolbox>
$ toolbox create <mytoolbox> Created container: <mytoolbox> Enter with: toolbox enter <mytoolbox>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルートユーザーとして:
sudo toolbox create <mytoolbox>
$ sudo toolbox create <mytoolbox> Created container: <mytoolbox> Enter with: toolbox enter <mytoolbox>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 正しいイメージを取得したことを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Toolbx コンテナーに入ります。
toolbox enter <mytoolbox>
[user@toolbox ~]$ toolbox enter <mytoolbox>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
<mytoolbox>
コンテナー内でコマンドを実行し、コンテナーの名前とイメージを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.2. 開発に Toolbx を使用する リンクのコピーリンクがクリップボードにコピーされました!
エディター、コンパイラー、ソフトウェア開発キット (SDK) などの開発ツールをインストールするために、Toolbx コンテナーをルートレスユーザーとして使用できます。インストール後、ルートレスユーザーとしてこれらのツールを引き続き使用できます。
前提条件
- Toolbx コンテナーを作成し、実行している。Toolbx コンテナーに入っている。Toolbx コンテナーをルート権限で作成する必要はありません。Toolbox コンテナーの起動 を参照してください。
手順
Emacs テキストエディター、GCC コンパイラー、GNU デバッガー (GDB) など、選択したツールをインストールします。
⬢[user@toolbox ~]$ sudo dnf install emacs gcc gdb
⬢[user@toolbox ~]$ sudo dnf install emacs gcc gdb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ツールがインストールされていることを確認します。
⬢[user@toolbox ~]$ dnf repoquery --info --installed <package_name>
⬢[user@toolbox ~]$ dnf repoquery --info --installed <package_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
18.3. ホストシステムのトラブルシューティングに Toolbx を使用する リンクのコピーリンクがクリップボードにコピーされました!
ルート権限を持つ Toolbx コンテナーを使用すると、systemd
、journalctl
、nmap
などのツールをホストシステムにインストールせずに使用して、ホストシステムのさまざまな問題の根本原因を見つけることができます。Toolbx コンテナー内では、たとえば次のアクションを実行できます。
前提条件
- Toolbx コンテナーを作成し、実行している。Toolbx コンテナーに入っている。Toolbx コンテナーはルート権限で作成する必要があります。Toolbox コンテナーの起動 を参照してください。
手順
journalctl
コマンドを実行できるようにするには、systemd
スイートをインストールします。⬢[root@toolbox ~]# dnf install systemd
⬢[root@toolbox ~]# dnf install systemd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホスト上で実行しているすべてのプロセスのログメッセージを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルのログメッセージを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow nmap
ネットワークスキャンツールをインストールします。⬢[root@toolbox ~]# dnf install nmap
⬢[root@toolbox ~]# dnf install nmap
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワーク内の IP アドレスとポートをスキャンします。
⬢[root@toolbox ~]# nmap -sS scanme.nmap.org Starting Nmap 7.93 ( https://nmap.org ) at 2024-01-02 10:39 CET Stats: 0:01:01 elapsed; 0 hosts completed (0 up), 256 undergoing Ping Scan Ping Scan Timing: About 29.79% done; ETC: 10:43 (0:02:24 remaining) Nmap done: 256 IP addresses (0 hosts up) scanned in 206.45 seconds
⬢[root@toolbox ~]# nmap -sS scanme.nmap.org Starting Nmap 7.93 ( https://nmap.org ) at 2024-01-02 10:39 CET Stats: 0:01:01 elapsed; 0 hosts completed (0 up), 256 undergoing Ping Scan Ping Scan Timing: About 29.79% done; ETC: 10:43 (0:02:24 remaining) Nmap done: 256 IP addresses (0 hosts up) scanned in 206.45 seconds
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
-sS
オプションは TCP SYN スキャンを実行します。Nmap のスキャンタイプのほとんどは、生のパケットを送受信するため、特権ユーザーのみが使用できます。UNIX システムではルートアクセスが必要です。
-
18.4. Toolbx コンテナーの停止 リンクのコピーリンクがクリップボードにコピーされました!
Toolbox コンテナーを終了するには exit
コマンドを使用し、コンテナーを停止するには podman stop
コマンドを使用します。
手順
コンテナーを離れてホストに戻ります。
⬢ [user@toolbox ~]$ exit
⬢ [user@toolbox ~]$ exit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ツールボックスコンテナーを停止します。
⬢ [user@toolbox ~]$ podman stop <mytoolbox>
⬢ [user@toolbox ~]$ podman stop <mytoolbox>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: ツールボックスコンテナーを削除します。
⬢ [user@toolbox ~]$ toolbox rm <mytoolbox>
⬢ [user@toolbox ~]$ toolbox rm <mytoolbox>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow あるいは、
podman rm
コマンドを使用してコンテナーを削除することもできます。
第19章 特殊なコンテナーイメージの実行 リンクのコピーリンクがクリップボードにコピーされました!
特殊なタイプのコンテナーイメージを実行できます。一部のコンテナーイメージには、事前に設定されたオプションおよび引数を使用してコンテナーを実行できる runlabels と呼ばれる組み込みラベルがあります。podman container runlabel <label>
コマンドでは、コンテナーイメージに対して <label>
で定義されたコマンドを実行できます。サポートされるラベルは、install
、run
、および uninstall
です。
19.1. ホストへの権限の付与 リンクのコピーリンクがクリップボードにコピーされました!
特権コンテナーと非特権コンテナーにはいくつかの違いがあります。たとえば、toolbox コンテナーは特権コンテナーです。以下は、コンテナーがホストに対して許可する、または許可しない権限の例です。
-
特権: 特権コンテナーは、コンテナーをホストから分離するセキュリティー機能を無効にします。特権コンテナーは、
podman run --privileged <image_name>
コマンドを使用して実行できます。たとえば、root ユーザーが所有するホストからマウントされたファイルおよびディレクトリーを削除できます。 -
プロセステーブル:
podman run --privileged --pid=host <image_name>
コマンドを使用して、コンテナーでホストの PID namespace を使用できます。特権コンテナー内でps -e
コマンドを使用して、ホストで実行しているすべてのプロセスをリスト表示できます。ホストから特権コンテナーで実行するコマンドにプロセス ID を渡すことができます (例:kill <PID>
)。 -
ネットワークインターフェイス - デフォルトでは、コンテナーには外部のネットワークインターフェイスとループバックネットワークインターフェイスが 1 つずつだけあります。
podman run --net=host <image_name>
コマンドを使用して、コンテナー内からホストのネットワークインターフェイスに直接アクセスできます。 -
プロセス間のコミュニケーション - ホストの IPC 機能は、特権コンテナーからアクセスできます。
ipcs
などのコマンドを実行して、ホスト上のアクティブなメッセージキュー、共有メモリーセグメント、およびセマフォセットに関する情報を表示できます。
19.2. runlabel が組み込まれたコンテナーイメージ リンクのコピーリンクがクリップボードにコピーされました!
Red Hat イメージには、そのイメージと連携するために事前に設定されたコマンドラインを提供するラベルが含まれているものがあります。podman container runlabel <label>
コマンドを使用すると、podman
コマンドを使用してイメージの <label>
で定義されたコマンドを実行できます。
既存の runlabel には次のものが含まれます。
- install - イメージを実行する前にホストシステムを設定します。通常、これにより、後で実行するときにコンテナーがアクセスできるホストにファイルとディレクトリーが作成されます。
- run - コンテナーの実行時に使用する podman コマンドラインオプションを特定します。通常、オプションはホストで権限を開き、コンテナーがホストで永続的に維持する必要があるホストのコンテンツをマウントします。
- uninstall - コンテナーの実行を終了した後にホストシステムをクリーンアップします。
19.3. runlabel を使用した support-tools の実行 リンクのコピーリンクがクリップボードにコピーされました!
rhel10/support-tools
コンテナーイメージは、support-toolsd
デーモンのコンテナー化されたバージョンを実行するために作成されます。support-tools
イメージには、install
、run
、uninstall
という runlabel が含まれています。次の手順では、support-tools
イメージのインストール、実行、およびアンインストールを説明します。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
support-tools
イメージをプルします。podman pull registry.redhat.io/rhel10/support-tools
# podman pull registry.redhat.io/rhel10/support-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow support-tools
のinstall
runlabel を表示します。podman container runlabel install --display rhel10/support-tools
# podman container runlabel install --display rhel10/support-tools command: podman run --rm --privileged -v /:/host -e HOST=/host -e IMAGE=registry.redhat.io/rhel10/support-tools:latest -e NAME=support-tools registry.redhat.io/rhel10/support-tools:latest /bin/install.sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、コマンドがホストに特権を開き、コンテナー内の
/host
にホストの root ファイルシステムをマウントし、install.sh
スクリプトを実行します。support-tools
のinstall
runlabel を実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、
support-tools
イメージが後で使用するファイルがホストシステム上に作成されます。support-tools
のrun
runlabel を表示します。podman container runlabel run --display rhel10/support-tools
# podman container runlabel run --display rhel10/support-tools command: podman run -d --privileged --name support-tools --net=host --pid=host -v /etc/pki/support-tools:/etc/pki/support-tools -v /etc/support-tools.conf:/etc/support-tools.conf -v /etc/sysconfig/support-tools:/etc/sysconfig/support-tools -v /etc/support-tools.d:/etc/support-tools.d -v /var/log:/var/log -v /var/lib/support-tools:/var/lib/support-tools -v /run:/run -v /etc/machine-id:/etc/machine-id -v /etc/localtime:/etc/localtime -e IMAGE=registry.redhat.io/rhel10/support-tools:latest -e NAME=support-tools --restart=always registry.redhat.io/rhel10/support-tools:latest /bin/support-tools.sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、コマンドが
support-tools
コンテナーを起動してsupport-toolsd
デーモンを実行するときに、ホストへの権限を開き、コンテナー内のホストから特定のファイルとディレクトリーをマウントすることを示しています。support-tools
のrun
runlabel を実行します。podman container runlabel run rhel10/support-tools
# podman container runlabel run rhel10/support-tools command: podman run -d --privileged --name support-tools --net=host --pid=host -v /etc/pki/support-tools:/etc/pki/support-tools -v /etc/support-tools.conf:/etc/support-tools.conf -v /etc/sysconfig/support-tools:/etc/sysconfig/support-tools -v /etc/support-tools.d:/etc/support-tools.d -v /var/log:/var/log -v /var/lib/support-tools:/var/lib/support-tools -v /run:/run -v /etc/machine-id:/etc/machine-id -v /etc/localtime:/etc/localtime -e IMAGE=registry.redhat.io/rhel10/support-tools:latest -e NAME=support-tools --restart=always registry.redhat.io/rhel10/support-tools:latest /bin/support-tools.sh 28a0d719ff179adcea81eb63cc90fcd09f1755d5edb121399068a4ea59bd0f53
Copy to Clipboard Copied! Toggle word wrap Toggle overflow support-tools
コンテナーは権限を開き、ホストから必要なものをマウントし、support-toolsd
デーモンをバックグラウンドで実行します (-d
)。support-toolsd
デーモンはログメッセージの収集を開始し、メッセージを/var/log
ディレクトリー内のファイルに送信します。support-tools
のuninstall
runlabel を表示します。podman container runlabel uninstall --display rhel10/support-tools
# podman container runlabel uninstall --display rhel10/support-tools command: podman run --rm --privileged -v /:/host -e HOST=/host -e IMAGE=registry.redhat.io/rhel10/support-tools:latest -e NAME=support-tools registry.redhat.io/rhel10/support-tools:latest /bin/uninstall.sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow support-tools
のuninstall
runlabel を実行します。podman container runlabel uninstall rhel10/support-tools
# podman container runlabel uninstall rhel10/support-tools command: podman run --rm --privileged -v /:/host -e HOST=/host -e IMAGE=registry.redhat.io/rhel10/support-tools:latest -e NAME=support-tools registry.redhat.io/rhel10/support-tools:latest /bin/uninstall.sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
この場合、uninstall.sh
スクリプトは、/etc/logrotate.d/syslog
ファイルを削除します。設定ファイルはクリーンアップされません。
第20章 container-tools API の使用 リンクのコピーリンクがクリップボードにコピーされました!
varlink ライブラリーを使用する Podman リモート API に代わって、新しい REST ベースの Podman 2.0 API が導入されました。新規 API は、ルートフル環境およびルートレス環境の両方で動作します。
Podman v2.0 RESTful API は、Podman のサポートを提供する Libpod API と、Docker 互換 API で構成されます。この新しい REST API を使用すると、cURL、Postman、Google の Advanced REST クライアントなどのプラットフォームから Podman を呼び出すことができます。
podman サービスはソケットのアクティブ化をサポートしているため、ソケット上の接続がアクティブでない限り、podman サービスは実行されません。したがって、ソケットのアクティブ化機能を有効にするには、podman.socket
サービスを手動で起動する必要があります。ソケット上で接続がアクティブになると、podman サービスが起動し、要求された API アクションが実行されます。アクションが完了すると、podman プロセスが終了し、podman サービスは非アクティブな状態に戻ります。
20.1. root モードで systemd を使用した Podman API の有効化 リンクのコピーリンクがクリップボードにコピーされました!
以下を実行できます。
-
systemd
を使用して Podman API ソケットをアクティベートします。 - Podman クライアントを使用して基本的なコマンドを実行します。
前提条件
podman-remote
パッケージがインストールされている。dnf install podman-remote
# dnf install podman-remote
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
サービスをすぐに起動します。
systemctl enable --now podman.socket
# systemctl enable --now podman.socket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow docker-podman
パッケージを使用してvar/lib/docker.sock
へのリンクを有効にするには以下を実行します。dnf install podman-docker
# dnf install podman-docker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Podman のシステム情報を表示します。
podman-remote info
# podman-remote info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リンクを確認します。
ls -al /var/run/docker.sock
# ls -al /var/run/docker.sock lrwxrwxrwx. 1 root root 23 Nov 4 10:19 /var/run/docker.sock -> /run/podman/podman.sock
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
20.2. ルートレスモードで systemd を使用した Podman API の有効化 リンクのコピーリンクがクリップボードにコピーされました!
systemd
を使用して、Podman API ソケットと Podman API サービスをアクティベートできます。
前提条件
podman-remote
パッケージがインストールされている。dnf install podman-remote
# dnf install podman-remote
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
サービスをすぐに有効にして起動します。
systemctl --user enable --now podman.socket
$ systemctl --user enable --now podman.socket
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: Docker を使用してプログラムがルートレス Podman ソケットと対話できるようにするには、以下を実行します。
export DOCKER_HOST=unix:///run/user/<uid>/podman//podman.sock
$ export DOCKER_HOST=unix:///run/user/<uid>/podman//podman.sock
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ソケットのステータスを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman.socket
はアクティブで、/run/user/<uid>/podman.podman.sock
をリッスンしています。<uid>
はユーザーの ID です。Podman のシステム情報を表示します。
podman-remote info
$ podman-remote info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
20.3. Podman API の手動実行 リンクのコピーリンクがクリップボードにコピーされました!
Podman API を実行できます。手動での実行は、特に Docker の互換性レイヤーを使用する場合など、API 呼び出しのデバッグに便利です。
前提条件
podman-remote
パッケージがインストールされている。dnf install podman-remote
# dnf install podman-remote
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
REST API のサービスを実行します。
podman system service -t 0 --log-level=debug
# podman system service -t 0 --log-level=debug
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
値が 0 の場合はタイムアウトなしを意味します。ルートフルサービスのデフォルトのエンドポイントは
unix:/run/podman/podman.sock
です。 -
--log-level <level>
オプションは、ロギングレベルを設定します。標準のロギングレベルはdebug
、info
、warn
、error
、fatal
、およびpanic
です。
-
値が 0 の場合はタイムアウトなしを意味します。ルートフルサービスのデフォルトのエンドポイントは
別のターミナルで、Podman のシステム情報を表示します。
podman-remote
コマンドは、通常のpodman
コマンドとは異なり、Podman ソケットを介して通信します。podman-remote info
# podman-remote info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Podman API をトラブルシューティングし、要求および応答を表示するには、
curl
コマンドを使用します。JSON 形式で Linux サーバーの Podman インストールの情報を取得するには、以下を実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow jq
ユーティリティーは、コマンドライン JSON プロセッサーです。registry.access.redhat.com/ubi8/ubi
コンテナーイメージをプルします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow プルしたイメージを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow