Windows環境でもFinchを使ってコンテナを快適にビルド/実行したい
はじめに
Finchは、Dockerのようにコンテナのビルドや実行ができるツールで2024年2月にWindowsでも利用可能になりました。
AWSユーザかつWindowsユーザの私としては、このAWSが開発しているFinchをWindows上で使ってみたいなと思っておりましたので、Windowsでの利用に対する所感を本記事に記します。
Finchとは
「finch build」「finch run」といったシンプルでわかりやすいコマンドを用いて、Dockerのようにコンテナを操作できるツールです。
なお、FinchはAWSさんが開発しているOSSです。
Windows環境におけるFinchの内部構成
構成図は、公式サイトによると下記の通りです。
Finchは「finch build」や「finch run」といったコマンドを実行する際、裏ではLimaのlimactlや、nerdctlを動作させています。
LimaはLinux仮想マシンを起動するツールであり、自動的なファイル共有とポート転送機能を備えています。
Limaを操作する際はlimactlコマンドを用います。下記のリンクの通りlimactlには様々なコマンドがあり、仮想マシン自体の操作(limactl start
:WSL2上でLinux仮想マシンを起動)を実現します。
nerdctlは、主要なコンテナランタイムであるcontainerdで使われているCLIです。nerdctlも下記のように様々なコマンドがあり、これらを用いることてコンテナを自由自在に操作できます。
なお、nerdctlを利用する際にbuildkitdやCNI pluginsを用います。具体的には、buildkitdはnerdctl build
でコンテナをビルドする際に、 CNI pluginsはnerdtctl run
でコンテナを実行するときに使います。
Finchでは、limactlとnerdctlのコマンドをfinch独自のコマンドでラップしてくれているため、ユーザはFinchを利用する際にlimactlやnerdctlのコマンドを覚えておかなくても問題なく主要な操作ができるようになっており便利です。
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上でビルドや実行ができます。
なお、CDK_DOCKERは指定していない場合は、自動的にDocker扱いになります。
AWS サポート
AWSサポートに質問したい場合は、事前にサポートバンドルを作成しておくとAWSさん側がスムーズに調査しやすい、とのことです。
finch support-bundle generate
Windows環境で、個人的に今後出来たら嬉しいこと
VSCodeには、Developing inside a Container(Dev Containers)という拡張機能があります。
この拡張機能を使うと、Windows環境でWSL2につながずとも、Dockerを用いてコンテナをVSCode上で自由自在に操作できます。
残念ながら、2024/4時点では、このツールはDockerにしか対応しておりません。
Dev Containers側のシステム要件に「Docker Desktop」という文字列が載っており、また複数のIssueにて「FinchではDev Containersが使えない」と報告があがっています。
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