DockerからPodmanへの移行：Podmanでdocker-composeを試してみた(for VS Code)

# はじめに
こんにちは、コンテナ勉強中の新入社員です。
最近Docker Desktopが重くないですか？Podman Desktopへの移行してみませんか？移行するのに色々厄介ごとあるんじゃないのかと思う方もいらっしゃるでしょうが、実際にはdockerコマンドをpodmanに置き換えるだけで、ほとんどの操作が問題なく実行できるんです。この記事では、Podman Desktopを使って `docker-compose.yml` を実行し、従来のDocker Desktopと比較した使用感をレポートします。PPodmanに興味がある方はぜひ参考にしてください。


# Podman Desktopのインストール
Podman DesktopはmacOSでは２種類のインストール方法があります。
1. dmgファイルをダウンロードしてインストール
1. brewを使ってインストール
    ```brew install podman-desktop```

詳しくはこちらをご確認ください

https://qiita.com/LgmQue/items/a01367a49b973ee31a2f


https://podman.io/docs/installation

今回はdmgファイルを使ってinstallしてみました。
インストールを確認すると
```shell
podman -v
podman version 5.2.2
```
無事インストールできています。


# docker compose
今回はdocker composeのクイックスタートの例を使って、ファイルを作成しました。

https://docs.docker.com/compose/gettingstarted/


ディレクトリ構成はこのようになっています。
```
/app
│   docker-compose.yml
│   Dockerfile
│   app.py
│   requirements.txt
```
各ファイルの中身は

**docker-compose.yml**
```yml
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"
```
**app.py**
```python
import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host="redis", port=6379)


def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr("hits")
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)


@app.route("/")
def hello():
    count = get_hit_count()
    return "Hello World! I have been seen {} times.\n".format(count)
```

**requirements.txt**
```
flask
redis
```

**Dockerfile**
```docker
# syntax=docker/dockerfile:1
FROM python:3.10-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run", "--debug"]
```

これらのファイルを使って、composeします。
コマンドはdocker composeをpodman composeに置き換えるだけ
```sh
podman compose -f docker-compose.yml up -d
```
:::note warn

podman composeの間のハイフン(-)が必要ないことに注意してください。
:::

私の環境では軌道まで数十秒ほどでした。
podman Desktopの画面で確認するとちゃんと起動しています。

![名称未設定2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/ec6c54c2-8c22-bf5a-405b-20b363f1031c.jpeg)

# 作成したコンテナに接続
これまでVS codeでDocker Desktopを使って、コンテナに入る場合は拡張機能の[Docker](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker)をinstallするだけでしたが、podmanでは設定を少し変える必要があります。


1. Dockerの拡張機能設定をクリック
1. 検索ワードに**dockerpath**と入力
1. Dev>Containers: Docker Pathに"podman"と入力


![名称未設定４のコピー.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/0367888f-bbe3-4e76-c623-0979d6ef3d41.jpeg)



そして、リモートエクスプローラーで開発コンテナを選択すると先ほど作成したコンテナが表示されていることがわかります。

![名称未設定５.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/3a096820-4bec-3dc7-97ac-994ac2f2aecc.jpeg)

ウィンドウボタンをクリックすると接続されることを確認しました！
![名称未設定６.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848963/835d37d1-3311-7de1-68bf-f08d66eedeb9.jpeg)


# まとめ
Podman Desktopへの移行は、予想以上にスムーズで、docker-composeの操作も問題なく行えました。Docker Desktopに比べてPodmanは軽量で、特に複数のコンテナを扱う際の動作が軽快であると感じました。今回の検証では簡単なアプリケーションで試しましたが、次回はより重たいアプリケーションでパフォーマンスの違いを検証してみたいと思います。Podmanに興味を持っている方やDocker Desktopのパフォーマンスに不満を感じている方には、一度Podman Desktopを試してみることをおすすめします。