AWSが開発したコンテナ用コマンドラインクライアントツールのFinchを調べて触ってみた

2022/12/24に公開

この投稿は コネヒトアドベントカレンダー の24日目の投稿です。
本日はクリスマスイブですね、みなさんいかがお過ごしでしょうか🎄
さて本日の記事では、AWSが開発したFinchというツールについて取り上げようと思います。

Finchとは

Finch はAWSが開発したLinuxコンテナをビルド・実行・公開するための新しいコマンドラインクライアントです。コンテナ開発用のオープンソースクライアント「Finch」のご紹介 で発表されており、現在利用可能な状況です。

ざっと要点などをまとめると次のような感じです。

  • LimanerdctlcontainerdBuildKit などのオープンソースコンポーネントから構成
  • 現在GUIの提供はなし
  • 現在はmacOS向けのみ提供(ゆくゆくはWindows、Linuxへも対応していく方針)
  • AWSサービスとの統合を容易にするための拡張機能も追加されていく方針

使い方

インストールからコンテナ操作まで使い方をみていきましょう。

インストール&セットアップ

brewでインストールできます。

% brew install --cask finch

基盤システムセットアップのために次のコマンドを実行します。仮想環境を初期化し、VMが起動されます。

% finch vm init

コンテナ操作

ECRのパブリックイメージを使い、runコマンドを実行してみます。イメージがない場合はイメージのpullからコンテナ起動までを行なってくれます。

% finch run --rm public.ecr.aws/finch/hello-finch
public.ecr.aws/finch/hello-finch:latest:                                          resolved       |++++++++++++++++++++++++++++++++++++++| 
index-sha256:a71e474da9ffd6ec3f8236dbf4ef807dd54531d6f05047edaeefa758f1b1bb7e:    done           |++++++++++++++++++++++++++++++++++++++| 
manifest-sha256:705cac764e12bd6c5b0c35ee1c9208c6c5998b442587964b1e71c6f5ed3bbe46: done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:6cc2bf972f32c6d16519d8916a3dbb3cdb6da97cc1b49565bbeeae9e2591cc60:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:ec080f7c92e9eb0227d60951f7c779648989116d97a5926f3e8684d4e46df196:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 4.1 s                                                                    total:  2.5 Ki (624.0 B/s)                                       

                            @@@@@@@@@@@@@@@@@@@                                 
                        @@@@@@@@@@@@    @@@@@@@@@@@                             
                      @@@@@@@                  @@@@@@@                          
                    @@@@@@                        @@@@@@                        
                  @@@@@@                            @@@@@                       
                 @@@@@                      @@@#     @@@@@@@@@                  
                @@@@@                     @@   @@@       @@@@@@@@@@             
                @@@@%                     @     @@            @@@@@@@@@@@       
                @@@@                                               @@@@@@@@     
                @@@@                                         @@@@@@@@@@@&       
                @@@@@                                  &@@@@@@@@@@@             
                 @@@@@                               @@@@@@@@                   
                  @@@@@                            @@@@@(                       
                   @@@@@@                        @@@@@@                         
                     @@@@@@@                  @@@@@@@                           
                        @@@@@@@@@@@@@@@@@@@@@@@@@@                              
                            @@@@@@@@@@@@@@@@@@

Hello from Finch!

Visit us @ github.com/runfinch

イメージのビルドはbuildコマンドで行います。試しにfinchリポジトリで公開されているDockerfileを用いてビルドしてみます。

% git clone git@github.com:runfinch/finch.git
% cd finch/contrib/hello-finch
% finch build . -t hello-finch
...

buildコマンド実行後にはイメージが作成されていました。これはimagesコマンドで確認できます。

% finch images
REPOSITORY                          TAG       IMAGE ID        CREATED           PLATFORM       SIZE       BLOB SIZE
hello-finch                         latest    7c316c1777bf    2 minutes ago     linux/arm64    1.7 MiB    1008.3 KiB
public.ecr.aws/finch/hello-finch    latest    a71e474da9ff    29 minutes ago    linux/arm64    1.7 MiB    1007.7 KiB

--platform オプションを使用し、アーキテクチャを指定することも可能です。

例えば、現在使用しているマシンがM1 Macだとします。

% uname -ms
Darwin arm64

次のようにコマンドを実行すれば linux/amd64 向けにビルドされたコンテナを使用できます。

% finch run --rm --platform=amd64 public.ecr.aws/amazonlinux/amazonlinux uname -ms
...
Linux x86_64

補足

Finchはコマンドをnerdctlクライアントへ渡しており、nerdctl Command Reference を参照してほしいとREADMEなどで誘導していることから、現時点でもnerdctlとの互換性はかなり高そうです。ただ、ただまだ完全にnerdctlのコマンドを網羅しているわけではないとのことで、これから充実していきそうです。不完全な部分などは、AWSのコンテナツール、Finchを動かしてみる の記事が参考になりました。また、普段Dockerを使用しているという方は Dockerからcontainerdへの移行 の記事なども参考になりそうです。

おわりに

Docker for Desktopが有償化されたことによる代替先や、KubernetesでのDockershimを廃止およびcontainerdのnerdctlでの直接操作への移行などから、コンテナツールの1つとしてキャッチアップしておいても良いのではないかと思います。またAWSが開発していることなどから自社のサービスとの統合を図れる拡張機能などがリリースされていく方針にも期待が膨らみます。

Discussion