Podmanの運用・保守系コマンド コピペ用

Podmanの運用・保守で、よく使うコマンドをコピペできるように。

Podmanのコマンドを、さらっとまとめて置きたいと思います。

ポッドの作り直しでよく使うものや。

バックアップ関係と、ボリューム操作関係は、マイグレーションで必要でして。

自分用で申し訳ありませんが。(説明が不足している事や、知識・認識不足の謝罪

※22.11.13追記:イメージ検索、マシン初期化、ボリュームのマウント関連コマンドを追記しました。運用・保守系コマンドに記事名を変えました。


ポッドやコンテナの作成

最初にポッドをcreateで作成。その際、公開するポート番号を指定しておきます。

その後、必要なコンテナを、–pod=オプションでポッドに紐づけてrunで実行する流れが基本のようです。

次のスクリプトはWordPressの起動例になります。

オプション指定の順番は、個人的に見やすい順番にしています。(悩んだ挙げ句

–pod、–nameを最初に指定。その後-eの環境変数を並べて。最後に-dでデーモン化と使用するイメージのリポジトリ名とタグ名になります。個人的な好みです。

タグの探し方は、次のイメージ検索のコマンドで探せます。

rem WordPress用ポッド作成 Windowsコマンド版
podman pod create --name wp-pod -p 8080:80/tcp
rem Mariadbコンテナ作成
podman run --restart=always ^
--pod=wp-pod ^
--name=wp-db ^
-e MYSQL_ROOT_PASSWORD="myrootpass" ^
-e MYSQL_DATABASE="wp" ^
-e MYSQL_USER="wordpress" ^
-e MYSQL_PASSWORD="w0rdpr3ss" ^
-d docker.io/library/mariadb:latest
rem WordPressコンテナ作成
podman run --restart=always ^
--pod=wp-pod ^
--name=wp-web ^
-e WORDPRESS_DB_NAME="wp" ^
-e WORDPRESS_DB_USER="wordpress" ^
-e WORDPRESS_DB_PASSWORD="w0rdpr3ss" ^
-e WORDPRESS_DB_HOST="127.0.0.1" ^
-d docker.io/library/wordpress:latest

他のポッドやコンテナの作成は、こちらの記事を御覧ください。

Podmanのポッドとコンテナ作成手順の覚書
以前作成しました、Podman用のKubernetes yamlファイルですが。 Windows 10でPodmanを動か...

イメージ検索

古いバージョンや実装違いのイメージを探したいとき、タグ表示は必須です。

公式やスター付きも探せます。

dockerコマンドと比較したことはありませんが、docker.ioに加えて、quay.ioやRedHat関連のレジストリからイメージを探すことが可能です。

ちなみにquayは波止場や埠頭という意味だそうです(ビーン

rem たとえばnextcloudイメージを探したいとき
podman search nextcloud
rem 詳細欄をすべて表示
podman search --no-trunc nextcloud
rem 公式のNextcloudイメージを探したい場合
podman search --filter=is-official nextcloud
rem 点数(星、スター)、オフィシャルかどうか、互換性も表示
podman search --compatible nextcloud
rem タグ表示
podman search --list-tags nextcloud

詳細はこちらの記事になります。

Podmanコマンドで本気でコンテナイメージを探すには
皆さんPodmanやDockerでコンテナを起動したいとき。 使用したいコンテナをどう探しているのでしょう? Docker Hu...

ポッドの全削除

新たにポッドとコンテナを作り直す場合に使用します。

rem コンテナ全削除
podman container stop --all
podman container rm --all
rem ポッドの全削除
podman pod stop --all
podman pod rm --all

イメージは残りますので、ダウンロード・ビルドしたイメージで即時にコンテナが作成できます。

ポッドを作り直した場合の、コンテナ内のデータですが。

名前付きボリュームが残っていれば、コンテナにマウントすることでデータを復元することが可能です。

匿名ボリュームは消える場合があるため、データを書き戻す必要があります。


マシンの再初期化

基本的にマシンは1つですし、マシンを停止する理由はあまりありません。

sshでコンソールに接続して、Linuxのシェルを使えるのは少し便利です。

rem コンソール
podman machine ssh
rem マシン一覧
podman machine ls
rem マシン停止
podman machine stop
rem マシン起動
podman machine start

一方、コンテナやポッドにエラーが発生した場合、マシンを初期化して直る場合があります。

以下、そのコマンドになります。

rem マシン停止
podman machine stop
rem マシン削除
podman machine rm
rem WSL2シャットダウン
wsl --shutdown
rem WSLベアメタル削除
wsl --list
wsl --unregister podman-machine-default
wsl --list
rem マシン再構築
podman machine init
rem マシン起動
podman machine start

Windows版Podmanの環境再構築について、詳細はこちらになります。

Windows版Podman.exeの環境を入れ直すには
先日導入しました、WSL2版のPodmanですが。 Windows版Podman.exeでNextcloudサーバ簡単構築 202...

ログ表示

ポッドまたはコンテナのログ表示です。トラブル時は必ず見ます。

ポッドのログの統合表示のほうは、うまく表示されない場合がありますので、コンテナごと表示が基本かもしれません。

ポッド名、コンテナ名の部分は変更してから実行して下さい。

rem ポッドのリアルタイムログ表示
podman pod logs -f nc-pod
rem コンテナのリアルタイムログ表示
podman container logs -f nc-web

ポッドとコンテナの名前の付け方の例はこちらの記事になります。

Podmanのポッドとコンテナ作成手順の覚書
以前作成しました、Podman用のKubernetes yamlファイルですが。 Windows 10でPodmanを動か...

シェル実行

コンテナ名は適宜変更して下さい。

rem コンテナでシェル実行
podman exec -it nc-web bash

execを使う場合、ボリュームは予めコンテナ起動時にマウントしておく必要があると思います。

よって、別のボリュームにアクセスしたい場合は、runコマンドで別のコンテナを作成します。


ボリュームをマウントした操作

匿名ボリュームのデータをバックアップ・リストアしたり。

名前付きボリュームを作成し、コンテナ起動前に予めデータを入れておいたり。

そのような場合、コマンドをコピペしてちょこちょこ変更して使う感じです。

下記のコマンドは–rmオプションで、都度コンテナを消しています。

複雑な操作をしたい場合は、コンテナを消さず、execで作ったコンテナにアクセスしたほうが良いかもしれません。

rem 匿名ボリューム
rem 別コンテナのマウント先の一覧表示
podman run --rm --volumes-from sv1-pgsql -v .:/backup fedora ls -al /var/lib/postgresql/data
rem 別コンテナのボリュームのバックアップ
rem バックアップ前にコンテナを停止したほうが良さそうです
podman run --rm --volumes-from sv1-pgsql -v .:/backup fedora tar zcvf /backup/pgsql.tar.gz /var/lib/postgresql/data
rem 別コンテナのボリュームのリストア
podman run --rm --volumes-from sv1-pgsql -v .:/backup fedora bash -c "cd / && tar zxvf 
rem 名前付きボリューム
rem 名前付きボリュームのマウント先の一覧表示
podman run --rm -v sv1-pgsql-vol:/var/lib/postgresql/data -v .:/backup fedora ls -al /var/lib/postgresql/data

同じディレクトリ(例えば/data/db)のデータを、匿名ボリュームから名前付きボリュームに直接コピーってできるのでしょうか?私には方法がわかりません。

よって、ディレクトリ1つについて、必ず1つのコンテナに1つのボリュームをマウントして操作する必要があると思います。

具体的には、いちどtar.gzファイル等にアーカイブしてから、別のボリュームをマウントして展開する必要があるように思えます。

ボリューム操作の具体的な例はこちらです。

Podmanの名前付きボリュームでコンテナ間でデータをやり取りするには
先ほど、MongoDBのデータを、DockerからPodmanへ移行したのですが。 どうもダンプしたデータが古く、最新ではなか...

ポッド一覧表示・削除

複数のポッドを同時に運用する場合、stopやstart、rm等はポッド名を指定して実行し、他のポッドの影響が出ないようにします。

rem ポッド一覧
podman pod ls
rem ポッド全停止
podman pod stop --all
rem ポッド全削除 停止してから実行
podman pod rm --all
rem ポッド強制全削除
podman pod rm --force --all

コンテナ一覧表示・削除

コンテナ一覧は、-aオプションを付けないと、止まっているコンテンが表示されないのですね。最近気づきました。

というわけで、コンテナ一覧は-aオプション必須だと思います。

コンテナのstop、startとrmにつきましても、本格的に運用する場合は、コンテナ名を並べて指定する必要があると思います。

rem コンテナ一覧
rem 停止しているコンテナ表示は-aオプションが必要
podman container ls -a
rem コンテナ全停止
podman container stop --all
rem コンテナ全削除
podman container rm --all
rem コンテナ強制全削除
podman container rm --force --all
rem 動いてないコンテナをお掃除
podman container prune

イメージ一覧表示・削除

rem イメージ一覧
podman image ls
rem 使用していないイメージをお掃除
podman image prune
rem イメージ全削除
podman image rm --all
rem イメージ強制全削除
podman image rm --force --all

私は独自のイメージを作った事はあまりありませんので、ダウンロードさせて頂いている状況です。

イメージの作者の皆様ありがとうございます!

イメージをビルドする例はこちらの記事になります。

Podman.exeで日本語ロケールのPostgreSQLポッドを作成するには 2022年11月版
Windows版Podman.exeを使って。 日本語ロケールのPostgreSQLイメージをビルドして。 日本語版のP...

ボリューム一覧表示・削除

rem イメージ一覧
podman volume ls
rem 不要なボリューム削除
podman volume prune
rem ボリューム全削除
podman volume rm --all

ボリュームは、コンテナからマウントされていて、データが入っている大切な領域かと思いますが。

直接コマンドで操作することはあまりないと思います。

コンテナを消しても、ボリュームが残っていると、コンテナの内容は維持されると思います。主にデータを永続化する目的と、コンテナ間でデータを共有する目的で使用されます。

ボリュームの中のデータをバックアップする場合、コンテナ経由で行うため、ボリュームを直接操作する必要は無さそうです。

匿名ボリュームは、コンテナ起動時に自動的に作成されます。

名前付きボリュームは、明示的に消さなければ消えませんので、ポッドを作り直す場合にデータを持ち越す事が可能です。ポッドを頻繁に作り直したい場合、名前付きボリュームのほうが便利かもしれません。


WSL2のポートフォワード

Windows版の場合、ポッド起動後にポートフォワードを有効にすることで、他のPCからサービスへアクセス可能となります。

※22.11.25修正:IPアドレスを取り出す構文に不具合がありましたので修正しました。不具合の内容:IPアドレスが0で終わる場合、正しく取り出せませんでした。構文に\.を追加しました。

※22.12.8追記:ファイアウォールのルールが無限に追加されてしまうため、ルールが存在するか判定するIF文を追加しました。

rem podmanマシン起動
podman machine start

rem podmanマシンのIPアドレス取得
FOR /F %%i in ('podman.exe machine ssh "cat /proc/net/fib_trie | sed -e 's/^[ \-\|\+]*[ \-]*//' | grep '[\d]*\.' |grep -v -e '0.0.0.0' -e '^127\.[\d]*' -e '\/' -e '0$' -e '255$'"') DO set IPADR=%%i

rem ポッド起動
set pod=wp-pod
podman pod start %pod%

rem ポートフォワード
set PTNB=8080
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=%PTNB% connectaddress=%IPADR% connectport=%PTNB%

rem 受信ルール
netsh advfirewall firewall show rule name= "TCP %PTNB%" dir=in
IF %ERRORLEVEL% GEQ 1 (
netsh advfirewall firewall add rule name= "TCP %PTNB%" dir=in action=allow protocol=TCP localport=%PTNB%
)

rem 送信ルール
netsh advfirewall firewall show rule name= "TCP %PTNB%" dir=out
IF %ERRORLEVEL% GEQ 1 (
netsh advfirewall firewall add rule name= "TCP %PTNB%" dir=out action=allow protocol=TCP localport=%PTNB%
)

こちらの記事になります。

WSL2版Podman.exeのWebアプリにスマートフォンや他のPCからアクセスするには
Windows 10 PCへ、WSL2に対応したPodman.exeをインストールして。 Nextcloudを動かしてみました。 ...

ポッドのバックアップ・リストア

ポッドとコンテナを作成するためのyamlファイルのほか、イメージ、コンテナ内のボリューム、そしてボリューム以外のデータ等をバックアップしておけば大丈夫かなと思います。

rem wp-podのバックアップ
rem イメージをバックアップ
podman image save -o wordpress-image.tar docker.io/library/wordpress:latest
podman image save -o mariadb-image.tar docker.io/library/mariadb:latest
rem ポッドとコンテナ設定yamlの生成
podman generate kube wp-pod > wp-pod.yaml
rem コンテナのイメージ化と保存
podman container commit wp-web wp-web-image
podman image save -o wp-web-image.tar wp-web-image
podman container commit wp-db wp-db-image
podman image save -o wp-db-image.tar wp-db-image
podman container export --output="wp-db.tar" wp-db
rem wp-podポッドのボリュームバックアップ
podman container stop wp-web wp-db
podman run --rm --volumes-from wp-web -v .:/backup fedora tar zcvf /backup/html.tar.gz /var/www/html
podman run --rm --volumes-from wp-db -v .:/backup fedora tar zcvf /backup/mysql.tar.gz /var/lib/mysql
podman container start wp-web wp-db

※22.11.20追記:データベースコンテナのボリュームをバックアップしていますが、これはリストアできるものではありませんのでご注意下さい。データベースは別途、データをダンプする必要が御座います。

こちらの別記事を御覧ください。

Windows版Podman.exeのポッドのバックアップ・リストア手順
Windows版と書きましたが、MacOSもLinuxも流れとコマンドは一緒かもしれません。先日導入しました、Podman.exeのコマンド...

デバッグログオプション

–log-level=debug オプションを付けてコマンドを実行します。

動きが怪しい時、想定した正しい動作をしているかどうか、確認のために使用する感じでしょうか。

rem オプション追加 --log-level=debug
rem 詳細なログ付きで 日本語版PostgreSQLイメージ作成
podman image build --log-level=debug -f Containerfile.txt -t postgres_ja

何か設定が間違っていたりする場合、ヒントが得られるかもしれません。

Podmanのデバッグログを出力するには
次のオプションのようです。 --log-level=debug Windows版ですが。 イメージのビルドに6分くらいかかっていま...

まあ、完璧に、自分が使うコピペ用の記事でした。

ええ?Podman Desktop使うから、要らないですって?

Podman DesktopでWindows版Podman.exeの状態を確認してみました
Windows版Podman.exeで先程起動しましたNextcloudのポッド。 Windows版Podman.exeでNext...

実際に運用中、何か有意なコマンドがありましたら、また書き足そうと思います。

スポンサーリンク

フォローする

スポンサーリンク