RESTful APIが実装されているということで。
正直、あまり良くわかっていない部分が御座いまして、認識が不完全かと存じますが。
PodmanのRESTful APIが実際にどのようなものか、見てみたいと思います。
目次
検証環境はWindows 10
検証する環境ですが、Windows 10になります。
こちらの手順でPodmanをインストール後。
1つのポッドの中で、MongoDBコンテナとPostgreSQLコンテナを動かしています。
こちらのポッドの情報を、RESTful APIで取得してみたいと思います。
Podman system service
こちらの公式情報より。
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コールのサンプルはこちらの記事になります。
こちらを参考に、実際に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 \
ポッドの停止
先ほど確認したポッドを停止してみました。
curl -XPOST --unix-socket /run/user/1000/podman/podman.sock \
-H content-type:application/json \
podmanコマンドで確認すると、確かにポッドが停止しています。
ポッドの開始
APIのstopをstartに変更して実行します。
curl -XPOST --unix-socket /run/user/1000/podman/podman.sock \
-H content-type:application/json \
簡単な確認ではありましたが。
確かに、curlコマンドを使用して、httpリクエストをunix socketにポストすることで、実際にポッドの操作が可能であることがわかりました。
PodmanのAPIリファレンス
PodmanのAPIリファレンスはこちらのようです。
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
オーナーの変更はエラーでできません。
少し調べたところ。
WSL側の問題のようですが、解決していない状況のようです。
正確な情報ではない可能性が御座いますが、何かLxssManagerまわりの問題の可能性があるそうです。
このような感じで、Windows側からPodmanのRESTful APIを直接コールするのは、まだ難しい状況かもしれません。※22.11.29現在
このあたりは、Podmanの完成度の向上を待たせて頂く状況かもしれません。
Windowsに関しましては、コンテナシステムの選択肢は、macOS・Linuxよりも少なめな状況かと思います。
Podman本体の完成度に加えまして、WSLの完成度の向上にも期待したいと思います。
え?Windows 11ですか?