こんにちは。虎の穴ラボのT.M.です。
本記事は虎の穴ラボ Advent Calendar 2022 - Qiita 11日目の記事です。
10日目はnsdさんの「誰か教えてくれ、アジャイル開発!!」でした。
明日12日目はgodanさんの「GASでゲームを作ろう」です。
先日AWSからオープンソースプロジェクト「Finch」が発表されました。
公式ブログの日本語訳によると、Finchは"Linux コンテナをビルド、実行、公開するための新しいコマンドラインクライアント"とのことです。 「Docker Desktopの代替」と書けばイメージしやすいでしょうか。
今回はFinchをインストールし、実際に業務で使用しているコンテナを実行するところまで試してみようと思います。
Finchとは
Finchとはnerdctl、containerd、BuildKit、Limaからなる、コンテナを利用した開発環境を容易に構築できるツールです。
勿論Finch内で使われているこれらのツールは、Finchをインストールする事なく個別に利用することができます。
Finchの特性として、これ一つをインストールするだけで完結し、中で使われている個別のツールの詳細を追う必要がないということが挙げられます。
ただし現時点ではMacにのみ対応しており、ドキュメントやチュートリアルはありません。
まずはnerdctlのコマンドリファレンスを参考に使ってみてほしいとの事でした。
※ WindowsやLinuxへの対応は予定されています
※ nerdctlのコマンドは概ねカバーしているものの、全てはまだ対応できていないとのことです
Finchをインストールしてみる
Finchの要求スペックは以下になります。
- macOS catalina (10.15) or higher, newer versions are tested on a best-effort basis
- Intel or Apple Silicon M1 system for macOS
- Recommended minimum configuration is 2 CPU, 4 GB memory
要求スペックに問題がなければインストールしてみましょう。
公式ブログではファイルをダウンロードしてのインストールが紹介されていますが、README.mdにはbrewでのインストールも記載されていました。
brewを利用する場合はこちらのコマンドを実行してください。
$ brew install --cask finch
ファイルを利用する場合はリリースページから最新のパッケージをダウンロードしましょう。
ダウンロードしたファイルをダブルクリックし、説明を読みつつ進めていくとインストールが完了します。
インストールの完了画面にアンインストールのコマンドが書かれています。
参考情報としてリポジトリへのリンクも貼られているのですが、README.mdにはファイル利用時のアンインストールの記載がなかったためこちらに記述しておきます。
$ sudo bash /Applications/Finch/uninstall.sh
Finchの設定
ここからはコマンドラインで操作を行います。
初期設定も簡単で、下記のコマンドを実行すれば完了です。
$ finch vm init INFO[0000] Initializing and starting Finch virtual machine... .. INFO[0067] Finch virtual machine started successfully
大抵の方は「successfully」の出力と共に完了するはずなのですが、筆者の環境ではここでエラーが出力されました。
INFO[0130] Finch virtual machine started successfully FATA[0130] failed to setup ssh client: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
こちらにつきましては本記事執筆時点で解決方法は見つかっておらず、Issueにバグとして報告されています。
ただし「Finch virtual machine started successfully」の時点でLimaが仮想マシンの起動に成功しているため、利用する上では問題ありませんでした。
※ 見えていない問題は何かしらあるかもしれませんが、前述のIssueの調査・解決待ちとなります
確認用に用意されたコンテナの実行
それではドキュメントに従い run
コマンドを実行してみます。
finch run --rm public.ecr.aws/finch/hello-finch
このなんとも言えない笑顔の鳥さんを見ることはできたでしょうか。
Finchはnerdctlを利用しているため、コマンドは「nerdctl」を「finch」に置き換えたものとなります。
先ほどのコマンドは「nerdctl run
がfinch run
となり、抜けると同時にコンテナを削除する--rm
オプションが付与されている」という意味です。
既存プロジェクトのコンテナを試す
ではAWSが用意した起動確認用のコンテナではなく、弊社が実際に業務で使っているコンテナを試しに立ち上げてみます。
プロジェクトへ移動します(以下、詳細は伏せさせていただきます)。
$ cd hogehoge
コンテナを起動します。
筆者は従来Docker Desktopでdocker compose
を実行していたのでfinch compose
に変えてみました。
-d
はバックグラウンドで実行するオプションです。
$ finch compose up -d INFO[0000] Creating network HOGE INFO[0000] Creating volume FUGA INFO[0000] Creating volume PIYO ...
多少のトラブルは想定していたのですが、問題なく起動してしまいました。
では止める場合はどうでしょうか。
$ finch compose stop FATA[0000] unknown subcommand "stop" for "compose" FATA[0000] exit status 1
どうやらstop
は無いようです。
nerdctlにnerdctl compose stopは存在するため、Finchがまだカバーしていないと言っていたコマンドはこの辺りかもしれません。
down
で試してみます。
$ finch compose down INFO[0000] Removing container FUGA INFO[0000] Removing container PIYO ... INFO[0001] Removing network HOGE
down
は削除込みの挙動となりますが、問題なく止めることができました。
続いて再度finch compose up -d
で起動し、コンテナに入り作業を…とfinch compose exec
を試したのですが、コマンドが無いと怒られてしまいます。
$ finch compose exec XXXX bash FATA[0000] unknown subcommand "exec" for "compose" FATA[0000] exit status 1
それもそのはずで、そもそもnerdctlにはcompose
にexec
コマンドがありませんでした。
これはFinchがカバーしていないnerdctlのコマンドという訳ではなく、筆者によるdocker compose
との違いの確認漏れですね。
docker exec -it
コマンドに倣い、下記を実行しましょう。
$ finch exec -it XXXX bash /var/www/XXXX #
これでコンテナの中に入ることができました。
ここから先はコンテナ内の挙動なのでFinch特有のものではなく、Limaが受け持つ範疇であると思われます。
念の為、アプリケーションの起動とlocalhostへのアクセスができることを確認しています。
また、今回試したのは軽めのアプリケーションでしたが、動作に支障はなく業務で使えるレベルだと感じました。
まとめ
Finchはまだ世に出たばかりでドキュメントも無く、要望や不具合報告もIssuesにちらほらと寄せられています。
しかしそれらは時間の経過とともに解消されるものであり、内部で使われているツールも信頼が置けるものばかりです。
FinchはApache 2.0 licenseで商用利用も可能ですし、軽く触った限りでは今後の発展に期待が持てると感じました。
みなさんもこの冬Finchを試されてはいかがでしょうか。
P.S.
採用
虎の穴では一緒に働く仲間を募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。
yumenosora.co.jp
LINEスタンプ
エンジニア専用のメイドちゃんスタンプが完成しました!
「あの場面」で思わず使いたくなるようなスタンプから、日常で役立つスタンプを合計40個用意しました。
エンジニアの皆さん、エンジニアでない方もぜひスタンプを確認してみてください。
store.line.me