📘

PodmanDesktopでdocker composeする方法

2024/05/13に公開

まとめ

追記やらで長くなったので、端的にまとめます。

  • brewでdockerを入れて docker compose のプラグイン拡張を入れて、docker contextを設定する
    • ある程度手間があるが、一番問題が無いと思われる方法(一押しとなる)
  • RancherDesktopを入れてDOKCER_HOSTを設定する
    • Rancherを入れるのが微妙だが、一番問題がない
  • brewでdockerとdocker-composeコマンドを入れて、DOKCER_HOSTを設定する
    • ハイフン無しのdocker composeコマンドが使えない
  • brewでdocker-composeを入れて、podmanコマンドをdocker名称でalias設定する
    • aliasを認識しないアプリなどでは動作しない
    • ハイフン有りとハイフン無しの両方のcomposeコマンドが使えるようになる
    • dockerコマンドが書いてあるシェルスクリプトを実行する時にaliasが動作するように特殊コマンドが必要になる

追記

podmanコマンドのエイリアス登録と、docker-composeコマンドをインストールすれば、下記の設定は不要となる。

## alias は、.bash_profileなどに書くと良い
$ alias docker="podman"
$ brew install docker-compose

composeを動かすために、docker-composeコマンドが必要になるが、RancherDesktopを入れる必要はない。

あと、このやり方だと、ハイフンありと、ハイフン無しの両方で動くようになるので、問題はないかもだが認識しておいてほしい。

また、サードパーティのアプリだとaliasが使えないなどの場合は下記の方法で対応となる。

前提条件としてdockerコマンドが必要となる

Macだとbrewでインストールできるが、ハイフン無しのdocker composeではなく、ハイフン有りの docker-compose が入ってしまう。

ハイフン無しの docker compose が、新バージョンではあるので、そちらで行きたい場合、お手軽なのは、Rancher Desktopを入れることである。
(Rancherを一度立ち上げれば、ツールも入るので、以降は立ち上げる必要はない)
https://rancherdesktop.io/

Podman使うのに、Rancher入れないといけないのは微妙だが。。。何か良い手はないだろうか?
(どちらでも動きそうだから、気にしなきゃいいっちゃ、いいのだが。。。)

一応、ハイフン有りで良いならコマンドは下記となる

$ brew install docker
$ brew install docker-compose

## 下記だと、有償のDocker Desktopが入るので注意!!
# $ brew install --cask docker

DOCKER_HOSTを設定すれば良い

MacOSの場合

## 下記でパスを調べて
$ podman machine inspect --format '{{.ConnectionInfo.PodmanSocket.Path}}'

## 出てきたパスを下記で設定する(.bash_profileとかに設定すると良い)
export DOCKER_HOST=unix://【ここ!!】

下記のようにすると

$ export DOCKER_HOST=unix://`podman machine inspect --format '{{.ConnectionInfo.PodmanSocket.Path}}'`

podmanが立ち上がっていれば動作するが、Mac起動時にターミナルを立ち上げるセットアップの場合はエラーになりそう。

でも、そうでないなら良さそうではある。

とりあえず、パスが毎回変わることはないみたいなので、ドキュメント通りにやっておくほうが良いかな?

公式ドキュメント
https://podman-desktop.io/docs/migrating-from-docker/using-the-docker_host-environment-variable

おまけ Podman Desktop ってなに?

Red Hatの開発した Docker Desktop の代替品。

Docker Desktopと違い、Apache License 2.0 License なので、費用が掛からない。

なぜdocker composeできない?

## Podmanだと
$ podman compose up

## Docker Desktopだと
$ docker compose up

Podmanだとdockerの部分が違うため、そのままではVSCodeなどの拡張機能が動かなかったり弊害が発生する。

そのための対応策でした。

追記2024-07-16

同僚から新たな方法を提示されたので追記します。

  1. dockerコマンドをbrewで入れて、それに対してcomposeプラグインを入れる(docker composeが使えるようになる)
  2. docker contextを作成してpodmanと連携する
## dockerとcomposeプラグインをインストールする(dockerコマンドだけだとcomposeが動かない)
## @see https://github.com/docker/compose/releases(composeプラグインに関しては手動でアップグレードする必要があるしARM Macとか気をつけること)
## 何か残っているとエラーとなるので念の為消しておく
$ rm -rf ~/.docker

## インストールはここから
$ brew install docker
$ mkdir ~/.docker/cli-plugins
$ cd ~/.docker/cli-plugins
## プラグイン用の実行バイナリは自身の端末にあったものを選ぶこと!!
## 下記は、ARM版(M1以降)のMacの実行バイナリとなる
$ curl -SL https://github.com/docker/compose/releases/download/v2.28.1/docker-compose-darwin-aarch64 -o docker-compose
$ chmod +rwx docker-compose

## podman用のdocker contextを作成して、そちらを使うようにする
$ PODMAN_SOCK=`podman machine inspect --format '{{.ConnectionInfo.PodmanSocket.Path}}'` 
$ docker context create podman --docker "host=unix://${PODMAN_SOCK}"
$ docker context use podman
## podmanがbuildxに対応していないためdocker buildに失敗する可能性があるのでbuildxを使わないように設定する(特にbuildxを使っていないならやらなくても可)
$ export DOCKER_BUILDKIT=0

Discussion