Lima（v0.11.3）を使ってMac 上にDocker の環境を作ってみた

# はじめに
お久しぶりな投稿です。
今回は現在の参加プロジェクトでDocker Desktop for Macを使用していたら、[有料になるぞ！](https://www.itmedia.co.jp/news/articles/2109/02/news112.html#:~:text=%E5%80%8B%E4%BA%BA%E3%82%84%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%AB%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%81%A7%E3%81%AF%E5%BC%95%E3%81%8D%E7%B6%9A%E3%81%8D%E7%84%A1%E6%96%99%E3%81%A7Docker%20Desktop%E3%82%92%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD&text=%E3%81%A4%E3%81%BE%E3%82%8A250%E4%BA%BA%E4%BB%A5%E4%B8%8A%E3%82%82%E3%81%97%E3%81%8F%E3%81%AF,%E3%80%8CBusiness%E3%80%8D%E3%81%AE3%E7%A8%AE%E9%A1%9E%E3%80%82)ということだったので、代替手段を探した結果Limaを使う手段に行き着いたのでやってみたというところなのですが、その頃はバタバタしていたのでやってみた時点では投稿しなかったのですが…
元々、有料になるという話が出た時期に試しに入れてみて使っていたのですが、最近ちょっと久しぶりにLimaのアップデートをしたら、なんだか便利になっていたのでその内容のご紹介です。
ちなみに、うちのシステムは今のところテストのMock用（S3に画像を保存する処理）に使っている[LocalStack](https://github.com/localstack/localstack)のためにDockerを入れている状態です。



# 使用するもの
[Lima](https://github.com/lima-vm/lima) : ver0.8.0以上。Mac OS上にLinux VM の環境を作るために使用します。
[Docker](https://www.docker.com/)
[Homebrew](https://brew.sh/index_ja) : DockerやLimaは`brew install`でインストールしました。

# セットアップ手順
まず、元々入れていた時に参考にさせていただいたのが[こちら](https://qiita.com/yoichiwo7/items/44aff38674134ad87da3)の記事になります。
正直インフラ系に強いわけでもないので、この内容を見てやった時点でLima のLinux VM上にDocker Engine Serverを立てて、Mac上のDocker CLI からアクセスできるようにしてDocker 使えるようにしたよという認識をしているだけです。
つい最近になって、開発環境の諸々最新にしたいと思っていろいろやっていたら、Limaのver0.8.0以上から簡単にDocker入れられるようになったというのを見かけて（参考：[Docker on Lima](https://blog.1q77.com/2022/01/docker-on-lima/)）元の環境を消して試してみました。

## Mac上にDocker のインストール
　特に書くこともないかもしれませんが、brew を使ってインストールします。

```console
brew install docker
```

　インストール後、`docker version`を実行して、Client情報が表示されれば、この時点ではOKです。
　Serverの情報はまだ何もセットアップしていないのでエラーで表示されません。

## Lima のインストール
　まずはbrew でLimaをインストールします。

```console
brew install lima
```

#### 起動するLimaのインスタンス設定変更
　Lima のインストール後、`/usr/local/share/doc/lima/examples/`ディレクトリ内のファイルを確認すると、いろいろとyamlが入っているのですが、その中に`docker.yaml`があります。（参考： [Lima Release v0.8.0](https://github.com/lima-vm/lima/releases/tag/v0.8.0)）
　VMを作るに当たっての細かい設定値は適宜ファイルの中身をいじって欲しいのですが、今回はこのファイルを`default.yaml`に置き換えます。
　そのままこのファイルを使ってVMを作ると、dockerという名前で作られるのですが、そうなるとLima関連のコマンドを使うときなどにちょっと面倒なので、私の場合はDockerが入ったもののみを使う都合上、置き換えて問題なかったのでそういうやり方にしました。
　ファイル置き換え後、Limaを起動します。

#### Limaの起動
```console
lima start
```

　実行したログの最後に

```console
To run `docker` on the host (assumes docker-cli is installed), run the following commands:
------
docker context create lima-default --docker "host=unix:///Users/{username}/.lima/default/sock/docker.sock"
docker context use lima-default
docker run hello-world
------
```
　というような文章（hostのディレクトリは環境によりけりだと思われる）が表示されると思うので、その通りやればいいのかもですが、私はHostの設定については`.profile`に環境変数の設定をしてしまいました。（最初に参考にした記事がそういう感じだったので既存の設定があったこともあり）

```console
echo  "export DOCKER_HOST=unix:///Users/{username}/.lima/default/sock/docker.sock" >> $HOME/.profile
source $HOME/.profile
```
　設定後、`docker version`を実行して、ClientとServer情報が表示されればOKです。

#### docker compose について
　これに関しては、何か参考にしたというより私はこうしてるという話だけなのですが…
　`lima cat`というコマンドでLima側からLima上にないファイルを参照できるようにしてから、Lima上で`docker compose`します。

```console
lima cat {ファイルを置いてるディレクトリのパス}/docker-compose.yml
lima docker compose up
```
　最新だとLimaにdocker compose の v2が入っているので、上記コマンドを使用するようにしてください。
　ちなみに、v2ってファイルの中身の変更があったりしたみたいですが、うちで使っている範囲だと中身が元と同じでOKだったので、元々のファイルをそのまま使っています。

ちなみに、localstack を使うためのdocker-compose.ymlは[LocalStackの公式にある](https://github.com/localstack/localstack/blob/master/docker-compose.yml)のでご覧になってみてください。


# おわりに
本当にただただ紹介しただけな感じですが、簡単に使えるツールとかってありがたいなと思いますよね。

ちなみに、Dockerを使いたいという話なら、[Colima](https://github.com/abiosoft/colima)というものを入れると設定とか全然考えずに使えるというのもあります。
ただ、試しに入れてみたところ、DockerのVersionが少し古めだったので公式で設定ファイルも作ってくれてるなら最新も入るしそちらでいいかなと思って使った感じです。
今のところライトユーザーなのでどちらを使うとどういう利点があるとかは深く考えていないというのもありますが…

もし何かしら間違い等ありましたら、ご指摘いただけると幸いです。


# 参考
[Docker Desktop for Macの実用的な代替手段: lima + Docker](https://qiita.com/yoichiwo7/items/44aff38674134ad87da3)
[Docker on Lima](https://blog.1q77.com/2022/01/docker-on-lima/)
[Lima: Linux virtual machines (on macOS, in most cases)](https://github.com/lima-vm/lima)
[Docker Compose](https://github.com/docker/compose)
[Compose file format](https://compose-spec.io)
[The Compose Specification - Compose file](https://github.com/compose-spec/compose-spec/blob/master/spec.md#compose-file)
[LocalStack](https://github.com/localstack/localstack)
[Colima](https://github.com/abiosoft/colima)