✌️

CLIでも簡単Podman

に公開

おはようございます、こんにちは、こんばんは。
スペースマーケットでWebエンジニアをしているs0arです。

これからの時期にとても助かりそうな飲み物を見つけました。

カロリーゼロってことは無限に飲んでいいってことですよね。
助かる。死ぬ気で飲もうと思います。

Podmanはいいぞおじさん、WSL2でもPodmanを使いたくなる

前にPodman Desktopの記事書いたので読んでください。
Podmanはいいぞ。Podman Desktopの導入マジで簡単です。
苦し紛れに記事書いたんですけど中身ゼロに等しいです。
それぐらい簡単です。マジです。簡単すぎて涙出るね。

そんなPodmanさんなんですが、今回はCLIで導入します。
というのが、WSL2で使いたくなったからです。

もちろん、Podman Desktopに比べると面倒です。
いうほど難しくもないんですけどね。
おじさんが何したか書いていきます。

環境

Windows 11 Home 24H2
WSL 2.4.13.0
Ubuntu 24.04.2 LTS
zsh 5.9 (x86_64-ubuntu-linux-gnu)

Podmanをインストール

とりあえずPodman入れます。

sudo apt update

❯ sudo apt -y install podman

(もちろんapt-getでもいいです)

Podman「は」、これで入りました。

podman --version
podman version 4.9.3

docker-composeをPodmanで扱いたい

あたしゃdocker-composeをPodmanで扱いたいんだよ。
てなわけでそのための設定をしていく。

とりあえずpodman composeを使えるようにする

podman compose up -d
Error: looking up compose provider failed
7 errors occurred:
        * exec: "docker-compose": executable file not found in $PATH
        * exec: "/home/s0ar/.docker/cli-plugins/docker-compose": stat /home/s0ar/.docker/cli-plugins/docker-compose: no such file or directory
        * exec: "/usr/local/lib/docker/cli-plugins/docker-compose": stat /usr/local/lib/docker/cli-plugins/docker-compose: no such file or directory
        * exec: "/usr/local/libexec/docker/cli-plugins/docker-compose": stat /usr/local/libexec/docker/cli-plugins/docker-compose: no such file or directory
        * exec: "/usr/lib/docker/cli-plugins/docker-compose": stat /usr/lib/docker/cli-plugins/docker-compose: no such file or directory
        * exec: "/usr/libexec/docker/cli-plugins/docker-compose": stat /usr/libexec/docker/cli-plugins/docker-compose: no such file or directory
        * exec: "podman-compose": executable file not found in $PATH

composeのプロバイダーが見つからないってさ。
docker-composeがないんですけど?って言われてます。

せやろなあ…入れてへんもんなあ…。

docker-composeをインストールする

aptで入れられるdocker-composeは2種類あります。

docker-compose

docker-compose-v2(docker compose

せっかくだから、俺はこのdocker-compose-v2を選ぶぜ!

はい、まあ普通にv1は非推奨なのでね。
これから新たにv1を入れる理由はないんです。

sudo apt install -y docker-compose-v2

はい。

docker version
Client:
 Version:           27.5.1
 API version:       1.47
 Go version:        go1.22.2
 Git commit:        27.5.1-0ubuntu3~24.04.2
 Built:             Mon Jun  2 11:51:53 2025
 OS/Arch:           linux/amd64
 Context:           default

D o c k e r が 入 り ま し た 。
Dockerのサブコマンドやしせやろなあ…。
結局Docker依存なんや…しゃーない…。

docker compose version
Docker Compose version 2.33.0+ds1-0ubuntu1~24.04.1

これでdocker composeが呼べるようになりました。

docker-composedocker composeを呼び出すようにする

うーんこの
ラッパースクリプト作ります。

sudo tee /usr/bin/docker-compose > /dev/null <<'EOF'
#!/bin/sh
exec docker compose "$@"
EOFsudo chmod +x /usr/bin/docker-compose

これでdocker-composeできるようになりました。

which docker-compose
/usr/bin/docker-compose

❯ docker-compose version
Docker Compose version 2.33.0+ds1-0ubuntu1~24.04.1

docker-composeからPodmanを呼び出せるようにする

docker-compose up -d
unable to get image 'mysql:8.0': permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.47/images/mysql:8.0/json": dial unix /var/run/docker.sock: connect: permission denied

/var/run/docker.sock is Dockerさんがなんやかんやするためのソケット。
でも今回はこれ使いません。
なぜかってぼくが動かしたいのはDockerじゃなくてPodmanだからね。

結局何したいのって言うと、こういう流れにしたいわけよ。

`podman compose`(or `docker-compose`)
  -> `/usr/bin/docker-compose`
    -> `docker compose`
      -> `Podman`

ほなとりまpodman composeさんチーッス。

podman compose up -d
>>>> Executing external compose provider "/usr/bin/docker-compose". Please refer to the documentation for details. <<<<

unable to get image 'mysql:8.0': Cannot connect to the Docker daemon at unix:///run/user/1000/podman/podman.sock. Is the docker daemon running?
Error: executing /usr/bin/docker-compose up -d: exit status 1

デーモンさん召喚されてませんけど?

❯ systemctl --user status podman.socket
○ podman.socket - Podman API Socket
     Loaded: loaded (/usr/lib/systemd/user/podman.socket; enabled; preset: enabled)
     Active: inactive (dead)
   Triggers: ● podman.service
       Docs: man:podman-system-service(1)
     Listen: /run/user/1000/podman/podman.sock (Stream)

ほんまや。
召喚しよねせやね。

❯ systemctl --user enable --now podman.socket

❯ systemctl --user status podman.socket
● podman.socket - Podman API Socket
     Loaded: loaded (/usr/lib/systemd/user/podman.socket; enabled; preset: enabled)
     Active: active (listening) since Sun 2025-06-29 00:41:19 JST; 3s ago
   Triggers: ● podman.service
       Docs: man:podman-system-service(1)
     Listen: /run/user/1000/podman/podman.sock (Stream)
     CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/podman.socket

攻撃力2500。
これでpodman composeはできるようになりました。

podman compose up -d
>>>> Executing external compose provider "/usr/bin/docker-compose". Please refer to the documentation for details. <<<<

[+] Running 13/13
 ✔ db Pulled                                                                                                                                                                                                          9.0s
   ✔ 8136f22d09a6 Download complete                                                                                                                                                                                   0.0s
   ✔ 3129972d409e Download complete                                                                                                                                                                                   0.0s
   ✔ 6a1cda231802 Download complete                                                                                                                                                                                   0.0s
   ✔ b1e07841ef1f Download complete                                                                                                                                                                                   0.1s
   ✔ ed0a8990cecb Download complete                                                                                                                                                                                   3.0s
   ✔ b0a39b3bc178 Download complete                                                                                                                                                                                   1.9s
   ✔ 8196d276e623 Download complete                                                                                                                                                                                   0.0s
   ✔ 177b61316434 Download complete                                                                                                                                                                                   0.0s
   ✔ 61ad5ccea9dc Download complete                                                                                                                                                                                   5.9s
   ✔ f342254d0c44 Download complete                                                                                                                                                                                   0.0s
   ✔ c74d929db40f Download complete                                                                                                                                                                                   0.0s
   ✔ 96c80606b7ab Download complete                                                                                                                                                                                   0.0s
[+] Running 1/1
 ✔ Container mysql_container  Started

docker-composeできるようにする

実はまだdocker-composeはできないんだな、それが。
なぜかってdocker-composeもといdocker composeunix:///var/run/docker.sockに通信しに行くからです。
そっちは使わんのです。
じゃあどうやってPodmanのsocket使うんですか?
.zshrcに環境変数設定して、向き先を変えます。

# Docker
export DOCKER_HOST="unix://$(podman info --format '{{.Host.RemoteSocket.Path}}')"
docker-compose up -d
[+] Running 13/13
 ✔ db Pulled                                                                                                                                                                                                          9.9s
   ✔ 177b61316434 Download complete                                                                                                                                                                                   0.0s
   ✔ b1e07841ef1f Download complete                                                                                                                                                                                   0.2s
   ✔ 8136f22d09a6 Download complete                                                                                                                                                                                   0.0s
   ✔ 3129972d409e Download complete                                                                                                                                                                                   0.0s
   ✔ 6a1cda231802 Download complete                                                                                                                                                                                   0.0s
   ✔ ed0a8990cecb Download complete                                                                                                                                                                                   2.8s
   ✔ 8196d276e623 Download complete                                                                                                                                                                                   0.0s
   ✔ b0a39b3bc178 Download complete                                                                                                                                                                                   3.3s
   ✔ 61ad5ccea9dc Download complete                                                                                                                                                                                   6.6s
   ✔ f342254d0c44 Download complete                                                                                                                                                                                   0.0s
   ✔ c74d929db40f Download complete                                                                                                                                                                                   0.0s
   ✔ 96c80606b7ab Download complete                                                                                                                                                                                   0.0s
[+] Running 1/1
 ✔ Container mysql_container  Started

❯ podman ps -a
CONTAINER ID  IMAGE                        COMMAND               CREATED             STATUS             PORTS                   NAMES
d48f3eed1787  docker.io/library/mysql:8.0  mysqld --default-...  About a minute ago  Up About a minute  0.0.0.0:3305->3306/tcp  mysql_container

俺の勝ち。

完走した感想

いやダルいわ…Podman Desktopの楽さを知ってるから尚更ダルい。
でもこれぐらいの作業で動きます。

Podmanがdocker-composeにガッツリ依存してるの笑った。
composeは絶賛開発中っぽいので、内蔵したらアツい。もっと楽になりそう。

蛇足気味だけどdockerコマンドをpodmanで実行する

あ、忘れてたんですけどね。
docker-compose-v2パッケージ入れたから/usr/bin/dockerにDockerさんがいるんですね。
これもPodmanさんにやってもらいます。

sudo mv /usr/bin/docker /usr/bin/docker.bak

❯ sudo ln -s $(which podman) /usr/bin/docker

❯ which docker
/usr/bin/docker

❯ docker --version
docker version 4.9.3

ウェイ

以上終わりです。

GitHubで編集を提案
スペースマーケット Engineer Blog

Discussion