Podman Desktopを試してみる

# はじめに
2022年2月からDocker Desktopが有料（無償利用の猶予期間が終了）したことから、Docker Desktopの代替ツールが色々と登場してきました。「[[Mac環境] Docker Desktopの代替として何が最適か](https://qiita.com/hisato_imanishi/items/91d6881ff7c4d55b9ec4)」では、[Rancher Desktop](https://rancherdesktop.io/)を代替ツールとしておすすめしましたが、2022年10月24日のKubeCon North Americaにおいて、Red Hat社から「Podman Desktop」が[発表されました](https://developers.redhat.com/articles/2022/10/24/podman-expands-desktop#?sc_cid=7013a000002q2kMAAQ)。

[Podman Desktop](https://podman-desktop.io/)は、デーモンレスのコンテナエンジンである[Podman](https://podman.io/)の開発者向けGUIツールです。Podmanでのコンテナの起動・停止、コンテナログの参照、コンテナイメージのビルドといった基本的な操作をGUIで可能とします。また、Kubernetes/OpenShiftへのコンテナのPodとしてのデプロイといったKubernetes/OpenShiftとの連携機能も備えます。

Podmanはメジャーなコンテナエンジンとは言えないかもしれませんが、CLIではDockerと互換であり、`docker xxxx`コマンド を `podman xxxx` に置き換えて動作します。

以下では、Podman Desktopをインストールし、使ってみたところをご紹介します。


# 前提環境
- マシン：MacBook Pro （14インチ, 2021）（M1 Max, メモリ64GBモデル）
- OS：macOS Ventura 13.0.1
- Podman Desktop 4.3.1

# インストール
Podman Desktopの動作の前提としてPodmanがインストールされている必要があります。ただ、HomebrewでPodman Desktopをインストールする場合、[その過程でPodmanも導入される](https://podman-desktop.io/docs/Installation/macos-install#installing-podman-desktop-on-macos-using-brew)ようです（「ようです」と書いているのは、私の環境では既にPodmanがインストール済みだったため）。

> Brew will also install the Podman Engine along with the Podman Desktop application, in case you don't have it installed yet.

Podman Desktopは以下のコマンドでインストールします。

```bash
brew install podman-desktop
```

Macのアプリケーションとしてインストールされますので、インストール完了後は「アプリケーション」から起動するか、Spotlightなどで「Podman Desktop」と入力して起動します。

Podman Desktopが起動すると以下のような画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/f1462c45-0e4d-5cc6-deec-cb1108cab6da.png)

なお、Podmanを使用したことが無い場合（Podman Desktopと一緒にPodmanをインストールした場合など）、「Initialize Podman」というトグルボタンが表示されます。Podmanでは、macOS内にLinuxのVMが必要になるため、初回利用時にそのVM環境としてPodman Machineの作成が必要となります。このトグルボタンを実行することで、Podman Machineが作成され、Podman Desktopが利用可能となります。

ただ、私が試した際は、初期化処理がいつまで経っても終了しなかったため、Podman Desktopを一度終了させ、再度起動させると、初期化処理が完了した状態になっていました。最終的に上記のスクリーンショットのように「Podman is running」と表示されていれば、Podman Desktopが使用可能となります。

# Podman Desktopのコンテナ管理機能
Podman Desktopにはコンテナを管理する機能があります。画面左側のメニューの「Containers」では、マシン上のコンテナの一覧を参照することができます。また、「Create container」ボタンから、Dockerfileを指定してコンテナを作成することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/167b3f5a-4444-c4b3-67e9-cc43ffa8472a.png)

起動中のコンテナを指定して、起動時に指定したポートでブラウザを開いたり、コンテナのシェルに入ったりといったことも可能です（以下の画面の「Open Browser」ボタンをクリックするとブラウザが開きます）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/d71de5c0-29be-815d-4942-4195fcc1bae4.png)

コンテナのイメージを管理することも可能です。メニューの「Images」では、コンテナイメージの一覧を表示し、コンテナの起動、イメージの削除、イメージのレイヤ情報の参照ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/46320c46-6f89-6f7d-c719-f0afc583511b.png)


# Kubernetesへのデプロイ機能
Podman Desktopでは、Kubernetesに対して簡単にデプロイする機能を備えています。

「Containers」でコンテナの一覧の中からデプロイしたいコンテナを選択し、ACTIONSから「Deploy to Kubernetes」（ロケットマークのアイコン）をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/57dde62b-8121-9fcc-b27e-b9cb2d228417.png)

すると、以下のようにKubernetesにデプロイするためのPodのマニフェストファイルが自動生成され、現在のコンテキストの対象のKubernetesクラスタに対してデプロイが実行できます。OpenShiftに対しては、routeの自動生成もできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/a19e8013-5a7e-002b-9561-3929ab908280.png)

ただし、この機能では、Podmanで稼働しているコンテナのイメージ取得元がPodの`spec.containers.image`に設定されるため、ローカル端末でビルドしたコンテナイメージはデプロイできません（デプロイ対象のKubernetes/OpenShiftがイメージを取得できないため）。Docker Hubなど、デプロイ対象のKubernetes/OpenShiftがアクセスできるレジストリである必要があります。


以上のように、Podman Desktopは容易にインストールでき、基本的なコンテナ管理をGUIで実施できるという点で、Docker Desktopの代替として利用可能な選択肢の1つであると思います。

以上です。