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-compose
はdocker compose
を呼び出すようにする
うーんこの
ラッパースクリプト作ります。
❯ sudo tee /usr/bin/docker-compose > /dev/null <<'EOF'
#!/bin/sh
exec docker compose "$@"
EOF
❯ sudo 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 compose
はunix:///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
ウェイ
以上終わりです。

スペースを簡単に貸し借りできるサービス「スペースマーケット」のエンジニアによる公式ブログです。 弊社採用技術スタックはこちら -> whatweuse.dev/company/spacemarket
Discussion