本記事は
NRIネットコム Advent Calendar 2022
18日目の記事です。
🎁 17日目
▶▶本記事 ▶▶
19日目
🎄
ども、尾澤です。めっきり寒くなりました。
Techブログ登場は2回目です。
このブログが公開される頃には決勝進出チームが決まり、
3位決定戦が終わっている頃でしょう。
私の決勝予想はFRA or BRZ ... と、予想していましたが、
BRZはベスト8で姿を消しました。。。がんばれFRA。
Finch とは
近年ライセンス料金改定によって経営陣の頭を悩ませている(?)Docker Desktopですが、
その代替になりうるツールと呼ばれているのが「Finch」です。(読み方わからん)
2022年11月にAWSからオープンソースとして公開されました。
https://github.com/runfinch
ちょっとドキュメント読んでみる
というわけでfinchのREADMEを読んでみます。
https://github.com/runfinch/finch
Hello, Finch
中身としてはnerdctlベースらしいです。
Getting Started with Finch on macOS
どうも現時点ではmacOSしかサポートしていなさそうです。
Installing Finch
リソース的な制約は下記です。
- macOS catalina (10.15) 以上
- IntelCPUでも使える
- 最低でも 2 CPU、メモリ 4 GiB 以上
Running containers and building images
コマンドが全部 finch に置き換わってるだけで、操作感はdockerとあまり変わらなさそう。
Working with Finch
-v オプションは使えそうだけど $HOME 外でやると想定外の挙動になりそうなのでやめてね、とのこと。
${HOME}/.finch/finch.yaml
で finch が起動する仮想マシン(VM)へのリソース割り当てを指定できるそう。
What's next?
一応他OS(Windows, Linux)への展開は考えられていそうでした。
早速入れてみる
物は試し。インストールします。
現在はbrewからでもインストール可能のようです。
今回はパッケージを使います。下記からダウンロードします。
https://github.com/runfinch/finch/releases
まぁこんな感じです。
インストールが完了したらこんなのが出ます。
まずは finch vm init
でVMを起動しろとのことです。やってみます。
❯ finch vm init INFO[0000] Using default values due to missing config file at "/Users/k-ozawa/.finch/finch.yaml" INFO[0000] "/Users/k-ozawa/.finch" directory doesn't exist, attempting to create it INFO[0001] binaries directory doesn't exist INFO[0001] Requesting root access to finish network dependency configuration INFO[0001] sudoers file not found: %!w(*fs.PathError=&{open /etc/sudoers.d/finch-lima 2}) INFO[0002] Initializing and starting Finch virtual machine... INFO[0203] Finch virtual machine started successfully
起動したっぽいです。所要時間は3分ほどです。
このタイミングで$HOMEに.finchディレクトリが作成され、finch.yamlが配置されます。
➜ cat ~/.finch/finch.yaml cpus: 2 memory: 4GiB
デフォルトだと最小で必要になるリソース割り当てになってそうです。
ちなみにVMはlimaで動いているようです。
https://github.com/lima-vm/lima
動作確認
ちゃんと動くかどうか、READMEのサンプルコマンドで試してみます。
https://github.com/runfinch/finch#running-containers-and-building-images
➜ 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.7 s total: 1.0 Mi (226.3 KiB/s) @@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@ @@@@@@@ @@@@@@ @@@@@@ @@@@@@ @@@@@ @@@@@ @@@# @@@@@@@@@ @@@@@ @@ @@@ @@@@@@@@@@ @@@@% @ @@ @@@@@@@@@@@ @@@@ @@@@@@@@ @@@@ @@@@@@@@@@@& @@@@@ &@@@@@@@@@@@ @@@@@ @@@@@@@@ @@@@@ @@@@@( @@@@@@ @@@@@@ @@@@@@@ @@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ Hello from Finch! Visit us @ github.com/runfinch
動きました!(このAAなに???と思ったらアイコンのAAでした。遠目で見たらわかる)
ちなみにコマンドヘルプはこんな感じです。
➜ finch -h Finch: open-source container development tool Usage: finch [command] Available Commands: build Build an image from Dockerfile builder Manage builds commit Create a new image from a container's changes completion Generate the autocompletion script for the specified shell compose Compose container Manage containers create Create a new container events Get real time events from the server exec Run a command in a running container help Help about any command history Show the history of an image image Manage images images List images info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a container registry logout Log out from a container registry logs Fetch the logs of a container network Manage networks pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image from a registry push Push an image or a repository to a registry restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers system Manage containerd tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show Finch version information vm Manage the virtual machine lifecycle volume Manage volumes wait Block until one or more containers stop, then print their exit codes Flags: --debug running under debug mode -h, --help help for finch -v, --version version for finch Use "finch [command] --help" for more information about a command.
ぱっと見はほとんどDockerそのまま流用できそうな感じです。
ちなみにdockerのヘルプはこんな感じです。
❯ docker --help Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Options: --config string Location of client config files (default "/Users/k-ozawa/.docker") -c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use") -D, --debug Enable debug mode -H, --host list Daemon socket(s) to connect to -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "/Users/k-ozawa/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/Users/k-ozawa/.docker/cert.pem") --tlskey string Path to TLS key file (default "/Users/k-ozawa/.docker/key.pem") --tlsverify Use TLS and verify the remote -v, --version Print version information and quit Management Commands: builder Manage builds buildx* Docker Buildx (Docker Inc., v0.9.1) compose* Docker Compose (Docker Inc., v2.12.1) config Manage Docker configs container Manage containers context Manage contexts dev* Docker Dev Environments (Docker Inc., v0.0.3) extension* Manages Docker extensions (Docker Inc., v0.2.13) image Manage images manifest Manage Docker image manifests and manifest lists network Manage networks node Manage Swarm nodes plugin Manage plugins sbom* View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0) scan* Docker Scan (Docker Inc., v0.21.0) secret Manage Docker secrets service Manage services stack Manage Docker stacks swarm Manage Swarm system Manage Docker trust Manage trust on Docker images volume Manage volumes Commands: attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes Run 'docker COMMAND --help' for more information on a command. To get more help with docker, check out our guides at https://docs.docker.com/go/guides/
うん、、なんかやっぱ洗練されてる感はありますね。
hello-finch をローカルビルドしてみる
finch のソースコードをクローンして、ローカルでビルドしてみます。
➜ git clone https://github.com/runfinch/finch.git Cloning into 'finch'... remote: Enumerating objects: 362, done. remote: Counting objects: 100% (138/138), done. remote: Compressing objects: 100% (84/84), done. remote: Total 362 (delta 98), reused 63 (delta 54), pack-reused 224 Receiving objects: 100% (362/362), 262.75 KiB | 2.05 MiB/s, done. Resolving deltas: 100% (176/176), done.
build
➜ cd ./finch/contrib/hello-finch ➜ finch build . -t hello-finch [+] Building 126.8s (11/11) FINISHED => [internal] load build definition from Dockerfile 0.2s => => transferring dockerfile: 322B 0.0s => [internal] load .dockerignore 0.2s => => transferring context: 2B 0.0s => [internal] load metadata for public.ecr.aws/docker/library/golang:1.19 4.8s => [builder 1/4] FROM public.ecr.aws/docker/library/golang:1.19@sha256:dc76ef03e54c34a00dcdca81e55c242d24b34d231637776c4 100.3s => => resolve public.ecr.aws/docker/library/golang:1.19@sha256:dc76ef03e54c34a00dcdca81e55c242d24b34d231637776c4bb5c1a8e85 0.1s => => sha256:14a70245b07c7f5056bdd90a3d93e37417ec26542def5a37ac8f19e437562533 0B / 156B 120.8s => => sha256:52908dc1c386fab0271a2b84b6ef4d96205a98a8c8801169554767172e45d8c7 84.93MB / 85.97MB 120.7s => => sha256:a2b47720d601b6c6c6e7763b4851e25475118d80a76be466ef3aa388abf2defd 148.91MB / 148.91MB 120.7s => => sha256:195ea6a58ca87a18477965a6e6a8623112bde82c5b568a29c56ce4581b6e6695 54.59MB / 54.59MB 120.7s => => sha256:c85a0be79bfba309d1f05dc40b447aa82b604593531fed1e7e12e4bef63483a5 10.49MB / 10.88MB 120.4s => => sha256:e4e46864aba2e62ba7c75965e4aa33ec856ee1b1074dda6b478101c577b63abd 4.19MB / 5.16MB 112.0s => => sha256:a8ca11554fce00d9177da2d76307bdc06df7faeb84529755c648ac4886192ed1 54.53MB / 55.04MB 108.8s => => extracting sha256:a8ca11554fce00d9177da2d76307bdc06df7faeb84529755c648ac4886192ed1 6.9s => => extracting sha256:e4e46864aba2e62ba7c75965e4aa33ec856ee1b1074dda6b478101c577b63abd 1.1s => => extracting sha256:c85a0be79bfba309d1f05dc40b447aa82b604593531fed1e7e12e4bef63483a5 0.9s => => extracting sha256:195ea6a58ca87a18477965a6e6a8623112bde82c5b568a29c56ce4581b6e6695 11.0s => => extracting sha256:52908dc1c386fab0271a2b84b6ef4d96205a98a8c8801169554767172e45d8c7 7.8s => => extracting sha256:a2b47720d601b6c6c6e7763b4851e25475118d80a76be466ef3aa388abf2defd 16.5s => => extracting sha256:14a70245b07c7f5056bdd90a3d93e37417ec26542def5a37ac8f19e437562533 0.1s => [internal] load build context 0.4s => => transferring context: 2.16kB 0.0s => [builder 2/4] WORKDIR /build 0.1s => [builder 3/4] COPY . . 0.2s => [builder 4/4] RUN CGO_ENABLED=0 go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o hello-finch . 20.0s => [stage-1 1/2] COPY --from=builder /build/hello-finch /app/ 0.1s => [stage-1 2/2] WORKDIR /app 0.2s => exporting to oci image format 0.8s => => exporting layers 0.4s => => exporting manifest sha256:8cc472a48ea9307963711d35574536d6f960880468e9eebb5d134d7c98410f51 0.0s => => exporting config sha256:b25c674348c46c04ee73175c18ee1de5568ddc750d7297e97d5571718817eded 0.0s => => sending tarball 0.3s unpacking docker.io/library/hello-finch:latest (sha256:8cc472a48ea9307963711d35574536d6f960880468e9eebb5d134d7c98410f51)... Loaded image: docker.io/library/hello-finch:latest
当方のネットワーク環境が調子悪くてpullにめっちゃ時間かかりましたが、、、 ビルドできました。
イメージの確認は finch images でできます。
➜ finch images REPOSITORY TAG IMAGE ID CREATED PLATFORM SIZE BLOB SIZE hello-finch latest 8cc472a48ea9 56 seconds ago linux/amd64 1.7 MiB 1.0 MiB
ComposeなNginxを起動してみる
下記のようなdocker-compose.ymlを配置して、composeでデーモン起動させます。
Finch使ってるのにDocker Hubからイメージ拝借するのはなんだか気が引けたので ←
NginxイメージはECR Public Garellyから拝借しました。
version: "3" services: nginx: image: public.ecr.aws/nginx/nginx:1.23-alpine container_name: finch-nginx ports: - "80:80"
compose サブコマンドを使います。
➜ finch compose up -d INFO[0000] Creating network finch_default INFO[0000] Ensuring image public.ecr.aws/nginx/nginx:1.23-alpine public.ecr.aws/nginx/nginx:1.23-alpine: resolved |++++++++++++++++++++++++++++++++++++++| index-sha256:add3eb26b0c39784668b50ade995b6ef725cb32eaa9637c4728bd9334930aa81: done |++++++++++++++++++++++++++++++++++++++| manifest-sha256:0f2ab24c6aba5d96fcf6e7a736333f26dca1acf5fa8def4c276f6efc7d56251f: done |++++++++++++++++++++++++++++++++++++++| config-sha256:19dd4d73108a1feefc29d299f3727467ac02486c83474fc3979e4a7637291fe6: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:2f12a0e7c01d607251a4040fa41518fd2542f3ebab83a6f7817867d0de111c96: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:4342b1ab302e894161372b32fe2976899a978bf8ff2241fb1655dc25e6645a34: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:ca7dd9ec2225f2385955c43b2379305acd51543c28cf1d4e94522b3d94cce3ce: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:1a7b9b9bbef6853211515e42f58be7763749950c244a0c485bb4afd1946e06d7: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:76a48b0f58980a64d28bc3575ae4733eb337f7b82403559122b13d5e2ced3921: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:b704883c57afcf77f6bc48709943bcf808c9e9945d7e04926be41226fa415d33: done |++++++++++++++++++++++++++++++++++++++| elapsed: 10.2s total: 7.1 Mi (710.6 KiB/s) INFO[0010] Creating container finch-nginx ➜ finch compose ps NAME COMMAND SERVICE STATUS PORTS finch-nginx "/docker-entrypoint.…" nginx running 0.0.0.0:80->80/tcp
起動しました。コンテナにログインしてみます。
➜ finch compose exec finch-nginx /bin/sh FATA[0000] unknown subcommand "exec" for "compose" FATA[0000] exit status 1 ❯ finch compose -h Compose Usage: finch compose [flags] Commands: build Build or rebuild services config Validate and view the Compose file down Remove containers and associated resources kill Force stop service containers logs Show logs of a running container ps List containers of services pull Pull service images push Push service images run Run a one-off command on a service up Create and start containers version Show the Compose version information Flags: --env-file string Specify an alternate environment file -f, --f stringArray Alias of --file --file stringArray Specify an alternate compose file -h, --help help for compose --project-directory string Specify an alternate working directory -p, --project-name string Specify an alternate project name See also 'finch --help' for the global flags such as '--namespace', '--snapshotter', and '--cgroup-manager'.
おっと、execオプションがなさそうでした。
どうもfinchコマンドのexecオプションで叩くしかなさそうでしたので、それでやってみます。
➜ finch exec -it finch-nginx /bin/sh / #
入れました。
ここで細かいことに気づきましたが、
コンテナからexitする際によく Ctrl + P + Q を使っていたんですが、
finch ではそれが使えませんでした。
ここは現状 Ctrl + D とかでexitするしかなさそうです。
その他気になったところ
pruneしたい時はどうする?
docker prune ~
のようなコマンドは存在しませんが、
system,image,volume等の各サブコマンドのオプションとしてpruneが存在するので、こちらで実施できそうです。
➜ finch system -h Manage containerd Usage: finch system [flags] Commands: events Get real time events from the server info Display system-wide information prune Remove unused data Flags: -h, --help help for system See also 'finch --help' for the global flags such as '--namespace', '--snapshotter', and '--cgroup-manager'.
finch環境を削除/停止したい
vm サブコマンドで仮想マシン環境の削除/停止が可能です
# 削除 finch vm remove # 停止 finch vm stop
コンテナへのproxy情報の渡し方
試しに下記のようにapkで更新する感じのDockerfileを書いてビルドしてみます。
FROM public.ecr.aws/nginx/nginx:1.23-alpine RUN apk update && \ apk upgrade
build
➜ finch build . -t finch-nginx [+] Building 15.7s (5/5) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 116B 0.0s => [internal] load .dockerignore 0.1s => => transferring context: 2B 0.0s => [internal] load metadata for public.ecr.aws/nginx/nginx:1.23-alpine 0.8s => CACHED [1/2] FROM public.ecr.aws/nginx/nginx:1.23-alpine@sha256:add3eb26b0c39784668b50ade995b6ef725cb32eaa9637c4728bd93 0.1s => => resolve public.ecr.aws/nginx/nginx:1.23-alpine@sha256:add3eb26b0c39784668b50ade995b6ef725cb32eaa9637c4728bd9334930aa 0.1s => ERROR [2/2] RUN apk update && apk upgrade 14.7s ------ > [2/2] RUN apk update && apk upgrade: #0 0.217 fetch https://dl-cdn.alpinelinux.org/alpine/v3.16/main/x86_64/APKINDEX.tar.gz #0 6.405 ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.16/main: network error (check Internet connection and firewall) #0 6.405 WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.16/main: No such file or directory #0 6.406 fetch https://dl-cdn.alpinelinux.org/alpine/v3.16/community/x86_64/APKINDEX.tar.gz #0 13.59 ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.16/community: network error (check Internet connection and firewall) #0 13.59 WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.16/community: No such file or directory #0 13.59 2 errors; 42 distinct packages available ------ Dockerfile:3 -------------------- 2 | 3 | >>> RUN apk update && \ 4 | >>> apk upgrade 5 | -------------------- error: failed to solve: process "/bin/sh -c apk update && apk upgrade" did not complete successfully: exit code: 2 FATA[0015] unrecognized image format FATA[0016] exit status 1
#0 6.401 ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.16/main: network error (check Internet connection and firewall)
と言われてしまっているので、ビルドシーケンスでどうもproxyを超えられていなさそうです。
こういった場合、
Docker Desktopではダッシュボードないしconfig.jsonでproxy情報を定義してあげると、
コンテナ側にもそれが読み取られるようになっていますが、
finchの場合はそういった機能がなさそうでした。
試しに $HOME/.finch/finch.yml で propagateProxyEnv: true を設定したらいけるかな?と思いましたが、
finch vm stop の段階でyml情報がサラぴんに戻ってしまうので、これで設定は無理そうでした。
なので今回はDockerfileにARG句を追記してコマンドからゴリ押しでproxy情報を渡します。
追記したDockerfileはこちら
FROM public.ecr.aws/nginx/nginx:1.23-alpine # proxy情報をbuild-argから読み込む ARG HTTP_PROXY ARG HTTPS_PROXY RUN apk update && \ apk upgrade
—build-arg オプションでproxy情報を渡します。
➜ finch build . -t finch-nginx \ --build-arg HTTP_PROXY=$http_proxy \ --build-arg HTTPS_PROXY=$https_proxy [+] Building 7.6s (6/6) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 148B 0.0s => [internal] load .dockerignore 0.1s => => transferring context: 2B 0.0s => [internal] load metadata for public.ecr.aws/nginx/nginx:1.23-alpine 0.7s => CACHED [1/2] FROM public.ecr.aws/nginx/nginx:1.23-alpine@sha256:add3eb26b0c39784668b50ade995b6ef725cb32eaa9637c4728bd93 0.1s => => resolve public.ecr.aws/nginx/nginx:1.23-alpine@sha256:add3eb26b0c39784668b50ade995b6ef725cb32eaa9637c4728bd9334930aa 0.1s => [2/2] RUN apk update && apk upgrade 3.4s => exporting to oci image format 3.3s => => exporting layers 0.5s => => exporting manifest sha256:86c728fb876af03a0023689b830311edaa2ec05c235efc197bded2fe988de32a 0.0s => => exporting config sha256:14b44aa61eafdd7d47aca3f46feaa2d36779d850b35235cf7eaf5ee81cef5533 0.0s => => sending tarball 2.7s unpacking docker.io/library/finch-nginx:latest (sha256:86c728fb876af03a0023689b830311edaa2ec05c235efc197bded2fe988de32a)... Loaded image: docker.io/library/finch-nginx:latest
無事、通りました。
当面はプロキシ環境下においては、ビルド時に引数でプロキシ情報を渡してあげるという一手間が必要になりそうです。
BuildKitも使えるらしい
ドキュメントを読む感じだとnerdctlがデフォルトでBuiidKit使えそうなので、
とりあえず下記のようなmountオプションを追記してビルドしてみます。
syntaxも特に記載しなくて良さそうです。
FROM public.ecr.aws/nginx/nginx:1.23-alpine ARG HTTP_PROXY ARG HTTPS_PROXY RUN --mount=type=cache,uid=1000,target=/var/cache/apk \ # ←ここ apk update && \ apk upgrade
build
❯ finch build . -t finch-nginx \ --build-arg HTTP_PROXY=$http_proxy \ --build-arg HTTPS_PROXY=$https_proxy [+] Building 6.5s (7/7) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 204B 0.0s => [internal] load .dockerignore 0.1s => => transferring context: 2B 0.0s => [internal] load metadata for public.ecr.aws/nginx/nginx:1.23-alpine 0.7s => CACHED [internal] settings cache mount permissions 0.0s => CACHED [stage-0 1/2] FROM public.ecr.aws/nginx/nginx:1.23-alpine@sha256:add3eb26b0c39784668b50ade995b6ef725cb32eaa9637c 0.1s => => resolve public.ecr.aws/nginx/nginx:1.23-alpine@sha256:add3eb26b0c39784668b50ade995b6ef725cb32eaa9637c4728bd9334930aa 0.1s => [stage-0 2/2] RUN --mount=type=cache,uid=1000,target=/var/cache/apk apk update && apk upgrade 3.7s => exporting to oci image format 2.0s => => exporting layers 0.2s => => exporting manifest sha256:a476b49103d2ac577b2a90adf3befdcc3d9044faf53d6eb1e77e21239052cab1 0.0s => => exporting config sha256:caf5fdb12d04593ec11f65a5fe23b2fee6354943238eec39f85b81f897d96d5b 0.0s => => sending tarball 1.6s unpacking docker.io/library/finch-nginx:latest (sha256:a476b49103d2ac577b2a90adf3befdcc3d9044faf53d6eb1e77e21239052cab1)... Loaded image: docker.io/library/finch-nginx:latest
下記のようになっているのでBuildKitは効いていそうです。
=> CACHED [internal] settings cache mount permissions 0.0s => CACHED [stage-0 1/2] FROM public.ecr.aws/nginx/nginx:1.23-alpine@sha256:add3eb26b0c39784668b50ade995b6ef725cb32eaa9637c 0.1s => => resolve public.ecr.aws/nginx/nginx:1.23-alpine@sha256:add3eb26b0c39784668b50ade995b6ef725cb32eaa9637c4728bd9334930aa 0.1s => [stage-0 2/2] RUN --mount=type=cache,uid=1000,target=/var/cache/apk apk update && apk upgrade 3.7s => exporting to oci image format
まとめ
操作感はdockerと変わらず使えそうでした。
なのでローカルでコンテナ起動するくらいならfinch使うでも問題なさそうです。
ただ、社内ネットワーク等からプロキシを経由した場合は古典的な一手間が必要になるので、
この辺りは実用化に向けての課題になるかなーと感じています。
今後、AWSとの連携が強化されていくらしいので、
ECSへの容易な展開とか色々便利機能が追加されると良いなー
と期待しています。