[Mac環境] Docker Desktopの代替として何が最適か

# はじめに
従来無料で使用できていたDocker Desktop(Docker Desktop for Windows、Docker Desktop for Mac)ですが、2021年9月1日に有料化され、2022年1月31日で有料化の猶予期間が終了しました。[2022年2月1日からは一定規模以上の企業における利用は有料化](https://www.docker.com/blog/updating-product-subscriptions/)され、Pro、Team、Businessといった有料プランを契約する必要があります。

このニュースが発表されて以来、Docker Desktopの利用者は、有料プランを契約してDocker Desktopを継続利用するか、別の代替手段を探すかを迫られ、多くの代替手段が検討・記事化されてきました。（Docker Desktopには特に不満が無かったので、有料プランが契約できるのであれば契約したいところですが）

私は普段Macを使用していますが、いくつかの代替手段を渡り歩いて使用してきましたので、それぞれのメリット・デメリット、および、現時点（2022年2月3日）のおすすめをまとめたいと思います。

なお、当記事における代替手段は、「Dockerを継続して利用したい（Podmanなどの別のコンテナ環境は考えない）」、「（Docker CLIはbrewで容易に導入可能なので）Dockerデーモンをどうやって準備するか」という観点で考えています。

また、当記事では代替手段の詳細な導入手順、利用手順は記載せず、他の記事を参照するかたちでまとめています。


# 前提環境
- マシン：MacBook Pro （14インチ, 2021）（M1 Max, メモリ64GBモデル）
- OS：macOS Monterey 12.0.1

# MacにおけるDocker Desktop代替手段
Mac環境において、Docker Desktopの代替手段としては以下のようなものが挙げられます。Docker Desktopの代替手段として開発されたものではなくても、Dockerデーモン（を持つLinux VM）を提供してくれるという意味で挙げています。

この中でのおすすめは「Rancher Desktop」になります。他の選択肢は飛ばしておすすめだけ確認したい場合は、当記事の[Rancher Desktopの項](#rancher-desktop)を参照ください。

| ツール名 | 概要 | ライセンス |
|:-|:-|:-|
|[minikube](https://github.com/kubernetes/minikube)    | Mac、Linux、Windowsのローカル環境でKubernetesクラスタを提供する  | Apache License 2.0  |
|[lima](https://github.com/lima-vm/lima)   | Mac、Linux環境で、自動的なファイル共有、ポートフォワード機能を持つLinux仮想マシンを用意・利用できるようにする（WindowsでのWSL2的なツール）  | Apache License 2.0  |
|[Colima](https://github.com/abiosoft/colima)   | Mac、Linux環境で、最小限の手間で（limaを用いた）コンテナ環境を提供する  | MIT License  |
|[Rancher Desktop](https://rancherdesktop.io/)   | Mac、Linux、Windowsのローカル環境でKubernetesクラスタ、および、コンテナ管理機能を提供する  | Apache License 2.0  |


# minikube
[minikube](https://github.com/kubernetes/minikube)は、ローカルでKubernetesクラスタを構築・利用できるようにする定番のツールです。

minikubeの場合、minikubeが作成したLinux VM(DriverとしてHyperKit、VirtualBox、Parallelsなどを利用）上のDockerデーモンをネットワーク経由で利用することになります。

minikubeによるDocker環境構築の手順は、以下の記事を参照ください。

- [Docker Desktop の代わりに Minikube を使ってみる](https://blog.1q77.com/2021/09/replace-docker-desktop-with-minikube/)
- [Minikube で無料で商用利用できる Docker 開発環境をつくる](https://zenn.dev/sasasin/articles/43a1b79a4cfdc1)

なお、コロナの影響によりVPNで在宅勤務している方は多いと思いますが、VPNソフトウェアとしてCisco AnyConnectを使用している場合、minikubeのVMが起動しない、アクセスできないケースがあります。このことにより、個人的にはminikube方式は利用しなくなりました。

【参考】
- [VPN causes: waiting for apiserver: timed out waiting for the condition](https://github.com/kubernetes/minikube/issues/4302)
- [Can't use Minikube on VPN](https://github.com/kubernetes/minikube/issues/1099)


# lima
[lima](https://github.com/lima-vm/lima)は、WindowsでのWSL2的な機能を提供してくれるツールです。この後に紹介するColima、Rancher Desktopは、内部的にlimaを使用しています。

limaを使用すると、MacでLinux VMを簡単に導入・起動することができます。デフォルトではUbuntuですが、Alpine、Rockyなどを利用することも可能です。以下はデフォルトのUbuntuを導入・起動するまでの手順で、非常に簡単なことが分かります。

```bash
# limaのインストール
brew install lima

# デフォルトのUbuntu VMを導入・起動
limactl start

# Ubuntuのシェルに入る
lima
```

limaでは、起動するVMの設定をYAMLファイルで記述します。Dockerが導入されたVMの設定例が[limaの公式で提供](https://github.com/lima-vm/lima/blob/master/examples/docker.yaml)されており、このVMに対してMacのDocker CLIから使用するよう設定することでDocker環境を構築できます。

以下の記事では、より詳細な設定の内容、手順が記載されています。

- [Lima で Docker を使う on Mac](https://zenn.dev/takasp/articles/3cf03da87d894e)
- [Docker on Limaで脱Docker Desktop for Mac](https://zenn.dev/matsukaz/articles/31bc31ff1c54b4)

limaのLinux VMは、minikubeのようにAnyConnect起因のNW系の問題が生じず、limaによるDocker環境には満足していたのですが、YAMLファイルを自分で用意する必要がある点で、まだDocker Desktopの容易さには及びません。


# Colima
[Colima](https://github.com/abiosoft/colima)は、limaを内包し、limaでのVM準備の手間を省き、より簡単にコンテナ環境をセットアップできるようにしたツールです。

以下のコマンドを実行するだけでDocker環境が手に入ります（他のツールも同様ですが、Docker CLIは別途導入必要）。

```bash
brew install colima

colima start
```

セットアップの手順は以下の記事も参照ください。

- [colimaでlima+dockerのセットアップを少しシンプルにする](https://qiita.com/awrznc/items/617651c94585f55c4719)

Colimaのよいところは、Kubernetes環境もColimaで用意できる点です。Colimaを起動する際、`--with-kubernetes`オプションを付けるだけです。

```bash
colima start --with-kubernetes
```

個人的にはまった点は、limaではDockerデーモンにアクセスするための設定として、`~/.zshrc`、`~/.bashrc`に環境変数`DOCKER_HOST`を設定していたのですが、limaを試した後にColimaを試したため、この設定が残ったままになっていて、`DOCKER_HOST`が間違った先を示していたため、dockerコマンドがエラーになるという問題に悩まされました（Colima自体の問題ではなく、私の設定不備です）。

Colimaは手軽さという点でほぼ満点なのですが、Docker DesktopのようなGUIが提供されていないというのが唯一の難点です。


# Rancher Desktop
[Rancher Desktop](https://rancherdesktop.io/)は、SUSEからリリースされた、デスクトップ環境におけるコンテナ・Kubernetesの環境構築・管理ツールです。Docker Desktopの無償猶予期間が終了した2022年2月1日にバージョン1.0がリリースされました。

Mac、Linux、Windowsのそれぞれに対応しており、Mac・Linuxではlima、WindowsではWSL2によりLinux VMを稼働させています。

Rancher Desktopの導入は非常に簡単で、Macであればdmgファイルをダウンロードし、dmgファイルをダブルクリックして、展開されたファイルをApplicationsフォルダに配置するだけです。

ApplicationsフォルダのRancher Desktopを起動すると、Linux VM、および、Kubernetesクラスタの作成処理が自動的に実行され、完了後はdockerコマンドでDockerが利用可能になっています。

Rancher DesktopのKubernetesの設定画面が以下です。Kubernetesのバージョン、コンテナランタイム、メモリ・CPUの割り当てなどが設定できます。
「Reset Kubernetes」ボタンで、Kubernetesクラスタを作り直すこともできるようになっています。Kubernetesに試しに色々と入れた結果、初期化したいケースがあると思いますが、そのような場合に使えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/b77a8c7b-484c-6e34-207d-96320868f692.png)

Kubernetesが不要な場合、[ノードを削除することで無効化できる](https://docs.rancherdesktop.io/faq)ようです。ただ、このノードの削除が[Dockerコンテナに影響を与える](https://github.com/rancher-sandbox/rancher-desktop/issues/985#issuecomment-1027816461)こともあるようです。もし問題が生じた場合は上記の「Reset Kubernetes」ボタンで元に戻しましょう。

Rancher Desktopのインストールの流れ・詳細は以下の記事も参照ください。

- [Docker DesktopからRancher Desktopに乗り換えてみた](https://knqyf263.hatenablog.com/entry/2022/02/01/225546)
- [まるでDocker Desktop！！Rancher Desktopの登場です](https://qiita.com/moritalous/items/14d4099023981dcf4fd2) （※Windowsでの導入例です）


# まとめ
私自身は、minikube → lima → Colima → Rancher Desktop と試し、現時点ではRancher Desktopで特に不自由なく利用できています。

ただ、Mac環境でLinux VMが欲しいという点では lima を使用していますので、Docker目的ではなくLinux目的で lima を導入・利用することはおすすめです。