有償化される Docker Desktop をやめて minikube を使う

## はじめに

2022/05/13 追記

現状では minikube よりも Rancher Desktop の方がオススメです

https://rancherdesktop.io/

もし proxy 環境であれば以下の記事を参考にしてください

https://qiita.com/yuu-matsuo/items/4a9b007cc3da88055418

https://qiita.com/RyoWakabayashi/items/158e6957d362709dc4d6

---

他の記事でも書かれていますが、 Docker Desktop が有償化されます

https://www.docker.com/blog/updating-product-subscriptions/

Docker Engine や CLI は無償なのでサーバーでの利用上は問題ありませんが、
macOS は基本的に Docker Desktop でのインストールが推奨されているため、
私も使っていました

Docker Desktop は GUI でコンテナの操作ができますが、
基本的にコマンド操作するので不要です

Docker Desktop のためだけに費用を払うのはもったいないですね

- 有償化の対象外
    - 従業員 250 人未満 かつ 年間売上 1000万ドル未満
    - 個人利用
    - 教育目的の利用
    - 非商用利用
    - オープンソースプロジェクト
- 有償化の開始日: 2021年8月31日
- 猶予期限: 2022年1月31日

ということなので、今年のうちに Docker Desktop を使わずに済むようにします

以下のブログを参考にしました

https://dhwaneetbhatt.com/blog/run-docker-without-docker-desktop-on-macos

2021/11/1 追記

以下の記事に追加の注意点を記載しました

https://qiita.com/RyoWakabayashi/items/ec672a68addc615c4ac1

## Docker Desktop のアンインストール

Docker Desktop を起動し、右上の虫マークから Troubleshoot を開きます

一番下にある `Uninstall` をクリックするとアンインストールできる、はずですが

![スクリーンショット 2021-10-22 17.32.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/11a3f70e-719c-fc11-c0d9-e46f99e525e1.png)

なぜかうまくアンインストールできなかったため、結局 Applications から直接ゴミ箱へ送りました :sweat_smile: 

## minikube インストール

minikube と、仮想化のための hyperkit を Homebrew でインストールします

```sh
brew install hyperkit
brew install minikube
```

hyperkit を入れるとき、先に Docker Desktop をアンインストールできていないと
brew link でエラーになります

Docker Desktop をゴミ箱に入れたあとに改めて brew link すれば問題ありません

```sh
brew link hyperkit
```

## docker インストール

今までは Docker Desktop 内の docker CLI を使っていたので、
改めて Homebrew で CLI をインストールします

```sh
brew install docker
brew install docker-compose
```

## minikube 起動

今までは Docker Desktop を起動させてから docker コマンドを使っていましたが、
これからは minikube が動いている必要があります

```sh
minikube start
```

また、 docker コマンドに minikube を認識させる必要があるので、以下を実行します

```sh
eval $(minikube docker-env)
```

minikube の IPアドレス を hosts に書き込んでアクセスできるようにします

```sh
echo "`minikube ip` docker.local" | sudo tee -a /etc/hosts > /dev/null
```

docker を動かしたいだけなので、余計なものを止めておきます

```sh
$ minikube pause
⏸️  Pausing node minikube ...
⏯️  次のnamespaceに存在する 14 個のコンテナを停止しました: kube-system, kubernetes-dashboard, storage-gluster, istio-operator
```

## docker 実行

試しに Hello World を動かしてみます

```sh
$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
```

エラーが出なければ、とりあえず docker は大丈夫です

## 認証ヘルパー変更

`docker` は動いたものの、 `docker-compose` 実行時にエラーが、、、

```sh
$ docker-compose up
[+] Building 0.9s (3/3) FINISHED
 => [internal] load build definition from Dockerfile                                                              0.0s
 => => transferring dockerfile: 31B                                                                               0.0s
 => [internal] load .dockerignore                                                                                 0.0s
 => => transferring context: 2B                                                                                   0.0s
 => ERROR [internal] load metadata for docker.io/zenika/kotlin:1.4.20                                             0.8s
------
 > [internal] load metadata for docker.io/zenika/kotlin:1.4.20:
------
failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: rpc error: code = Unknown desc = error getting credentials - err: exec: "docker-credential-desktop": executable file not found in $PATH, out: ``
```

認証を行なっていた `docker-credential-desktop` もゴミ箱に入ったので、認証できなかったようです

こちらのブログを参考に、認証できるようにしました

https://blog.1q77.com/2021/09/replace-docker-desktop-with-minikube/

代わりのものをインストールし、設定を変更します

```sh
brew install docker-credential-helper
```

`~/.docker/config.json` を以下のように変更

- 変更前

```json
{
  "credsStore" : "desktop"
}
```

- 変更後

```json
{
  "credsStore" : "osxkeychain"
}
```

これで `docker-compose` も動くようになりました

## おわりに

ひとまず、今まで通り macOS でも無償で docker を使うことができるようになりました

あとは Windows を近々どうにかします 

また、以下の記事に追加の注意点を記載していますので、ご参照ください

https://qiita.com/RyoWakabayashi/items/ec672a68addc615c4ac1