Podman - コマンド

提供:MochiuWiki : SUSE, EC, PCB
2024年8月6日 (火) 10:47時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == <br><br> == Podmanコマンド == ==== ログイン ==== podman loguin -u <ユーザ名> -v <登録するURL> # 例: Docker Hubにログインする場合 podman login -u <Docker Hubのユーザ名> -v https://docker.io podman login -u <Docker Hubのユーザ名> -v https://index.docker.io/v2/ <br> 認証情報は、/run/user/$UID/containers/auth.jsonファイルに保存される。<br> <br> Docker Hubにログインすることにより、Podma…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要



Podmanコマンド

ログイン

podman loguin -u <ユーザ名> -v <登録するURL>

# 例: Docker Hubにログインする場合
podman login -u <Docker Hubのユーザ名> -v https://docker.io
podman login -u <Docker Hubのユーザ名> -v https://index.docker.io/v2/


認証情報は、/run/user/$UID/containers/auth.jsonファイルに保存される。

Docker Hubにログインすることにより、PodmanコマンドでDocker Hubからイメージを検索およびダウンロードすることができる。

イメージの検索

Quay (デフォルト) および他のWebサイト (登録している場合) からイメージを検索およびダウンロードする。

podman search <イメージ名>


イメージのダウンロード

podman pull <イメージ名>

# 例: Ubuntuの公式イメージをダウンロード
podman pull ubuntu

# 例: Docker HubからApache2のイメージをダウンロード
podman pull docker.io/httpd:latest


ダウンロードしたイメージの一覧の表示

podman images


イメージの削除

podman image rm <イメージID>


Podmanイメージを全て削除する。

podman image rm -f $(podman images -q)


コンテナの削除

podman container rm <コンテナID>


Podmanコンテナを全て削除する。

podman container rm -f $(podman container ps -a -q)


コンテナの作成

  • -d または --detach
    コンテナをバックグラウンドで実行して、コンテナIDを表示する。
  • -i または --interactive
    アタッチされていない場合でも、STDINを開く。
  • -t または --tty
    コンテナに擬似TTYを割り当てる。


# コンテナを作成して、フォアグラウンドで起動
podman run --name <コンテナ名> <イメージ名>

# -dオプションを付加して、コンテナをバックグラウンドで起動
# -tオプションを付加して、コンテナに擬似ttyを割り当てる
podman run -dt --name <コンテナ名> <イメージ名>

# 例: イメージ名はopensuse、コンテナ名はsuse01として起動
podman run -dit --name suse01 opensuse /bin/bash

# 例: イメージ名はhttpd、コンテナ名はwwwとして起動
#     また、コンテナ内の80番ポートをホスト側の8080番にポートフォワーディングしている
podman run -dt -p 8080:80 --name www httpd


コンテナのプロセス確認

# 動作中のコンテナのみ表示
podman ps

# 全てのコンテナを表示
podman ps -a  または podman ps --all


コンテナの起動

podman start <コンテナ名>  または  podman start <コンテナID>


停止中のコンテナをインタラクティブに実行することもできる。

  • -aオプション
    コンテナにアタッチすることを指定する。
    これにより、コンテナの標準入力、標準出力、標準エラー出力がホストのターミナルに接続される。
  • -iオプション
    インタラクティブモードを有効にする。
    これにより、コンテナの標準入力に対してコマンドを入力できる。


podman start -ai <コンテナ名>  または  podman start -ai <コンテナID>


コンテナの再起動

podman restart <コンテナ名>  または  podman restart <コンテナID>


コンテナの停止

コンテナが停止している時は、STATUSでExitedとなる。

podman stop <コンテナ名>  または  podman stop <コンテナID>


コンテナのログ確認

例えば、コンテナが起動せずに失敗する (exited) する場合、ログを確認する。

podman logs <コンテナID>


コンテナに名前を付ける

podman commit <コンテナID> <任意のコンテナ名>


コマンドの実行

起動中のコンテナにコマンドを実行する。
コンテナ内で追加のタスクを実行したり、シェルを起動する場合等に使用する。

execは複数の異なるコマンドを同時に実行できる。

メインプロセスとは独立して動作して、execで起動したプロセスが終了してもコンテナは継続して実行される。
これは、デバッグやメンテナンス作業に便利である。

podman exec -it <コンテナ名> <コンテナ内で実行可能なコマンド>

# 例: コンテナ名 suse01, コマンド /bin/bash を実行する
podman exec -it suse01 /bin/bash


コンテナにアタッチ

起動中のコンテナにアタッチする。
(実行中のコンテナのメインプロセスに接続する)

attachは、1つのプロセスにのみ接続できる。

コンテナの標準入力、標準出力、標準エラー出力にアクセスすることができる。
ただし、コンテナのメインプロセスが終了すると、コンテナも停止することに注意する。

一般的に、既に実行中のコンテナの出力を監視、または、対話的に操作する場合等に使用する。

podman attach <コンテナ名>

# 例: 標準入力を無効にしてアタッチする
# コンテナの出力のみを見る場合に有用である
podman attach --no-stdin my_container

# 例: デタッチするためのキーの組み合わせを指定する
# デフォルトは、[Ctrl] + [P]キー および [Ctrl] + [Q]キーである
podman attach --detach-keys="ctrl-d" my_container

# 例: 最後に起動したコンテナにアタッチする
podman attach --latest


コンテナとホスト間のファイルコピー

ホストからコンテナにファイルをコピーする。

podman cp <ホストのファイルパス> <コンテナ名>:<コンテナ内の保存先のパス>
# または
podman cp <ホストのファイルパス> <コンテナID>:<コンテナ内の保存先のパス>

# 例:
podman cp sample.txt my_suse:/tmp  # コンテナを実行
podman exec -it my_suse /bin/bash  # cd /tmp && lsコマンドを実行してファイルを確認


コンテナからホストにファイルをコピーする。

podman cp <コンテナ名>:<コンテナ内のファイルパス> <ホストの保存先のパス>
# または
podman cp <コンテナID>:<コンテナ内のファイルパス> <ホストの保存先のパス>

# 例:
podman cp my_suse:/tmp/sample.txt ~/Downloads


ボリュームのマウント

コンテナにボリュームをマウントする。

-vオプションの代わりに--mountオプションを付加することが推奨されている。
--mountオプションは、キーバリュー形式で各要素が指定できる。

podman container run -it --mount type=<volume, bind, tmpfsのいずれかを指定>,src=<ボリューム名>,dst=<コンテナ内のパス> <コンテナ名/イメージ名:タグ名>


--rmオプションを付加することにより、匿名ボリュームの場合はコンテナ停止と同時にボリュームも破棄される。
名前付きボリュームの場合は、--rmオプションを付加しても、ボリュームは破棄されない。

mountオプションについて
mountオプションで指定できる種類 説明
type volumebindtmpfsを指定する。
src sourceと記述することもできる。

匿名ボリュームの場合は、省略する。
名前付きボリュームの場合は、その名前を記述する。
バインドマウントの場合は、ホスト側のディレクトリを指定する。
dst destinationtargetと記述することもできる。

コンテナ側のディレクトリを指定する。


  • 匿名ボリューム
    ホスト側に/var/lib/podman/volumesディレクトリ内に領域が確保されて、指定したコンテナ内のディレクトリと共有される。
    識別のためにハッシュ値が振られており、同一のネットワークからそのハッシュ値でアクセスすることができる。
    podman container run --mount type=volume,dst=<コンテナ内のディレクトリパス 例: /tmp/sample> <コンテナ名/イメージ名:タグ名>

  • 名前付きボリューム
    匿名ボリュームと同様、ホスト側には/var/lib/podman/volumesディレクトリ内に領域が確保されて、指定したコンテナ内のディレクトリと共有される。
    ホスト名を指定するため、同一のネットワークからそのホスト名でアクセスすることができる。
    podman container run --mount type=volume,src=<ボリューム名>,dst=<ホスト名>:<コンテナ内のディレクトリパス 例: /tmp/sample> <コンテナ名/イメージ名:タグ名>

  • バインドマウント
    ホスト側のカレントディレクトリ内にある指定したディレクトリとコンテナ側の指定したディレクトリが共有される。
    podman container run --mount type=bind,src=<ホスト側のディレクトリパス 例: $PWD/host-sample>,dst=<コンテナ内のディレクトリパス 例: /tmp/container-sample> <コンテナ名/イメージ名:タグ名>


ホスト側がSELinuxを使用している場合は、ボリュームのマウントに:Zオプションを付加する必要がある。
これは、Podmanにボリュームのコンテンツをコンテナ内のラベルと一致するようにラベルを変更するよう指示するものである。

podman run -d --rm -v /<ホスト側のディレクトリのパス 1>/:/<コンテナ側のディレクトリのパス 1>:Z -v /<ホスト側のディレクトリのパス 2>/:/<コンテナ側のディレクトリのパス 2>:Z


ボリュームのアンマウント

podman volume umount <ボリューム名>


特定のコンテナにマウントされているボリュームをアンマウントする。

podman volume umount <コンテナID>


ボリュームの削除

podman volume rm <ボリューム名>


使用されていないボリュームを削除する。

podman volume prune


ボリュームを全て削除する。

podman volume rm $(podman volume ls -q)


セキュリティオプション

podman run --security-opt <オプション> -d <イメージ名>


AppArmorプロファイルの作成手順を、以下に示す。

  • カスタムAppArmorプロファイルの作成
    AppArmorプロファイルは、任意のプログラムが必要とする全てのファイルアクセス許可を明示的に許可する必要がある。
  • プロファイルの保存と読み込み
    作成したAppArmorプロファイルをホストPCに保存して、AppArmorに読み込ませる。
    一般的に、/etc/apparmor.dディレクトリにプロファイルを配置して、apparmor_parserコマンドでプロファイルを読み込むことで行う。
  • Podmanコンテナの起動時にプロファイルを指定する
    コンテナを起動する際に、--security-optオプションを付加して、カスタムAppArmorプロファイルを指定する。
    例: my_php_fpm_profileという名前のプロファイルを適用する場合
    podman run --security-opt apparmor=<AppArmorプロファイル名> -d <イメージ名>


コンテナのバックアップ

コンテナをイメージ化してバックアップする。

  1. コンテナを新しいメージとして作成する。
    podman commit <コンテナID> <任意のイメージ名>
  2. 作成したイメージをファイルとして保存する。
    podman save <上記で入力した任意のイメージ名> > <バックアップするファイル名>.tar


バックアップしたコンテナの復元

podman load -i <バックアップしたファイル名>.tar


正常に復元されているかどうかを確認する。

podman images


Podmanに関するプロセスを全て終了する

pkillコマンドは、Linuxの基本コマンドであり、プロセスの名前や他の属性に基づいてプロセスを終了するために使用する。
これにより、podmanという名前のプロセス (Podmanが起動しているプロセス) を全て終了することができる。

pkill podman


例えば、問題が発生した場合や特定の操作が必要な場合、全てのPodmanプロセスを終了させる手段として使用されることがある。
ただし、注意が必要であり、実行中のコンテナが強制的に停止される可能性がある点に留意する必要がある。