Mac & Rancher Desktop で docker-compose を使えるようになるまで

# 経緯
Docker Desktopの有償化に伴い、Rancher Desktopへ移行しました。

https://rancherdesktop.io/

ですが、移行後に`docker-compose`コマンドが効かなくなり、使えるようになるまでの試行錯誤を記しておきます。

# Rancher Desktopインストール
以下の記事を参考にインストールできます。
インストール前に Docker Desktop を uninstall しておくこと。

https://qiita.com/hikaruright/items/d86225453c9590865730

https://knqyf263.hatenablog.com/entry/2022/02/01/225546

(* ２つ目の記事にはk8sクラスタの無効化方法も記載されています。)

# `docker`, `docker-compose`コマンドのインストール
`docker`, `docker-compose`コマンドをまだインストールしていない人は以下のコマンドでインストールできます。

```shell:
$ brew install docker
$ brew install docker-compose
```

Homebrew が入っていない人は、以下を参考にインストールできます。

https://qiita.com/zaburo/items/29fe23c1ceb6056109fd

# docker-composeできるまで
Rancher Desktop をインストールしてから、`docker-compose`できるまでの軌跡は以下の通りです。
一部実行結果をマスク(`*******`に置き換え)しています。

## インストール直後
以下のエラーで`docker`コマンドも`docker-compose`コマンドも効かない。。

```shell:
$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

$ docker-compose up -d
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
```

rancher desktop app は起動できているが、 docker daemon が起動していないみたいなのでPC再起動してみる。

## PC再起動後
docker daemon は起動したが、`docker-compose`はエラーになる。。

```shell:
$ docker ps
CONTAINER ID   IMAGE                              COMMAND                  CREATED          STATUS          PORTS     NAMES
*******   rancher/mirrored-coredns-coredns   "/coredns -conf /etc…"   16 minutes ago   Up 16 minutes             k8s_coredns_coredns-96cc4f57d-cpdgb_kube-system_9bc1de3c-e778-4209-ba1c-1b5f74f8da86_0
(中略)
*******   rancher/mirrored-pause:3.6         "/pause"                 17 minutes ago   Up 17 minutes             k8s_POD_metrics-server-ff9dbcb6c-fc5xg_kube-system_80ad343f-b24a-4372-98c7-54a554ec0069_0

$ docker-compose up -d
1 error occurred:
	* error listing credentials - err: exec: "docker-credential-desktop": executable file not found in $PATH, out: ``
```

エラーを調べてみると、以下がHit。

https://stackoverflow.com/questions/67642620/docker-credential-desktop-not-installed-or-not-available-in-path

~~`~/.docker/config.json` の `credsDstore` を `credDstore` に書き換えればいいらしい。~~
（`20240420追記`）`credsDstore`はDockerでの認証情報ストアの参照先で、`"desktop"`はdocker-desktopを指しているらしい。`credsDstore`の行を削除するので問題なさそうです。（参考：https://dev.classmethod.jp/articles/fix-credsstore-missing-2023-11-06/）

書き換え後のファイル例は以下の通り。(* 人によってファイルの内容は一部異なると思います。)

```shell:
$ cat ~/.docker/config.json
{
	"auths": {
		"*******.amazonaws.com": {}
	},
	"credStore": "desktop",
	"experimental": "disabled",
	"stackOrchestrator": "swarm"
}
```

## `~/.docker/config.json` 書き換え後
無事 `docker-compose` できました。

```shell:
$ docker-compose up -d       
Sending build context to Docker daemon     675B
(中略)
Successfully built *******
Successfully tagged *******:*******
[+] Running 2/2
 ⠿ Network *******       Created                                                       0.1s
 ⠿ Container *******  Started                                                       0.5s
```

# あとがき
~~なぜ `~/.docker/config.json` の `credsDstore` を `credDstore` に書き換えるとエラー解消されるのかはよく分かってないです。~~
（`20240420追記`）`credsDstore`はDockerでの認証情報ストアの参照先で、`"desktop"`はdocker-desktopを指しているらしい。`credsDstore`の行を削除するので問題なさそうです。（参考：https://dev.classmethod.jp/articles/fix-credsstore-missing-2023-11-06/）

# 参考

- [Docker Desktop有償化対策の答えはRancher Desktopだった](https://qiita.com/hikaruright/items/d86225453c9590865730)
- [Docker DesktopからRancher Desktopに乗り換えてみた](https://knqyf263.hatenablog.com/entry/2022/02/01/225546) (*k8sクラスタの無効化方法まで記載されています。)
- [docker-credential-desktop not installed or not available in PATH](https://stackoverflow.com/questions/67642620/docker-credential-desktop-not-installed-or-not-available-in-path)