y-ohgi's blog

TODO: ここになにかかく

Finchでdocker-composeを動かす

TL;DR

  • AWSがOSSとして公開したコンテナクライアントFinchでdocker-composeを立ち上げ
  • Docker for Macの代替として、dockerのsocketを扱う以外のユースケースでは十分利用可能

Versions

概要

Finchとは2022年にAWSが公開したコンテナクライアントです。
コンテナ開発用のオープンソースクライアント「Finch」のご紹介 | Amazon Web Services ブログ

簡単に言えばDocker for Desktopの代替となるようなOSSになります。
Finchの裏側ではLima(vm)が動いています。今回はcontainerのオーケストレーションとして使用しますが、Lima(containerd, nerdctl, BuildKit)を透過的に扱えるためcontainerのbuildやpushも行えます。

流れ

Finchのインストールと動作確認

brewでインストールが可能なため、brewでインストールを行います。

$ brew install finch

FinchのVMを立ち上げます

$ finch vm init

立ち上げたFinchの動作確認を行います。
AWS製のOSSということもあり、READMEではECR上のFinchイメージを使用しているため、それに習いFinchのサンプルイメージを使用します。

$ finch run --rm public.ecr.aws/finch/hello-finch
INFO[0000] Using default values due to missing config file at "/Users/ookiyuusuke/.finch/finch.yaml"
INFO[0000] "/Users/ookiyuusuke/.finch" directory doesn't exist, attempting to create it
INFO[0000] binaries directory doesn't exist
INFO[0000] Requesting root access to finish network dependency configuration
Password:
INFO[0003] sudoers file not found: open /etc/sudoers.d/finch-lima: no such file or directory
INFO[0007] Initializing and starting Finch virtual machine...
INFO[0097] Finch virtual machine started successfully
~/ghq/github.com/y-ohgi/learn-gcp/cloudrun-with-lima gcp: learn-387812 main :y-ohgi
$ finch run --rm public.ecr.aws/finch/hello-finch
public.ecr.aws/finch/hello-finch:latest:                                          resolved       |++++++++++++++++++++++++++++++++++++++|
index-sha256:a71e474da9ffd6ec3f8236dbf4ef807dd54531d6f05047edaeefa758f1b1bb7e:    done           |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:2f848edb93f7d0cfa20d7dc7add84586fe06d258d6dd54422d8015c584ff3b9e: done           |++++++++++++++++++++++++++++++++++++++|
config-sha256:50c36f221209ea6829db90eff11db167d8cc22abf7c2c0f1e7f4a0c701c0592f:   done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:cb7e3bc996dd3208c5b4560d5f6571486e2fe90b5a1cc384e2d6af0dc07de02a:    done           |++++++++++++++++++++++++++++++++++++++|
elapsed: 4.9 s                                                                    total:  1.0 Mi (209.4 KiB/s)

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


Hello from Finch!

Visit us @ github.com/runfinch

立ち上げるとFinchのロゴである鳥のAAが表示されました。かわいい

docker-composeを起動する

nginxを起動するだけの単純なdocker-composeを記述します。
docker-composeとの違いとして、 image にはURIをフルパスで記載する必要があります。例えば image: nginx のような指定だとpullが行えないため、 image: docker.io/nginx のように記載します。
今回はAWSが公開したOSSということで、ECRのnginxのイメージを指定します

version: "3.9"

services:
  nginx:
    # image: docker.io/nginx
    image: public.ecr.aws/nginx/nginx:stable
    ports:
      - 8080:80

composeをバックグラウンドで起動します。

$ finch compose up -d

nginxが起動しているかをcurlで確認します

$ curl -I localhost:8080
HTTP/1.1 200 OK
Server: nginx/1.25.1
Date: Sun, 16 Jul 2023 11:22:20 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 13 Jun 2023 15:08:10 GMT
Connection: keep-alive
ETag: "6488865a-267"
Accept-Ranges: bytes

停止

起動したcomposeを停止させます

$ finch compose stop

起動したfinchのvmを停止させます

$ finch vm stop

おまけ

ARMイメージの実行

試しにARMイメージをIntel Mac上で動かしてみます。

使用しているPCのCPUをまずは確認します。

$ uname -m
x86_64

platformとしてarm64を指定します

$ finch run --platform arm64 -p 8888:80 docker.io/nginx

ARMで動いていることが確認できました。

$ finch exec 36c2f131e49a uname -m
aarch64

ポートを叩くと動いていることが確認できます

$ curl -I localhost:8888
HTTP/1.1 200 OK
Server: nginx/1.25.1
Date: Sun, 16 Jul 2023 12:49:46 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 13 Jun 2023 15:08:10 GMT
Connection: keep-alive
ETag: "6488865a-267"
Accept-Ranges: bytes

所感

想像以上に簡単に簡単に扱える点に感動しました。
まだ触っただけの状態ではありますが、普段遣いであればDocker for Macの代替として十分使用可能な肌感を持ちました。