こんちには。
データアナリティクス事業本部 機械学習チームの中村(nokomoro3)です。
FinchがWindowsをサポートしました。
ということでWindowsからGet Startedをやってみたいと思います。
Get Startedをやってみる
以下がGet StartedのURLです。
まずはインストールからやってみます。
Install
準備
Windows用のインストールのページです。
要件がいくつか示されています。
- Windowsバージョン
- Windows 11 (x86-64)
- Windows 10 バージョン 1903 以降、Build 18362.1049 (x86-64)
- ハードウェア
- 2vCPU、メモリ4GB以上
- その他
- WSL2がインストール済みであること
基本は満たせそうなもの印象です。バージョンを調べたい場合は Ctrl + R を押して、「winver」を入力してみましょう。
WSL2は私の場合既にインストール済みでしたので割愛しますが、以下でデフォルトバージョンが2であることを確認しておきます。
wsl --status
# 既定のディストリビューション: Ubuntu-20.04
# 既定のバージョン: 2
WSLのインストールから実施する場合は、以下を参考にされてください。
Finchのインストール
インストーラがGitHubで提供されているようですので、そちらでインストールしていきます。
現在の最新はv1.1.1
のようでした。
インストーラとしては管理者権限が必要ですが、特に設定項目等はなかったのでポチポチ進めてもらえれば大丈夫です。
あとはTermianlを再起動すればOKのようです。
finch --version
# time="2024-02-02T09:16:37+09:00" level=info msg="Using default values due to missing config file at \"C:\\\\Users\\\\{ユーザ名}\\\\AppData\\\\Local\\\\.finch\\\\finch.yaml\""
# time="2024-02-02T09:16:37+09:00" level=info msg="\"C:\\\\Users\\\\{ユーザ名}\\\\AppData\\\\Local\\\\.finch\" directory doesn't exist, attempting to create it"
# finch version v1.1.1
なにやらメッセージが色々でていますが、後述するfinch vm init
をするとこれらのログは出なくなりました。
とりあえずインストールはできているようです。
インストール後の検証
Verify the Finch Installationをするように促されていますので、進めていきます。
まずはFinch Virtual Machineを初期化します。
finch vm init
# time="2024-02-02T09:20:10+09:00" level=info msg="creating persistent disk: C:\\Users\\{ユーザ名}\\AppData\\Local\\.finch\\.disks\\6b456cb759bdbc3f.vhdx"
# time="2024-02-02T09:20:11+09:00" level=info msg="attaching disk at path: C:\\Users\\{ユーザ名}\\AppData\\Local\\.finch\\.disks\\6b456cb759bdbc3f.vhdx"
# time="2024-02-02T09:20:13+09:00" level=info msg="Initializing and starting Finch virtual machine..."
# time="2024-02-02T09:21:01+09:00" level=info msg="Finch virtual machine started successfully"
次にハロワなイメージを動かしてみます。
finch run public.ecr.aws/finch/hello-finch:latest
# 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.3 s total: 1.0 Mi (247.4 KiB/s)
#
# @@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@ @@@@@@@@@@@
# @@@@@@@ @@@@@@@
# @@@@@@ @@@@@@
# @@@@@@ @@@@@
# @@@@@ @@@# @@@@@@@@@
# @@@@@ @@ @@@ @@@@@@@@@@
# @@@@% @ @@ @@@@@@@@@@@
# @@@@ @@@@@@@@
# @@@@ @@@@@@@@@@@&
# @@@@@ &@@@@@@@@@@@
# @@@@@ @@@@@@@@
# @@@@@ @@@@@(
# @@@@@@ @@@@@@
# @@@@@@@ @@@@@@@
# @@@@@@@@@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@@@
#
#
# Hello from Finch!
#
# Visit us @ github.com/runfinch
Finchのキャラクターが出てきたらOKのようです。
使いそうなコマンド
ここからは使いそうなコマンドを一通り抑えていきます。
基本的にはdockerと同じコマンドが使えるようです。
pull : イメージの取得
finch pull ubuntu:latest
images : 取得済みイメージ一覧
finch images
# REPOSITORY TAG IMAGE ID CREATED PLATFORM SIZE BLOB SIZE
# ubuntu latest e9569c25505f 33 seconds ago linux/amd64 83.4 MiB 28.2 MiB
# public.ecr.aws/finch/hello-finch latest a71e474da9ff About a minute ago linux/amd64 1.7 MiB 1.0 MiB
run : イメージからインスタンスを起動
-i
オプションで起動後にインタラクティブに操作できます。
finch run -it --name sample ubuntu:latest bash
# 以降コンテナ内
root@48a6a352d6a1:/#
root@48a6a352d6a1:/# exit
# exit
-d
オプションの場合はバックグラウンドで立ち上がります。(コンテナ内に入るにはexec
をします)
finch run -dt --name sample-daemon ubuntu:latest bash
# a1401b38eb80c0a2e9cc408ac2277e08f50d3e4d0869335032651718157856f7
exec : 実行中のコンテナ内に入る
finch exec -it sample-daemon bash
# 以降コンテナ内
root@a1401b38eb80:/#
root@a1401b38eb80:/# exit
ps : コンテナインスタンス一覧の取得
-a
オプションを付けると、停止状態を含むコンテナインスタンスが取得できます。
finch ps -a
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# a1401b38eb80 docker.io/library/ubuntu:latest "bash" 29 seconds ago Up sample-daemon
# a663d01ff89a docker.io/library/ubuntu:latest "bash" About a minute ago Exited (0) About a minute ago sample
# 64e716aa2f1d public.ecr.aws/finch/hello-finch:latest "./hello-finch" 3 minutes ago Exited (0) 3 minutes ago hello-finch-64e71
inspect : 設定情報等の確認
詳細な設定情報等が得られます。
ボリュームマウントやポートフォワーディングを確認したい場合はこちらをみましょう。
finch inspect sample-daemon
# [
# {
# "Id": "a1401b38eb80c0a2e9cc408ac2277e08f50d3e4d0869335032651718157856f7",
# "Created": "2024-02-02T01:38:33.287255567Z",
# "Path": "bash",
# "Args": null,
# "State": {
# "Status": "running",
# "Running": true,
# "Paused": false,
# "Restarting": false,
# "Pid": 3661,
# "ExitCode": 0,
# "Error": "",
# "FinishedAt": "0001-01-01T00:00:00Z"
# },
# "Image": "docker.io/library/ubuntu:latest",
# "ResolvConfPath": "/var/lib/nerdctl/1935db59/containers/finch/a1401b38eb80c0a2e9cc408ac2277e08f50d3e4d0869335032651718157856f7/resolv.conf",
# "HostnamePath": "/var/lib/nerdctl/1935db59/containers/finch/a1401b38eb80c0a2e9cc408ac2277e08f50d3e4d0869335032651718157856f7/hostname",
# "LogPath": "/var/lib/nerdctl/1935db59/containers/finch/a1401b38eb80c0a2e9cc408ac2277e08f50d3e4d0869335032651718157856f7/a1401b38eb80c0a2e9cc408ac2277e08f50d3e4d0869335032651718157856f7-json.log",
# "Name": "sample-daemon",
# "RestartCount": 0,
# "Driver": "overlayfs",
# "Platform": "linux",
# "AppArmorProfile": "",
# "Mounts": null,
# ...
logs : ログの確認
標準出力などのログをみるにはこちらを使います。
finch logs sample-daemon
stop : コンテナインスタンスの停止
停止する際は名前を指定するか、CONTAINER IDの先頭からの一部の文字を指定します。
finch stop sample-daemon
# sample-daemon
rm : コンテナインスタンスの削除
finch rm sample-daemon
# sample-daemon
finch rm sample
# sample-daemon
rmi : イメージの削除
イメージが使われてない場合は削除ができます。
stopしていても使われていることになりますので、エラーとなった場合はps -a
で使われているインスタンスを確認されてください。
finch rmi ubuntu:latest
# Untagged: docker.io/library/ubuntu:latest@sha256:e9569c25505f33ff72e88b2990887c9dcf230f23259da296eb814fc2b41af999
# Deleted: sha256:1a102d1cac2bdae8a0160ac4365d4f8653e9d6da56c793a665d556ae07fb7f82
prune : 一括削除
pruneによりコンテナインスタンスやイメージを一括削除できます。
finch image prune
# WARNING! This will remove all dangling images.
# Are you sure you want to continue? [y/N] y
finch container prune
# WARNING! This will remove all stopped containers.
# Are you sure you want to continue? [y/N] y
その他
コマンドについて
以下の記事にもまとまっていますので、ご参照ください。
DockerfileやDocker Composeも使える
以下の記事にあるようにdockerを使っていた時と同様にDockerfileからのビルドや、Docker Composeも使えるようです。
ワークアラウンド
initしたターミナルを閉じるとVMが停止する
現状ではfinch vm init
を実行したターミナルを閉じると、VMが停止状態となるようです。
その後、startしても以下のようになります。
finch vm start
# time="2024-02-02T09:46:00+09:00" level=info msg="attaching disk at path: C:\\Users\\{ユーザ名}\\AppData\\Local\\.finch\\.disks\\6b456cb759bdbc3f.vhdx"
# time="2024-02-02T09:46:00+09:00" level=fatal msg="could not attach persistent disk: failed to attach disk: exit status 0xffffffff, command output: ディスク '\\\\?\\C:\\Users\\{ユーザ名}\\AppData\\Local\\.finch\\.disks\\6b456cb759bdbc3f.vhdx' を WSL2 にアタッチできませんでした: Error: 0x80040312\r\nError code: Wsl/Service/AttachDisk/MountVhd/WSL_E_USER_VHD_ALREADY_ATTACHED\r\n"
このようになった場合は、一旦VMを削除してinitし直してみてください。
finch vm remove
# time="2024-02-02T09:48:18+09:00" level=info msg="Removing existing Finch virtual machine..."
# time="2024-02-02T09:48:18+09:00" level=info msg="Finch virtual machine removed successfully"
finch vm init
# ...ログは省略
なおVMを削除すると、imageやinstanceは消えることがあるようですので、注意が必要です。
Git for Bashからではうまく動作しないケースが
Git for Bashのターミナルからではうまく動作しないケースがありました。
念のためPowerShellでの作業をオススメします。
まとめ
いかがでしたでしょうか。
本記事がFinchを使用される方の参考になれば幸いです。