4 Podmanコンテナ
Podmanを使用して、コンテナを作成、実行および管理します。
コンテナは、実行しているイメージのインスタンスです。 各コンテナは開始点としてイメージを使用し、作成時または実行時に指定されたパラメータを使用してランタイムにイメージをロードします。
Podmanは、Open Container Initiative仕様に準拠したイメージに基づいてコンテナを実行できます。 ほとんどのPodmanコマンドは、Docker CLIで使用可能な同等のコマンドに直接対応付けられています。
PodmanとDockerの主な違いは、Docker Engineはサービスとしてホストで実行され、そのサービスですべてのアクションが実行されますが、Podmanはスタンドアロン・ランタイムとして各操作が独立するように実行されることです。 この違いは、イメージおよびコンテナの操作に関するセキュリティ・モデルを変更するため重要です。
Podmanの操作は、システム上で特定のユーザーとして実行されているサービス・デーモンに依存しないため、PodmanはDockerよりも分離されたコンテナを提供します。 これは、Podmanをroot権限ありまたはroot権限なしで実行できることも意味します。
Podmanはユーザー・ネームスペースを尊重するため、単一のホスト上の複数のユーザーは、競合することなく独自のコンテナおよびローカル・イメージ・ストアを実行できます。 ユーザーのネームスペース内で実行されているコンテナは、ホスト・システム上のそのユーザーが使用できる権限に制限されるため、Podmanは、Dockerよりも一部のシナリオでより安全になります。
Podmanをroot権限のない標準ユーザーとして実行する場合、機能が制限される可能性があります。 たとえば、ほとんどのコンテナ・ネットワーキングは、ポート・マッピングおよびポート転送を使用して実現され、より広範なシステム・セキュリティを損なうことなくその機能を標準ユーザーが使用できるようにするには、回避策が必要です。 標準ユーザーに対して発生するこのような制限の多くは、提供されているネットワーク・ドライバを使用し、ポッド内でコンテナのグループを実行することで軽減できます。 ネットワーキングおよびPodmanの詳細は、Podmanネットワーキングを参照してください。 ポッドの詳細は、Podmanポッドを参照してください。
通常、ここで説明する手順は、Podmanがシステム管理者によって実行されるかどうかに関係なく同様に適用されます。
コンテナの作成
podman createコマンドを使用して、コンテナ・イメージからコンテナを作成します。
podman createコマンドを使用して、既存のイメージからコンテナを作成できます。 これによりコンテナが作成されますが、コンテナは起動しません。
まだローカル・システムにイメージが存在していない場合、Podmanはリモート・レジストリから一致するイメージを検索して、そのイメージを自動的にプルします。
コンテナが作成され、コンテナIDが出力に表示されます。 コンテナは、Createdの初期状態で作成されます。
コンテナの作成時には、特定のポッドに属するようにするかどうか、特定のネットワークまたはポート・マッピングを使用する必要があるかどうかなどのオプションも指定できます。 詳細は、podman help createコマンドを参照してください。 豊富なオプションは、コンテナに多様なランタイム機能を適用するために使用できます。
podman createコマンドの詳細は、podman-create(1)マニュアル・ページを参照してください。
例4-1イメージからのコンテナの作成
oraclelinux:9-slimイメージからoracleという名前のコンテナを作成します。
podman create --name oracle oraclelinux:9-slim
すべてのコンテナをリストして作成されたコンテナを表示します。
podman ps --all
次のようになります。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4fbb572f7dcb container-registry.oracle.com/os/oraclelinux:9-slim /bin/bash 1 minute ago Created oracle
コンテナの実行
Podmanは、コンテナを実行するための多くの方法を提供しています。 この例では、いくつかのオプションを示します。
podman runコマンドを使用して、コンテナを実行します。 まだ存在していないコンテナを実行すると、自動的にコンテナが作成されます。 コンテナが使用するイメージがローカルでは使用できない場合、Podmanはリモート・レジストリから一致するイメージを検索して、そのイメージを自動的にプルします。
-itフラグを使用すると、コンテナを作成して1ステップで接続できます。 -iフラグはコンテナを対話型にし、-tはローカル端末をコンテナに接続します。 このフラグの組合せは、通常、podman runコマンドの一部として指定されたシェルを実行するときに使用されます。
コンテナを起動し、単一のコマンドを実行できます。 コマンドが完了すると、コンテナは破棄されます。 これを行うには、podman runコマンドを--rmフラグとともに使用します。
コマンドに-dフラグを含めることで、引き続きバックグラウンド・デーモンとして実行されるPodmanコンテナを作成することもできます。
コンテナがプライマリ・プロセス(PID 1)としてシェルを実行し、それをデタッチする場合は、--stop-signal=SIGHUPコマンド・オプションを指定して実行し、コンテナを停止したときにシェルが正常に停止されるようにします。 多くのシェルが、コンテナを停止するときにデフォルトのSIGTERMシグナルを無視します。 正しい停止シグナルが使用されていない場合、コンテナの停止時に、コンテナは次のエラーを返すことがあります。
WARN[0010] StopSignal SIGTERM failed to stop container myol9 in 10 seconds, resorting to SIGKILL
podman runコマンドの詳細は、podman-run(1)マニュアル・ページを参照してください。
例4-2コンテナの実行およびシステム・コマンドの実行
podman run --rm oraclelinux:9-slim cat /etc/oracle-release
コンテナが起動され、システム・コマンドが完了すると(この例ではcatコマンド)、コンテナが破棄されます。 出力は次のようになります:
Oracle Linux Server release 9.6
例4-3コンテナの実行とBashシェルへの接続
podman run --name oracleshell -it oraclelinux:9-slim /bin/bash
コンテナが起動し、Bashシェルが起動します。 出力は次のようになります:
bash-5.1#
シェルでシステムコマンドを実行できます。 たとえば:
cat /etc/oracle-release
出力は次のようになります:
Oracle Linux Server release 9.6
コンテナは、exitと入力して切断するとすぐに停止します。
コンテナを再起動して再度接続するには、podmand startコマンドを実行します。 たとえば:
podman start -ai oracleshell
例4-4バックグラウンドでのコンテナの実行
podman run -d --name oracledaemon oraclelinux:9-slim /bin/bash -c 'sleep 1000'
例4-5プライマリ・プロセスとしてのシェルを使用したコンテナの実行
podman run --stop-signal SIGHUP --name myol9 oraclelinux:9-slim
コンテナでのFIPSモードの有効化
コンテナをFIPSモードで実行するには、まずOracle Linuxホスト・システムでFIPSモードを有効にする必要があります。
Oracle LinuxホストでFIPSモードを有効にすると、PodmanはOracle LinuxコンテナをFIPSモードで自動的に実行します。
Oracle LinuxホストでFIPSモードを有効にする方法の詳細は、次のドキュメントを参照してください。
ノート:
Oracleは、slim-fipsタグを使用してFIPS準拠のコンテナ・イメージを提供します。 FIPS準拠のタグが付いたコンテナ・イメージには、準拠した暗号化パッケージ・バージョンおよびコンテナFIPSモードに必要な初期イメージ設定が含まれています。 これらのイメージを使用する場合、FIPSモードのコンテナを構成するために追加のステップを実行する必要はありません。 詳細は、slimタグを参照してください。
コンテナのリスト表示と監視
Podmanには、コンテナをリストおよびモニターするための様々なコマンドが含まれています。 この例では、いくつかのオプションを示します。
例4-6実行中のコンテナのリスト
podman psコマンドを使用して、実行中のすべてのPodmanコンテナをリストできます。 --allフラグを使用して、停止したコンテナおよび一時停止したコンテナも表示します。
podman ps --all
このコマンドは、次のような出力を表示します。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dfb0dc74293a container-registry.oracle.com/os/oraclelinux:9-slim /bin/bash 17 minutes ago Exited (0) 12 minutes ago oracleshell
1dd4aff270bb container-registry.oracle.com/os/oraclelinux:9-slim /bin/bash -c slee... 10 minutes ago Up 10 minutes oracledaemon
例4-7コンテナ・ログの表示
すでにアクションを実行したコンテナによって生成されたログを確認するには、podman logsコマンドをコンテナのNAMEまたはCONTAINER IDとともに使用します。 たとえば:
podman logs oracleshell
例4-8コンテナ・ハードウェア・リソースの表示
実行中のコンテナのハードウェア・リソース使用率統計を確認するには、podman statsコマンドを使用します。 たとえば:
podman stats oracleshell
このコマンドは、次のような出力を提供します。
ID NAME CPU % MEM USAGE / LIMIT MEM % NET IO BLOCK IO PIDS CPU TIME AVG CPU %
bae740b48b53 oracleshell 0.00% 0B / 0B 0.00% 0B / 0B 0B / 0B 0 0s 0.00%
ノート:
root権限なしでコンテナの統計を確認するには、ホスト・システムでcgroups v2を有効にする必要があります。 これは、Oracle Linux 8ホストではデフォルトで有効になっていませんが、Oracle Linux 9およびOracle Linux 10ホストではデフォルトで有効になっています。 cgroups v2の詳細は、Oracle Linuxでのラン・コントロール・グループ・バージョン2を参照してください。
コンテナの一時停止と再開
podman pauseおよびpodman unpauseコマンドを使用して、Podmanコンテナを一時停止および再開します。
ワークロードを破棄せずにコンテナの操作を一時的に停止する必要がある場合は、podman pauseコマンドを使用してコンテナ名またはIDを指定します。
podman pauseコマンドを実行すると、コンテナ内の実行中のすべてのプロセスが現在の状態で凍結されます。 コンテナが停止された場所を再開する準備ができたら、コンテナ名またはIDを指定してpodman unpauseコマンドを使用して、その時点から前の操作を続行するようにコンテナに指示できます。
podman pauseコマンドの詳細は、podman-pause(1)マニュアル・ページを参照してください。 podman unpauseコマンドの詳細は、podman-unpause(1)マニュアル・ページを参照してください。
例4-9コンテナの一時停止
podman pause mycontainer
例4-10コンテナの一時停止解除
podman unpause mycontainer
コンテナの停止と削除
podman stopおよびpodman rmコマンドを使用して、Podmanコンテナを停止および削除します。
コンテナを停止するには、podman stopコマンドを名前またはコンテナIDとともに使用します。 メンテナンスのためにサーバーを一時的に停止する必要がある場合は、--allフラグをpodman stopコマンドに追加することで、まだ一時停止していない実行中のすべてのコンテナを停止できます。
コンテナを削除するには、コンテナ名またはIDを指定してpodman rmコマンドを使用します。 --allフラグを使用して、すべてのコンテナを削除することもできます。
podman stopコマンドの詳細は、podman-stop(1)マニュアル・ページを参照してください。 podman rmコマンドの詳細は、podman-rm(1)マニュアル・ページを参照してください。
例4-11コンテナの停止
podman stop mycontainer
例4-12すべてのコンテナの停止
podman stop --all
例4-13コンテナの削除
podman rm mycontainer
例4-14すべてのコンテナの削除
podman rm --all