Docker Desktop の代わりになるかも。AWS が OSS として公開した「Finch」を使ってみた。


# 概要

* 2022/11/23 に唐突に公開された [Finch](https://github.com/runfinch/finch) なるOSSがAWSより公開されました。
* どうやら、Docker Desktopの代わりとなりそうな、ローカルマシン上に仮想環境とコンテナランタイム、ビルドツールなど一式を楽〜に導入できるツールっぽいので試してみたという内容です。

https://twitter.com/AWSOpen/status/1595129507257585664?s=20&t=ze6gGyUyZ0-3IVAJM2LzBA

# Finchとは

* つい先日(2022/10/27)に、Docker社が、Docker の Team プラン、Business プランを値上げするニュースが発表された。期限も短く、急いで対応に追われた企業も多いのではないでしょうか・・・

https://www.itmedia.co.jp/news/articles/2210/18/news133.html

* まさかこのタイミングでという感じですが、AWS よりローカルマシン上に仮想環境とコンテナランタイム、ビルドツールなどを一式を楽〜に導入できるツールが OSS として公開されました。
* ちなみに、ローカルマシン上でコンテナの開発環境を整えるには、仮想マシン上にLinuxを用意し、その上でコンテナランタイム、ビルドツール、コマンドライン等を準備する必要があります。
* それを意識せず楽〜に用意してくれるのが、みなさんご存知の Docker Desktop でした。

## じゃあ、Finchは？？

* Finch は、仮想マシン上をMAC上に構築する[Lima](https://github.com/lima-vm/lima/)、コンテナランタイムの[containerd](https://containerd.io/)、ビルドツールの[BuildKit](https://github.com/moby/buildkit)、containerd経由でコンテナを操作できるコマンドラインの[nerdctl](https://github.com/containerd/nerdctl)などを一式用意し、簡単にコンテナの開発環境を整えてくれます。


* 現時点では M1 Apple Silicon の Mac/ Intel ベースの Mac のアーキテクチャのイメージをビルドできます。
* ただ、今後 Windows や Linux にも対応したいと考えているようです。


## Finch でできること

* Finch は nerdctl(コマンドラインツール) と直接統合されているため、Dockerで使っていたコマンドとオプションはすべて、いい感じに実行できているように動作します。
* なので、レジストリからイメージをプルして、コンテナをローカルマシンで実行し、既存の Dockerfile を使用してイメージをビルドすることができます。
* 最初の起動では、ボリュームとネットワークのサポートが用意されています。
* また、compose も複数のコンテナアプリケーションを実行およびテストするためにサポートされています。
* **注意点: Finch には現時点で GUI がなく、クラスター管理やその他のコンテナオーケストレーションツールを追加で統合はしていない。単純なコマンドラインクライアントを提供しています。**

## やってみた
### 環境
* Apple M1 Pro
* RAM 16 GB

### 導入

* まずは、Finch を macOS にインストールします。
* 最新のリリースパッケージをダウンロードします。

https://github.com/runfinch/finch/releases

* 今回は、M1 Mac を使用しているので、「Finch-v0.1.0-aarch64.pkg」をダウンロードします。

* インストール後、Finch の仮想環境を初期化して開始する必要があるので、下記のコマンドを実行して VM を起動します。
* 初期設定には約 1 分くらいかかります。「Finch virtual machine started successfully」が表示されたら完了。

```
$ finch vm init
INFO[0000] Initializing and starting Finch virtual machine...
..
INFO[0067] Finch virtual machine started successfully
```

### 再起動時
* Finch の仮想環境を開始するためには、以下のコマンドを実行します。

```
$ finch vm start
```

### 停止時
* Finch の仮想環境を終了するためには、以下のコマンドを実行します。

```
$ finch vm stop
```

### コンテナを動かしてみた

* 仮想環境が準備できたので、コンテナを実行してみましょう。
* ecrにある 事前に用意されているイメージを起動してみましょう。

```
$ finch run --rm public.ecr.aws/finch/hello-finch

                            @@@@@@@@@@@@@@@@@@@
                        @@@@@@@@@@@@    @@@@@@@@@@@
                      @@@@@@@                  @@@@@@@
                    @@@@@@                        @@@@@@
                  @@@@@@                            @@@@@
                 @@@@@                      @@@#     @@@@@@@@@
                @@@@@                     @@   @@@       @@@@@@@@@@
                @@@@%                     @     @@            @@@@@@@@@@@
                @@@@                                               @@@@@@@@
                @@@@                                         @@@@@@@@@@@&
                @@@@@                                  &@@@@@@@@@@@
                 @@@@@                               @@@@@@@@
                  @@@@@                            @@@@@(
                   @@@@@@                        @@@@@@
                     @@@@@@@                  @@@@@@@
                        @@@@@@@@@@@@@@@@@@@@@@@@@@
                            @@@@@@@@@@@@@@@@@@


Hello from Finch!

Visit us @ github.com/runfinch
```

### composeを試してみよう

* 次は、compose を試してみます。
* 使用するサンプルソースは、[yelb](https://github.com/mreferre/yelb)を使います。

```
$ tree .
.
├── README.md
├── docker-compose.yaml
└── stack-deploy.yaml

0 directories, 3 files


$ finch compose up -d
INFO[0000] Creating network docker_yelb-network
INFO[0000] Creating network docker_default
INFO[0000] Ensuring image redis:4.0.2
INFO[0000] Ensuring image mreferre/yelb-db:0.6
INFO[0000] Ensuring image mreferre/yelb-appserver:0.6
INFO[0000] Ensuring image mreferre/yelb-ui:0.10
INFO[0000] Creating container docker_yelb-ui_1
INFO[0000] Creating container docker_yelb-appserver_1
INFO[0000] Creating container docker_redis-server_1
INFO[0000] Creating container docker_yelb-db_1
```

# まとめ

* GUI とかないけど、全然快適に使えましたね。！
* **これ、AWSのサービスとかと統合されたら、マジやばいんじゃ・・・・**
* **今年の re:Inventに期待！**

# 参考文献

https://github.com/runfinch/finch

https://aws.amazon.com/jp/blogs/opensource/introducing-finch-an-open-source-client-for-container-development/