Dockerの代替になりそうなFinchを使ってみる

# はじめに
普段仕事でDockerを使っているが、[AWSがその代替となるFinchを発表しました](https://www.itmedia.co.jp/news/articles/2211/24/news107.html)。
興味があったので自分の勉強メモとして残しておきます。

# セットアップ
自分のインストール環境は以下です。
```bash
> uname -a
Darwin XXXXX-MacBook-Pro.local 22.1.0 Darwin Kernel Version 22.1.0: Sun Oct  9 20:15:09 PDT 2022; root:xnu-8792.41.9~2/RELEASE_ARM64_T6000 arm64
```

インストールを行うためにまず[こちらのurl](https://github.com/runfinch/finch/releases)から自分のOSにあったパッケージをダウンロード、インストールします。自分が使っている環境はMacOSのM1 proのため[Finch-v0.1.0-aarch64.pkg](https://github.com/runfinch/finch/releases/download/v0.1.0/Finch-v0.1.0-aarch64.pkg)をインストールします。

出てきた画面をぽちぽち選べばインストールは完了します。

## チュートリアルの写経
finchにはDocker desktopnのようなGUIは現状ないため、基本コマンドで操作することになります。インストール後にはまず下記のコマンドを実行し、Finchの仮想環境を初期化する必要があります。初期化の際にパスワードを求められます。自分は一回エラーに当たって少し手こずったのですが、解決策は後述します。
```bash
❯ finch vm init
```

初期化が完了したら、下記コマンドでサンプルのコンテナを立ち上げてみます。
```bash
❯ finch run --rm public.ecr.aws/finch/hello-finch


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


Hello from Finch!

Visit us @ github.com/runfinch
```

## docker-composeと少し比較
[サンプルのdjangoプロジェクト](https://github.com/abemaru/learn_finch)を用意しました。
Dockerfileとdocker-compose.ymlを用意し、自分がよく使うコマンドが使えるかどうかを確認します。

### コンテナの起動、確認、停止
docker-composeでよく使う起動、停止などは問題なく使用できそうです。
試しにfinchで作成したコンテナにlocalhost:8000にアクセスしたところ、djangoの画面が表示されたので問題なく使用できそうです。
#### docker
```bash
❯ docker-compose -f docker-compose.yaml up -d --build
[+] Building 2.1s (12/12) FINISHED
...
[+] Running 2/2
 ⠿ Container learn_finch-db-1   Started                                    
 ⠿ Container learn_finch-web-1  Running

❯ docker-compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
learn_finch-db-1    "docker-entrypoint.s…"   db                  exited (1)
learn_finch-web-1   "pipenv run python b…"   web                 running             0.0.0.0:8000->8000/tc

❯ docker-compose down
[+] Running 3/1
 ⠿ Container learn_finch-web-1  Removed                                                              0.2s
 ⠿ Container learn_finch-db-1   Removed                                                              0.0s
 ⠿ Network learn_finch_default  Removed                                                              0.1s
```


#### finch
```bash
❯ finch compose up -d
...
INFO[0009] Building image learn_finch_web
...
INFO[0039] Creating container learn_finch_web_1

❯ finch compose ps
NAME                 COMMAND                   SERVICE    STATUS                           PORTS
learn_finch_db_1     "docker-entrypoint.s…"    db         Exited (1) About a minute ago
learn_finch_web_1    "pipenv run python b…"    web        running                          0.0.0.0:8000->8000/tcp❯ finch compose ps

❯ finch compose down
INFO[0000] Removing container learn_finch_web_1
INFO[0000] Removing container learn_finch_db_1
INFO[0000] Removing network learn_finch_default
```

## dockerとfinchのコマンド比較
しっかり書こうと思ったのですが、下記のコマンド全てを把握するのは個人の技量的に難しそうだったので、helpで表示されたコマンドを貼っておきます。
dockerとfinchそれぞれの挙動を確認しているわけではないので、ご了承ください。

| command | docker | finch |
| --- | --- | --- |
| attach | ○ |  |
| build | ○ | ○ |
| builder | |○ |
| commit | ○ |○ |
| completion | |○|
| compose |○|○|
| cp |○ | |
| create |○ |○ |
| diff |○ | |
| events |○ |○ |
| exec |○ |○ |
| export |○ | |
| history |○ |○ |
| image | |○|
| images |○ |○|
| import |○ | |
| info |○ |○ |
| inspect |○ |○ |
| kill |○ |○ |
| load |○ |○ |
| login |○ |○ |
| logout |○ |○ |
| logs |○ |○ |
| network | |○ |
| pause |○ |○ |
| port |○ |○ |
| ps |○ |○ |
| pull |○ |○ |
| push |○ |○ |
| restart | |○|
| rename |○ | |
| restart |○ |○ |
| rm |○ |○ |
| rmi |○ |○ |
| run |○ |○ |
| save |○ |○ |
| search |○ | |
| start |○ |○ |
| stats |○ |○ |
| stop |○ |○ |
| system | |○ |
| tag |○ |○ |
| top |○ |○ |
| unpause |○ |○ |
| update |○ |○ |
| version |○ |○ |
| vm | |○ |
| volume | |○ |
| wait |○ |○ |

## さいごに
finch、完全にDockerの代替を狙っていますね。。。
従来のDockerfileやcompose.yamlが使え、さらにAWSサービスとうまく連携できるならもうこれでいいのでは？と思ってきました。今後のアップデートに期待です。