🐥

Windows環境でもFinchを使ってコンテナを快適にビルド/実行したい

2024/04/28に公開

はじめに

Finchは、Dockerのようにコンテナのビルドや実行ができるツールで2024年2月にWindowsでも利用可能になりました。

AWSユーザかつWindowsユーザの私としては、このAWSが開発しているFinchをWindows上で使ってみたいなと思っておりましたので、Windowsでの利用に対する所感を本記事に記します。

Finchとは

「finch build」「finch run」といったシンプルでわかりやすいコマンドを用いて、Dockerのようにコンテナを操作できるツールです。

なお、FinchはAWSさんが開発しているOSSです。

Windows環境におけるFinchの内部構成

構成図は、公式サイトによると下記の通りです。

Finch Architecture (Windows)

Finchは「finch build」や「finch run」といったコマンドを実行する際、裏ではLimaのlimactlや、nerdctlを動作させています。

LimaはLinux仮想マシンを起動するツールであり、自動的なファイル共有とポート転送機能を備えています。

Limaを操作する際はlimactlコマンドを用います。下記のリンクの通りlimactlには様々なコマンドがあり、仮想マシン自体の操作(limactl start:WSL2上でLinux仮想マシンを起動)を実現します。

https://lima-vm.io/docs/reference/limactl/

nerdctlは、主要なコンテナランタイムであるcontainerdで使われているCLIです。nerdctlも下記のように様々なコマンドがあり、これらを用いることてコンテナを自由自在に操作できます。

なお、nerdctlを利用する際にbuildkitdやCNI pluginsを用います。具体的には、buildkitdnerdctl buildでコンテナをビルドする際に、 CNI pluginsnerdtctl runでコンテナを実行するときに使います。

https://github.com/containerd/nerdctl/blob/main/docs/command-reference.md

Finchでは、limactlとnerdctlのコマンドをfinch独自のコマンドでラップしてくれているため、ユーザはFinchを利用する際にlimactlやnerdctlのコマンドを覚えておかなくても問題なく主要な操作ができるようになっており便利です。

https://runfinch.com/docs/cli-reference/finch_build/

Windows環境での始め方

Windows環境ではFinchをインストールするためのツールとして「Finch Windows installer(Finch.msi)」というものがあります。Finch.msiは、Githubの最新リリースのAssets欄からダウンロードすることで入手できます。

なお、Windows環境でFinchを使う際は、PC上でWSL2が有効にしておく必要があります。また公式ではMicrosoft's Windows Terminal上でコマンド操作することを推奨しています。

Finchをはじめに使う際は、下記コマンドを実施して仮想マシンを初期化します。

finch vm init

仮想マシンの操作としては、下記操作が可能です。

# 仮想マシンを起動
finch vm start

# 仮想マシンのステータスを確認
finch vm status

# 仮想マシンを停止
finch vm stop 

# 仮想マシンを除去
finch vm remove

なお、WSL2が正しく使えるようになっていない場合(例:PC内でWSLのバージョンが2でなく1のままの場合、WindowsPC側の設定「Windowsの機能」で「仮想マシンプラットフォーム」や「Windowsハイパーバイザープラットフォーム」が無効になってしまっている場合、Ubuntu等のLinuxディストリビューションで初期セットアップされていない場合)にエラーが出ます。うまく動かない場合は、WSL2を利用するために必要な設定に問題がなさそうかどうかご確認ください。

Windows環境で、CLI実行

FinchはWindows環境でも、macOS環境と同様にコンテナを操作できます。また、既に多くの方が記事にしてくださっている通り、Finchの使い心地はDockerと同じでした。参考までにコマンド比較ものせておきます。

Finchのコマンド 同じことを実現するDockerのコマンド
finch build docker build
finch builder [build/prune] docker builder [build/prune]
finch compose [build/up/exec/stop] docker compose [build/up/exec/stop]
finch container [create/diff/exec/export] docker container [create/diff/exec/export]
finch cp docker cp
finch create docker create
finch events docker events
finch exec docker exec
finch history docker history
finch image docker image
finch images docker images
finch info docker info
finch inspect docker inspect
finch kill docker kill
finch load docker load
finch login docker login
finch logout docker logout
finch logs docker logs
finch network [create/inspect/ls/prune] docker network [create/inspect/ls/prune]
finch pause docker pause
finch port docker port
finch ps docker ps
finch pull docker pull
finch push docker push
finch restart docker restart
finch rm docker rm
finch rmi docker rmi
finch run docker run
finch save docker save
finch start docker start
finch stats docker stats
finch stop docker stop
finch system [events/info/prune] docker system [events/info/prune]
finch tag docker tag
finch top docker top
finch unpause docker unpause
finch update docker update
finch version docker version
finch volume docker volume
finch wait docker wait

このように、基本的にDockerと同じ文字列をコマンドで活用しているため、はじめてFinchを用いる場合でも直感的に利用できてありがたいです。

Windows環境で、他AWSサービスとの連携

macOSと同じようにWindowsでもFinchのコマンドを使えるため、他AWSサービスとの連携もmacOS利用時と同じように実施できます。

Amazon ECR

AWS CLIを使えるようにAWSクレデンシャル設定を行うことで、プライベートリポジトリ、パブリックリポジトリともにアクセスできます。

aws ecr get-login-password --region $AWS_REGION | finch login --username AWS --password-stdin "$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com"

finchコマンドによるログインは、デフォルトでは12時間保持されます。(※ $AWS_ACCOUNT_IDは利用AWSアカウントのID、$AWS_REGIONは利用しているECRのリージョンを指定します)

AWS CDK

AWS CDKを利用する際に、環境変数としてCDK_DOCKER=finchを指定することで、Dockerイメージと同じようにFinchのイメージもAWS CDK上でビルドや実行ができます。

https://github.com/aws/aws-cdk/tree/main/packages/cdk-assets#using-drop-in-docker-replacements

なお、CDK_DOCKERは指定していない場合は、自動的にDocker扱いになります。

AWS サポート

AWSサポートに質問したい場合は、事前にサポートバンドルを作成しておくとAWSさん側がスムーズに調査しやすい、とのことです。

finch support-bundle generate

https://runfinch.com/docs/troubleshooting/get-support/

Windows環境で、個人的に今後出来たら嬉しいこと

VSCodeには、Developing inside a Container(Dev Containers)という拡張機能があります。

この拡張機能を使うと、Windows環境でWSL2につながずとも、Dockerを用いてコンテナをVSCode上で自由自在に操作できます。

残念ながら、2024/4時点では、このツールはDockerにしか対応しておりません。

Dev Containers側のシステム要件に「Docker Desktop」という文字列が載っており、また複数のIssueにて「FinchではDev Containersが使えない」と報告があがっています。

https://github.com/runfinch/finch/issues/387

https://github.com/microsoft/vscode-remote-release/issues/9162

GitHubのIssueによると、「/var/run/docker.sock にマウントする処理」が拡張機能の内部に存在し、それの解決策がないため、現時点では残念ながら使えないようです。

とはいえ、「昔は不可能だと思われていたことが可能になっていく」のが現代の科学だと思っておりますので、いつの日かFinchがdevcontainerで使えるようになることを願い続けようと思います!

さいごに

Finchは2022年11月に登場したばかりのOSSなのに、2023年11月に1.0がGAされ、年々進化を遂げていている勢いのあるサービスです。

Windows環境でFinchが使えるようになったのも、Limaのメンテナに「WSL2ドライバ対応するメリット」を伝え、その機能をコントリビューションで加えたという背景があります。ユーザのニーズを叶えたものを実現するために、利用しているOSSのコントリビューションもしていく、というAWSさんの活動が素敵だなと感じております。

Finchの今後の発展も楽しみです!

Discussion