はじめに
Podmanは、LinuxでOCIコンテナを実行および管理するためのコンテナエンジンです。 RedHatは、すべてを開始した有名なコンテナー管理プラットフォームであるDockerの直接の代替手段として開発しています。
このチュートリアルは、コマンド構文を説明し、Podmanコマンドの実際の使用例を提供することで、Podmanがどのように機能するかを理解するのに役立ちます。
前提条件
- コマンドライン/ターミナルウィンドウへのアクセス。
- Podmanがインストールおよび構成されています(macOSにPodmanをインストールする方法またはUbuntuにPodmanをインストールする方法を参照してください)。
Podmanコマンド
Podmanのコマンド構文はDockerと非常によく似ています。メインのpodman
コマンドの後にPodman管理コマンドとオプションが続きます:
podman [command] [options]
以下は、すべてのPodmanコマンドを含む表です。
コマンド | 説明 |
---|---|
attach | 名前またはIDを使用して実行中のコンテナにアタッチします。 |
auto-update | コンテナの自動更新ポリシーを使用してコンテナを更新します。 |
build | Containerfilesの手順を使用してイメージを作成します。 |
commit | コンテナに加えられた変更を反映した新しい画像を作成します。 |
container | ポッドマンコンテナを管理します。 |
cp | ファイル/ディレクトリをコンテナからローカルファイルシステムに、またはその逆にコピーします。 |
create | コンテナを起動せずに作成します。 |
diff | コンテナまたは画像に加えられた変更を表示します。 |
events | ポッドマンイベントを表示します。 |
exec | 実行中のコンテナ内でプロセスを実行します。 |
export | コンテナのファイルシステムの内容を含むtarアーカイブを作成します。 |
generate | コンテナ、ボリューム、またはポッドに基づいて構造化された出力を作成します。 |
healthcheck | コンテナのヘルスチェックを管理します。 |
history | 画像の履歴を表示します。 |
image | 画像を管理します。 |
image | ローカルストレージで利用可能な画像を一覧表示します。 |
import | ファイルシステムイメージのtarballをインポートします。 |
info | ポッドマンシステム情報を表示します。 |
init | コンテナを初期化します。 |
inspect | コンテナまたはイメージの構成を表示します。 |
kill | コンテナを強制終了します。 |
load | コンテナアーカイブで利用可能な画像を読み込みます。 |
login | コンテナレジストリのログイン。 |
logout | コンテナレジストリからログアウトします。 |
logs | コンテナログを表示します。 |
machine | ポッドマンVMを管理します。 |
manifest | マニフェストリストと画像インデックスを作成および管理します。 |
mount | コンテナのルートファイルシステムをマウントするか、現在マウントされているコンテナを一覧表示します。 |
network | ポッドマンネットワークを管理します。 |
pause | コンテナプロセスを一時停止します。 |
play | コンテナ、ボリューム、またはポッドを再生します。 |
pod | ポッドマンポッドを管理します。 |
ポート | ポートマッピングを一覧表示するか、コンテナのコンテナ固有のマッピングを一覧表示します。 |
ps | 実行中のコンテナを一覧表示します。 |
pull | レジストリからローカルストレージに画像をコピーします。 |
push | ローカルマシンから指定された宛先に画像をプッシュします。 |
rename | コンテナの名前を変更します。 |
restart | コンテナを再起動します。 |
rm | コンテナを削除します。 |
rmi | ローカルストレージから画像を削除します。 |
run | コンテナでコマンドを実行します。 |
save | 画像をローカルファイルに保存します。 |
search | レジストリで画像を探します。 |
secret | シークレットを操作します。 |
start | コンテナを起動します。 |
stats | リソース使用統計を表示します。 |
stop | コンテナを停止します。 |
system | ポッドマンシステムを管理します。 |
tag | ローカル画像に名前を割り当てます。 |
top | コンテナで実行されているプロセスを表示します。 |
unmount | コンテナのルートファイルシステムをアンマウントします。 |
unpause | コンテナプロセスの一時停止を解除します。 |
unshare | 新しいユーザー名前空間でプロセスを起動します。 |
untag | ローカル画像からタグを削除します。 |
version | バージョン情報を表示します。 |
volume | コンテナボリュームを管理します。 |
wait | コンテナが停止するのを待ちます。 |
Podmanチュートリアル
Podmanは主にコンテナエンジンですが、OCIコンテナを作成して実行するように設計されていますが、ユーザーは podman
を使用することもできます。 コンテナイメージを管理するコマンド。
次のセクションでは、Podmanを使用して画像、コンテナ、ポッドを作成および操作する方法について説明します。
Podmanヘルプマニュアルの表示
コマンドラインを使用して、Podmanのドキュメントをすばやく参照できます。利用可能なpodman
を表示するには 端末のコマンドに次のように入力します:
podman help
Podmanの完全なマニュアルを表示するには、manコマンドを使用します。
Podman画像
Podmanでのイメージの構築と管理は、低レベルのcoreutilsインターフェースを使用するイメージ構築ツールであるBuildahを使用して実行されます。ユーザーがpodman
を実行したとき 画像に関連するコマンドで、PodmanはBuildahを呼び出してアクションを実行します。
次のセクションでは、いくつかの重要な画像管理コマンドについて説明します。
画像の検索
search
を使用して、利用可能な画像のレジストリを検索します 指図。
podman search [search-term]
--limit
を使用して結果の数を制限します オプション。たとえば、「centos」に対して3つの結果を生成するには 検索語、タイプ:
podman search --limit 3 centos
画像の検査
Podmanイメージをプルする前に、それを検査することをお勧めします。 podman inspect
を使用します コマンドを実行すると、システムはファイルサイズ、アーキテクチャ、OSなどの画像メタデータを出力します。
podman inspect [repository or image ID]
--format
を使用します podman inspect
のオプション 特定のメタデータを取得するコマンド。次の例では、コマンドは画像の説明のみを返します。
podman inspect --format=’{{.Labels.description}}’ [image ID]
画像のダウンロード
オンラインリポジトリからの画像のプルは、 podman pull
を使用して実行されます 指図。構文は次のとおりです。
podman pull [registry/image]
この例は、 fedoraproject.orgから画像をプルする方法を示しています。 レジストリ:
実行中の画像
podman run
を使用してPodmanイメージを実行します :
podman run [image]
画像がローカルで利用できない場合、Podmanは画像をオンラインレジストリから取得し、コンテナとして実行します。
画像の表示
podman images
サブコマンドは、ローカルで利用可能な画像を一覧表示するために使用されます:
podman images
オプションを使用して、検索結果を絞り込みます。 --filter
オプションは、指定した条件に基づいて出力をフィルタリングします。たとえば、次のコマンドは、 "redhat"を含むすべての画像を検索します。 名前で:
podman images --filter reference=redhat
カスタムイメージの作成
Podmanでカスタムイメージを作成するには、dockerfileまたはcontainerfileが必要です。これらのファイルには、Buildahツールがイメージを作成するために使用する命令が含まれています。
ファイルのビルドは、 podman build
を使用して実行されます 指図。たとえば、命令スクリプトを含むディレクトリからイメージを作成するには、次のコマンドを実行します。
podman build .
Buildahは、必要なファイルコンテキストを収集し、イメージを構築します。
画像の削除
podman rmi
コマンドは、ローカルストレージからイメージを削除するために使用されます。 Podmanイメージを削除する前に、関連するすべてのコンテナが停止され、削除されていることを確認してください。
podman rmi
を使用して画像を削除します コマンドの後に画像名またはIDを続けます:
podman rmi [image-name-or-id]
出力は、画像が削除されたことを確認します。
Podmanコンテナ
コンテナの作成と管理はPodmanの主な機能です。以下のセクションで、最も一般的なコンテナ管理コマンドのいくつかを見つけてください。
実行中のコンテナ
podman run
コマンドには、dockerrunと同じ機能があります。コマンドに続くオプションは、実行されているコンテナーのタイプによって異なります。次の例は、 httpdの実行を示しています。 たとえば、 docker.io
で利用可能な画像を使用します リポジトリ:
podman run -p 8080:80/tcp docker.io/library/httpd
コマンドはコンテナを実行し、そのコマンドプロンプトを表示します。
Ctrl + C を押して、コンテナプロンプトを終了します 。このコマンドはコンテナを終了します。
バックグラウンドでコンテナを実行する
コンテナプロンプトをスキップしてコンテナをバックグラウンドで実行するには、次の構文を使用します。
podman run -dt -p 8080:80/tcp docker.io/library/httpd
コンテナが正常に起動すると、コマンドの出力にコンテナの長いIDが表示されます。
コンテナへの接続
podman attach
を使用してコンテナに入る コマンド:
podman attach [container-name-or-id]
この例は、コンテナIDを使用して実行中のAlpineLinuxコンテナに接続する方法を示しています。
実行中のコンテナの表示
ps
で現在実行中のコンテナを表示する コマンド:
podman ps
コマンド出力には、実行中のコンテナーに関する基本情報を含むリストが表示されます。
閉じた後のコンテナの自動削除
--rm
を使用します podman run
のオプション コンテナを自動的に削除するには:
podman run --rm -dt -p 8080:80/tcp alpine:latest
コンテナの起動と停止
start
を使用する およびstop
既存のコンテナを開始および停止するコマンド。
podman start [container-id]
出力にはコンテナIDが表示されます。
podman stop [container-id]
停止したコンテナのIDが表示されます。
コンテナへの名前の割り当て
オプション--name
を使用して、実行中のコンテナに名前を付けることができます podman run
を使用 指図。たとえば、Alpine Linuxコンテナに名前を付けるには、次のコマンドを使用します。
podman run --name AlpineTest -dt -p 8080:80/tcp alpine:latest
下の画像は、 podman run
を示しています 成功しました。ポッドマンps
コマンドは実行中のPodmanコンテナを一覧表示し、名前は NAMES
に表示されます 列。
コンテナログの表示
podman logs
を使用して、実行時にコンテナログを表示します コマンド。
podman logs [container-name-or-id]
-l
を使用します 最新のコンテナのログを表示するフラグ。
コンテナの削除
Podmanコンテナを削除するには、まずコンテナが停止していることを確認してください。次に、 podman rm
を使用します コマンドの後にコンテナの名前またはIDが続きます。
podman rm [container-name-or-id]
以下の例は、 AlpineTestの削除を示しています。 コンテナ。
実行中または使用できないコンテナを削除するには、 -fを追加します オプション。
podman rm -f [container-name-or-id]
複数のコンテナを一度に削除するには、コンテナのIDをスペースで区切ってリストします。
podman rm [container-1-id container-2-id container-3-id]
Podmanポッド
ポッドは、リソースを共有するコンテナーのグループです。 Podmanポッドは、PodmanとDockerを区別する機能です。次のセクションでは、Podmanでの一般的なポッド操作のいくつかを説明します。
ポッドの一覧表示
以下のコマンドを使用して、システムで使用可能なすべてのポッドを一覧表示します。
podman pod ls
リストには、ポッドID、名前、ステータス、作成時刻、インフラID、およびポッドに含まれるコンテナの数が表示されます。
空のポッドの作成
次の構文を使用して、Podmanで空のポッドを作成します。
podman pod create
出力には、新しく作成されたポッドのIDが表示されます。
ポッドへのコンテナの追加
コンテナをポッドに追加するには、 --pod
を使用します docker run
のラベル :
podman run [options] --pod [pod-name-or-id] [image]
以下の例では、AlpineLinuxコンテナがID e06ed089b454でポッドに割り当てられています。 :
コンテナを使用したポッドの作成
Podmanは、コンテナを作成して、1回の podman run
で新しいポッドに追加できます。 指図。構文には、 --pod
が含まれます ラベル:
podman run [options] --pod new:[pod-name] [image]
以下の例では、 alpine:latest
を使用してコンテナーを実行しています。 画像を追加して、 AlpineTestという名前の新しいポッドに追加します :
podman pod ls
コマンド出力には、2つのコンテナを持つ新しいポッドが表示されます。
ポッドの開始、停止、削除
次のコマンドを使用してポッドを起動します。
podman pod start [pod-name-or-id]
ポッドを停止するには、次のコマンドを実行します:
podman pod stop [pod-name-or-id]
停止したポッドとそのコンテナを削除するには、次を使用します。
podman pod rm [pod-name-or-id]
実行中のコンテナを停止して削除してからポッドを削除するには、 -f
を使用します オプション:
podman pod rm -f [pod-name-or-id]
1つのコマンドで停止した複数のポッドを削除するには、ポッドIDをスペースで区切ってリストします。
podman pod rm -f [pod1-id pod2-id pod3-id]
潜在的なPodmanの問題とそのトラブルシューティング方法
このセクションでは、Podmanの一般的な問題をいくつかリストし、解決策を提供します。
特権ポートを公開できません
Podmanを使用すると、root以外のユーザーがコンテナを実行できます。ただし、非特権ポートへの転送のみに制限されています。 root以外のユーザーとして特権ポートに転送しようとすると、次のエラーが発生します。
この問題の解決策は、非特権ポートを選択するか、sudoを使用してコマンドを実行することです。
podman検索の問題
もう1つの一般的な問題は、podman search
です。 空の出力を返すコマンド。
この問題は通常、/etc/containers/registries.conf
に関連しています。 ファイル。テキストエディタでファイルを開きます:
sudo nano /etc/containers/registries.conf
ファイルの一番下までスクロールして、Podmanに検索するレジストリがあることを確認します。
ファイルにレジストリがリストされていない場合は、次の構文を使用して、RedHat、Fedora、Dockerなどの一般的なレジストリを追加できます。
unqualified-search-registries=["registry.access.redhat.com", "registry.fedoraproject.org", "docker.io"]
ファイルを保存します。 podman search
リストには、登録されたオンラインレジストリの結果を入力する必要があります。
エラー:無効な構成が提供されました
コンテナをポッドに追加すると、次のメッセージが表示される場合があります。
Error: invalid config provided: published or exposed ports must be defined when the pod is created: network cannot be configured when it is shared with a pod
この問題は、ポッドの作成時に定義されていないポートを持つコンテナーを追加しようとしたときに発生します。現在、Podmanはこれを許可していません。