RESTful APIが実装されているということで。
正直、あまり良くわかっていない部分が御座いまして、認識が不完全かと存じますが。
PodmanのRESTful APIが実際にどのようなものか、見てみたいと思います。
目次
検証環境はWindows 10
検証する環境ですが、Windows 10になります。
こちらの手順でPodmanをインストール後。
1つのポッドの中で、MongoDBコンテナとPostgreSQLコンテナを動かしています。
こちらのポッドの情報を、RESTful APIで取得してみたいと思います。
Podman system service
https://docs.podman.io/en/latest/markdown/podman-system-service.1.html
こちらの公式情報より。
REST APIを使用するにあたり、通常はPodman system serviceでAPIコールの受け口となるサービスを作成しますが。
Windows版ということで、サービスを作るコマンドは実装されていないようです。※22.11.29現在。
ということでAPIコールできませんでした。
・・・・
というのも面白くないので、なんとか考えてみようと思います。
Podman systemの情報からヒントを得ようと思います。
podman system info
実行すると、podman systemのホスト情報が表示されますが。
os: linux
remoteSocket:
exists: true
path: /run/user/1000/podman/podman.sock
security:
apparmorEnabled: false
これは、Podman machineの実装内のUnix socket情報かと思います。
現状、Windows版のPodmanは、podman system serviceが実装されておりませんが。
たとえばpodmanコマンドを実行した場合など、内部的にpodman machineに対してREST APIを使用してアクセスしているようです。
その確認は、こちらの記事になります。
ここでは、podman machineの内部から、REST APIをコールしてみたいと思います。
Podman machine内部からREST APIをコールしてみる
podmanの具体的なRESTful APIコールのサンプルはこちらの記事になります。
https://www.redhat.com/sysadmin/podman-rest-api
こちらを参考に、実際にAPIをコールしてみたいと思います。
まずは、podman machine sshコマンドで、ホストOSのコンソールに入りました。
podman machine ssh
podman system info情報から、unix socketが存在するか実際に確認します。
ls -al /run/user/1000/podman/podman.sock
現在、sv1-podという名称のポッドが動いている状態です。
ポッドの情報の取得(inspect)
RESTful APIでポッドの情報を取得してみましょう。
出力結果としてJSONを選択してみました。
curl --unix-socket /run/user/1000/podman/podman.sock \
http://d/v4.3.0/libpod/pods/sv1-pod/json
ポッドの停止
先ほど確認したポッドを停止してみました。
curl -XPOST --unix-socket /run/user/1000/podman/podman.sock \
-H content-type:application/json \
http://d/v4.3.0/libpod/pods/sv1-pod/stop
podmanコマンドで確認すると、確かにポッドが停止しています。
ポッドの開始
APIのstopをstartに変更して実行します。
curl -XPOST --unix-socket /run/user/1000/podman/podman.sock \
-H content-type:application/json \
http://d/v4.3.0/libpod/pods/sv1-pod/start
簡単な確認ではありましたが。
確かに、curlコマンドを使用して、httpリクエストをunix socketにポストすることで、実際にポッドの操作が可能であることがわかりました。
PodmanのAPIリファレンス
PodmanのAPIリファレンスはこちらのようです。
https://docs.podman.io/en/latest/Reference.html
podmanコマンドと同様、ポッド、イメージ、コンテナ、ボリューム等に対する操作が可能のようです。
APIということで、自作のアプリケーションや、Podman Desktopの機能拡張等による、プログラムの内部からの操作が、主な使用目的になると思います。
こちらのリファレンスを参考に、プログラミングが必要になります。
Windows上からREST APIをコールできるかどうか
Windows版はpodman system serviceコマンドが実装されていませんので。
公式な方法では無いと思いますが。
podman machineのunix socketに、Windows側からアクセスできないかどうか確認してみましょう。
Windowsのファイルエクスプローラーから、WSLファイルシステムにアクセスします。
\\wsl$
podman machineが動作していれば、このようにファイルシステムが見えると思います。
unix socketはこちらになります。
/run/user/1000/podman/podman.sock
フォルダ階層を進みます。ここまでは進めました。/run/userまでです。
パーミッションを確認すると、700のため、user.user以外のユーザは入れない状態です。
パーミッションとオーナーを変更してみましたが。
chmod go+rx 1000
chown root.root 1000
オーナーの変更はエラーでできません。
少し調べたところ。
https://github.com/microsoft/WSL/issues/5718
WSL側の問題のようですが、解決していない状況のようです。
正確な情報ではない可能性が御座いますが、何かLxssManagerまわりの問題の可能性があるそうです。
このような感じで、Windows側からPodmanのRESTful APIを直接コールするのは、まだ難しい状況かもしれません。※22.11.29現在
このあたりは、Podmanの完成度の向上を待たせて頂く状況かもしれません。
Windowsに関しましては、コンテナシステムの選択肢は、macOS・Linuxよりも少なめな状況かと思います。
Podman本体の完成度に加えまして、WSLの完成度の向上にも期待したいと思います。
え?Windows 11ですか?