FinchがWindowsでもサポートされました!ので使ってみました!!

2024.02.02

こんちには。

データアナリティクス事業本部 機械学習チームの中村(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を使用される方の参考になれば幸いです。