コンテナーの構築、実行、および管理
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 --autoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
container-toolsメタパッケージをインストールします。dnf install container-tools
# dnf install container-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
podman、buildah、skopeoを個別にインストールすることもできます。オプション:
podman-dockerパッケージをインストールします。dnf install podman-docker
# dnf install podman-dockerCopy 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-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - プロンプトが表示されたらパスワードを入力します。
Podman Desktop をインストールします。
dnf install podman-desktop
# dnf install podman-desktopCopy 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 ntpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、
ntpdがコンテナー内だけでなく、システム全体の時間を調整できることに注意してください。ルートレスコンテナーは、1024 未満のポート番号にアクセスできません。たとえば、ルートレスコンテナーの namespace 内では、コンテナーの httpd サービスからポート 80 を公開するサービスを開始しますが、この namespace の外部からはアクセスできません。
podman run -d httpd
$ podman run -d httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow ただし、そのポートをホストシステムに公開するには、コンテナーには root ユーザーのコンテナー環境を使用するルート権限が必要です。
podman run -d -p 80:80 httpd
# podman run -d -p 80:80 httpdCopy 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_startCopy 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に設定され、デフォルトでsystemdInit サービスを開始します。 -
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=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow - レジストリー、namespace、またはイメージのブロック
ローカルシステムがアクセスできないレジストリーを定義できます。
blocked=trueを設定して、特定のレジストリーをブロックできます。[[registry]] location = "registry.example.org" blocked = true
[[registry]] location = "registry.example.org" blocked = trueCopy 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 = trueCopy 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 = trueCopy 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.ioCopy 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 ... 0Copy 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-10Copy 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/ubiCopy 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 MBCopy 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 MBCopy 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 MBCopy 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:latestCopy 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/nginxCopy 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/nginxCopy 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 versionCopy 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 MBCopy 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 myubiCopy to Clipboard Copied! Toggle word wrap Toggle overflow イメージ ID:
podman tag 3269c37eae33 myubi
$ podman tag 3269c37eae33 myubiCopy 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 MBCopy 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:10Copy to Clipboard Copied! Toggle word wrap Toggle overflow イメージ ID:
podman tag 3269c37eae33 myubi:10
$ podman tag 3269c37eae33 myubi:10Copy 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 MBCopy 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:latestCopy 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-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysupport-tools.tarおよびmysupport-tools-oci.tarアーカイブはカレントディレクトリーに保存されます。次の手順は、mysupport-tools.tartarball を使用して実行されます。
mysupport-tools.tarのファイルタイプを確認します。file mysupport-tools.tar
$ file mysupport-tools.tar mysupport-tools.tar: POSIX tar archiveCopy 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:latestCopy 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/ubiCopy 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/ubiCopy 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 MBCopy 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-toolsCopy 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 7ccd6001166e9720c47fbeb077e0afd0bb635e74a1b0ede3fd34d09eaf5a52e9Copy 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-toolsCopy 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/ubiCopy to Clipboard Copied! Toggle word wrap Toggle overflow システムからすべてのイメージを削除するには、以下のコマンドを実行します。
podman rmi -a
$ podman rmi -aCopy 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 NAMESCopy 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-ngCopy 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 -efCopy to Clipboard Copied! Toggle word wrap Toggle overflow exitを実行してコンテナーを終了し、ホストに戻ります。exit
# exitCopy 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 myubiCopy 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-toolsCopy 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_brownCopy 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 falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow
実行されていないものの削除されていない (--rm オプション) コンテナーが存在する場合には、コンテナーがあるので、再起動できます。
5.5. コンテナーの起動 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーを実行してから停止し、削除しない場合には、ローカルシステムに保存されて再び実行する準備ができます。podman start コマンドを使用して、コンテナーを再実行できます。コンテナー ID または名前を使用して、コンテナーを指定できます。
前提条件
-
container-toolsメタパッケージがインストールされている。 - 1 つ以上のコンテナーが停止されている。
手順
myubiコンテナーを起動します。非対話モードで以下を行います。
podman start myubi
$ podman start myubiCopy 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 myubiCopy to Clipboard Copied! Toggle word wrap Toggle overflow または、
podman start -a -i 1984555a2c27を使用することができます。
exitを実行してコンテナーを終了し、ホストに戻ります。exit
[root@6ccffd0f6421 /]# exitCopy 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 CETCopy 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 hostCopy 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-toolsCopy 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 mysyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysyslogコンテナーをマウントします。podman mount mysyslog
# podman mount mysyslog /var/lib/containers/storage/overlay/990b5c6ddcdeed4bde7b245885ce4544c553d108310e2b797d7be46750894719/mergedCopy 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 varCopy 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 efde5f0a8c723f70dd5cb5dc3d5039df3b962fae65575b08662e0d5b5f9fbe85Copy 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/bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow システムユーティリティーのセットが含まれる
procps-ngパッケージをインストールします (例:ps、top、uptimeなど)。dnf install procps-ng
# dnf install procps-ngCopy 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 -efCopy 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_64Copy 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 3124Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11. 2 つのコンテナー間でのファイルの共有 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーが削除されても、ボリュームを使用してコンテナー内のデータを永続化できます。ボリュームは、複数のコンテナー間でのデータ共有に使用できます。ボリュームとは、ホストマシンに保存されているフォルダーです。ボリュームはコンテナーとホスト間で共有できます。
主な利点は以下のとおりです。
- ボリュームはコンテナー間で共有できます。
- ボリュームは、他と比べるとバックアップまたは移行が簡単です。
- ボリュームを使用するとコンテナーのサイズが増えません。
前提条件
-
container-toolsメタパッケージがインストールされている。
手順
ボリュームを作成します。
podman volume create hostvolume
$ podman volume create hostvolumeCopy 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.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow mntPoint変数で定義されたディレクトリー内の全ファイルをリスト表示します。ls $mntPoint/
$ ls $mntPoint/ host.txtCopy 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/bashCopy 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.txtCopy 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.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
CTRL+pおよびCTRL+qを使用してコンテナーからデタッチします。 ホスト上にある共有ボリューム内のファイルをリスト表示します。以下の 2 つのファイルが表示されるはずです。
ls $mntPoint
$ ls $mntPoint container1.rxt host.txtCopy 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/bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナー上にある共有ボリューム内のファイルをリスト表示します。
ls /containervolume2
# ls /containervolume2 container1.txt host.txtCopy 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.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
CTRL+pおよびCTRL+qを使用してコンテナーからデタッチします。 ホスト上にある共有ボリューム内のファイルをリスト表示します。以下の 3 つのファイルが表示されるはずです。
ls $mntPoint
$ ls $mntPoint container1.rxt container2.txt host.txtCopy 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/ubiCopy 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 myubiCopy to Clipboard Copied! Toggle word wrap Toggle overflow myubiコンテナーに割り当てます。podman attach myubi
$ podman attach myubiCopy to Clipboard Copied! Toggle word wrap Toggle overflow testfileという名前のファイルを作成します。echo "hello" > testfile
[root@a6a6d4896142 /]# echo "hello" > testfileCopy 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 a6a6d4896142Copy 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 MBCopy 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 helloCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.13. コンテナーの停止 リンクのコピーリンクがクリップボードにコピーされました!
実行中のコンテナーを停止するには、podman stop コマンドを使用します。コンテナー ID または名前を使用して、コンテナーを指定できます。
前提条件
-
container-toolsメタパッケージがインストールされている。 - 1 つ以上のコンテナーが実行中である。
手順
myubiコンテナーを停止します。コンテナー名を使用する場合:
podman stop myubi
$ podman stop myubiCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナー ID を使用する場合:
podman stop 1984555a2c27
$ podman stop 1984555a2c27Copy 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 falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーを削除します。
peaceful_hopperを削除するには以下を実行します。podman rm peaceful_hopper
$ podman rm peaceful_hopperCopy 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_brownCopy to Clipboard Copied! Toggle word wrap Toggle overflow 複数のコンテナーを削除するには、以下を実行します。
podman rm clever_yonath furious_shockley
$ podman rm clever_yonath furious_shockleyCopy to Clipboard Copied! Toggle word wrap Toggle overflow ローカルシステムからすべてのコンテナーを削除するには、以下のコマンドを実行します。
podman rm -a
$ podman rm -aCopy 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 failedCopy 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) に公開し、コンテナーの起動時、systemdinit サービス (/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 1Copy 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 mysysdCopy 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 mysysdCopy 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=80Copy 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_runCopy to Clipboard Copied! Toggle word wrap Toggle overflow Web サーバーをテストします。
curl localhost/index.html
# curl localhost/index.html Successful Web Server TestCopy 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 $microcontainerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 作業コンテナーから
ubi-micro-httpdイメージを作成します。buildah commit $microcontainer ubi-micro-httpd
# buildah commit $microcontainer ubi-micro-httpdCopy 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 MBCopy 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/secretsCopy 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/ubiCopy 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 bzip2Copy to Clipboard Copied! Toggle word wrap Toggle overflow UBI リポジトリーにないパッケージを追加するには、リポジトリーを無効にしないでください。たとえば、
zshパッケージを追加するには、次のコマンドを実行します。dnf install zsh
# dnf install zshCopy 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-develCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
コンテナー内で有効なリポジトリーのリストを表示します。
dnf repolist
# dnf repolistCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要なリポジトリーがリスト表示されていることを確認します。
インストール済みパッケージのリストを表示します。
rpm -qa
# rpm -qaCopy 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-minimalCopy 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=falseCopy 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=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow --setopt install_weak_deps=falseオプションは、weak 依存関係のインストールを無効にします。Weak 依存関係には、厳密には必要ではないが、デフォルトでインストールされることが多い推奨パッケージや提案パッケージが含まれます。
検証
コンテナー内で有効なリポジトリーのリストを表示します。
microdnf repolist
# microdnf repolistCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要なリポジトリーがリスト表示されていることを確認します。
インストール済みパッケージのリストを表示します。
rpm -qa
# rpm -qaCopy 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 bzip2Copy 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 bzip2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
有効なリポジトリーをリスト表示します。
UBI 標準イメージまたは UBI init イメージに基づいて、コンテナー内で有効なリポジトリーをすべてリスト表示するには、次のコマンドを実行します。
dnf repolist
# dnf repolistCopy to Clipboard Copied! Toggle word wrap Toggle overflow UBI minimal コンテナーに基づいて、コンテナー内で有効なリポジトリーを一覧表示するには、以下を実行します。
microdnf repolist
# microdnf repolistCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 必要なリポジトリーがリスト表示されていることを確認します。
インストール済みパッケージのリストを表示します。
rpm -qa
# rpm -qaCopy 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 bbe98c71d18720d966e4567949888dc4fb86eec7d304e785d5177168a5965f64Copy to Clipboard Copied! Toggle word wrap Toggle overflow Web サーバーをテストします。
curl http://localhost/index.html
# curl http://localhost/index.html The Web Server is RunningCopy 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; doneCopy 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 3afdcd93de3eCopy 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 223df6b390b4Copy 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 5df5c48fea87860cf75822ceab8370548b04c78be9fc156570949013863ccf71Copy 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 3afdcd93de3eCopy 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 223df6b390b4Copy 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/bashCopy 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 mypodCopy 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 mypodCopy 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 223df6b390b4ea87a090a4b5207f7b9b003187a6960bd37631ae9bc12c433affCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod を削除すると、その Pod 中の全コンテナーが自動的に削除されることに注意してください。
必要に応じて、すべてのコンテナーおよび Pod が削除されたことを確認します。
podman ps podman pod ps
$ podman ps $ podman pod psCopy 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,tuningCopy 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.conflistCopy 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,dnsnameCopy 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 mycontainerCopy 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 mycontainerCopy 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,dnsnameCopy to Clipboard Copied! Toggle word wrap Toggle overflow mynetネットワークを削除します。podman network rm mynet
# podman network rm mynet mynetCopy 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,tuningCopy 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] yCopy 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,tuningCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第9章 コンテナー間の通信 リンクのコピーリンクがクリップボードにコピーされました!
ポートマッピング、DNS 解決、または Pod 内の通信のオーケストレーションを活用して、コンテナー、アプリケーション、ホストシステム間の通信を確立する方法を学習します。
9.1. ネットワークモードとレイヤー リンクのコピーリンクがクリップボードにコピーされました!
Podman には、いくつかの異なるネットワークモードがあります。
-
bridge- デフォルトのブリッジネットワーク上に別のネットワークを作成します。 -
container:<id>- id が<id>のコンテナーと同じネットワークを使用します。 -
host- ホストネットワークスタックを使用します。 -
network-id-podmannetwork 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 passtCopy 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/ubiCopy 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/httpdCopy 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-containerCopy 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.2Copy 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.2Copy 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-24Copy 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-24Copy 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-24Copy 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}}' web3Copy 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 3000Copy 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-podCopy 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/httpdCopy 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-podCopy 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:80Copy 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 1Copy 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/httpdCopy 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-containerCopy 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.conflistCopy 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-podCopy 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/httpdCopy 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-podCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
コンテナーに接続されているすべてのネットワークを表示します。
podman ps --format="{{.Networks}}"# podman ps --format="{{.Networks}}" pod-netCopy 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/16Copy 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/16Copy 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 efde5f0a8c723f70dd5cb5dc3d5039df3b962fae65575b08662e0d5b5f9fbe85Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
IP アドレスが正しく設定されていることを確認します。
podman inspect --format='{{.NetworkSettings.IPAddress}}' myubi# podman inspect --format='{{.NetworkSettings.IPAddress}}' myubi 10.88.0.44Copy 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 mv1Copy 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 894ae3b6b1081aca2a5d90a9855568eaa533c08a174874be59569d4656f9bc45Copy 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.36Copy 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-reloadCopy 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.serviceCopy 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-mysleepCopy 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-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービス
container.serviceを有効にし、起動時に開始します。systemctl --user enable container.service
# systemctl --user enable container.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスをすぐに起動します。
systemctl --user start container.service
# systemctl --user start container.serviceCopy 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_zhukovskyCopy 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 0280afe98bb75a5c5e713b28de4b7c5cb49f156f1cce4a208f13fee2f75cb453Copy 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.serviceCopy 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-24Copy 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 MBCopy 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 cdb9f981cf143021b1679599d860026b13a77187f75e46cc0eac85293710a4b1Copy 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 httpdCopy 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.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成された
container-httpd.servicesystemdユニットファイルの内容を表示します。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/systemCopy 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 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577Copy 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 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577Copy 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 topCopy 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-podCopy 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.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 3 つの
systemdユニットファイルが生成されることに注意してください。1 つはsystemd-podPod 用、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]セクションのBindsTol 行は、pod-systemd-pod.serviceユニットファイルの依存関係を定義します。 -
[Service]セクションのExecStart行およびExecStop行では、それぞれcontainer0を起動および停止します。
-
container-container1.serviceユニットファイルを表示します。cat container-container1.service
$ cat container-container1.serviceCopy 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/userCopy 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 enabledCopy 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 bc219740a210455fa27deacc96d50a9e20516492f1417507c13ce1533dbdcd9dCopy 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 myubiCopy 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.serviceCopy 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/systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemdマネージャー設定をリロードします。systemctl daemon-reload
# systemctl daemon-reloadCopy 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.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーを自動更新します。
podman auto-update
# podman auto-updateCopy 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.timerCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemdサービスを開始します。systemctl start podman-auto-update.timer
# systemctl start podman-auto-update.timerCopy 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.serviceCopy 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 223df6b390b4Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod 名または ID を使用して Kubernetes YAML ファイルを生成します。
podman generate kube mypod > mypod.yaml
$ podman generate kube mypod > mypod.yamlCopy 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.yamlCopy 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: 848179395ebd33dd91d14ffbde7ae273158d9695a081468f487af4e356888eceCopy 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 aa4220eaf4bbCopy 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 b8c5b99ba846Copy 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.yamlCopy 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.cnfCopy 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 MBCopy 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:80Copy to Clipboard Copied! Toggle word wrap Toggle overflow wordpresspodpod の中にmydbコンテナーを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow wordpresspodpod の中に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 wordpresspodCopy 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 wordpresspodCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod 名または ID を使用して Kubernetes YAML ファイルを生成します。
podman generate kube wordpresspod >> wordpresspod.yaml
$ podman generate kube wordpresspod >> wordpresspod.yamlCopy 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/mysqlCopy 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 wordpresspodCopy 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: 3e391d091d190756e655219a34de55583eed3ef59470aadd214c1fc48cae92acCopy 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 PODNAMECopy 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_contentdbという名前の 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.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy 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_contentdbという名前の 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.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy 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.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy 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-podmanCopy 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-podmanCopy 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-podmanCopy 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-podmanCopy 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-podmanCopy 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-podmanCopy 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-podmanCopy 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/skopeoCopy 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://$IMAGECopy 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://$IMAGECopy 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/ubiCopy 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 MBCopy 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/bashCopy 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-containerCopy 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 srvCopy 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 MBCopy 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-containerCopy 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/ubiCopy 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:latesti イメージがプルされます。
検証
すべてのコンテナーをリスト表示します。
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_podmanCopy 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 helloCopy 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:latesti イメージがプルされます。
検証
すべてのコンテナーをリスト表示します。
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_podmanCopy 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.ioCopy 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/bashCopy 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 MBCopy to Clipboard Copied! Toggle word wrap Toggle overflow moon-buggyコンテナーに基づいて新しいコンテナーを実行します。podman run -it --name moon moon-buggy
# podman run -it --name moon moon-buggyCopy 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-buggyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、
moon-buggyイメージをレジストリーにプッシュします。podman push registry.example.com/moon-buggy
# podman push registry.example.com/moon-buggyCopy 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-24Copy 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 healthyCopy 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-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow podman healthcheck runコマンドを使用します。podman healthcheck run hc-container
$ podman healthcheck run hc-container healthyCopy 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 1Copy 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-containerCopy 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 healthyCopy 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-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow podman healthcheck runコマンドを使用します。podman healthcheck run hc-container
$ podman healthcheck run hc-container healthyCopy 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:latestCopy 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=trueCopy 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 19524fe3c145df32d4f0c9af83e7964e4fb79fc4c397c514192d9d7620a36cd3Copy 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 gdbCopy 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 systemdCopy 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 nmapCopy 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 secondsCopy 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 ~]$ exitCopy 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-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow support-toolsのinstallrunlabel を表示します。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.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、コマンドがホストに特権を開き、コンテナー内の
/hostにホストの root ファイルシステムをマウントし、install.shスクリプトを実行します。support-toolsのinstallrunlabel を実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、
support-toolsイメージが後で使用するファイルがホストシステム上に作成されます。support-toolsのrunrunlabel を表示します。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.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、コマンドが
support-toolsコンテナーを起動してsupport-toolsdデーモンを実行するときに、ホストへの権限を開き、コンテナー内のホストから特定のファイルとディレクトリーをマウントすることを示しています。support-toolsのrunrunlabel を実行します。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 28a0d719ff179adcea81eb63cc90fcd09f1755d5edb121399068a4ea59bd0f53Copy to Clipboard Copied! Toggle word wrap Toggle overflow support-toolsコンテナーは権限を開き、ホストから必要なものをマウントし、support-toolsdデーモンをバックグラウンドで実行します (-d)。support-toolsdデーモンはログメッセージの収集を開始し、メッセージを/var/logディレクトリー内のファイルに送信します。support-toolsのuninstallrunlabel を表示します。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.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow support-toolsのuninstallrunlabel を実行します。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.shCopy 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-remoteCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
サービスをすぐに起動します。
systemctl enable --now podman.socket
# systemctl enable --now podman.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow docker-podmanパッケージを使用してvar/lib/docker.sockへのリンクを有効にするには以下を実行します。dnf install podman-docker
# dnf install podman-dockerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Podman のシステム情報を表示します。
podman-remote info
# podman-remote infoCopy 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.sockCopy 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-remoteCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
サービスをすぐに有効にして起動します。
systemctl --user enable --now podman.socket
$ systemctl --user enable --now podman.socketCopy 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.sockCopy 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 infoCopy 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-remoteCopy 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=debugCopy 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 infoCopy 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