Featured image of post Finchとコンテナを取り巻くOSS環境について

Finchとコンテナを取り巻くOSS環境について

AWSがなぜFinchのプロジェクトを始めたのかをコンテナOSSの現状を見ながら考えていきます。

記事を書く発端はAWSがFinchというコンテナのオープンソースプロジェクトを発表したことから始まります。コンテナは大変便利な技術なのですが、発展の途上でDocker社の動きやOSSの開発ペースの上昇などで複雑に変化してきました。その流れにある程度まとまりが生まれそうな予感を感じさせるのがこのFinchかと思います。 ここではFinchそのものと、コンテナのOSS環境にフォーカスしてみます。

Finchとは

https://github.com/runfinch

The Finch CLI an open source client for container development

AWSが投稿したFinchの原文翻訳文はこちらにあります。AWSが伝えたいことはこちらのリンクを読むと非常によくわかります。本ページでは一部を抜粋して紹介していますのでお時間が無い方に適していますが、是非一度はAWSの投稿内容の方も目を通していただけると理解が深まると思います。

Finchの紹介として翻訳文から引用します。

Finch は Linux コンテナをビルド、実行、公開するための新しいコマンドラインクライアントです。Lima、nerdctl、containerd、BuildKit などの厳選されたデファクトスタンダードのオープンソースコンポーネントと共に、macOS ネイティブのクライアントを簡単にインストールできます。Finch では、コンテナをローカルで作成して実行したり、オープンコンテナイニシアチブ (OCI) コンテナイメージをビルドして公開したりできます。

Finchはオープンソースであり、デファクトスタンダードなオープンソースたちと一緒に動いています。使い手にとってみれば安心してFinchを使える環境を整備してくれるということになります。AWSは開発者にツールの構築ではなく、アプリケーションの構築に集中してもらいたいと考えてるようです。

オープンソースとしての公開を優先したため、執筆時点ではmacOSのみの対応ですが、WindowsやLinuxの対応もロードマップとして追加したいと考えているようです。

AWSもFirecrackerというコンテナランタイムを開発しており、軽量なVMと後に出てくるcontainerdと組み合わせて動作しています。
FirecrackerをAWSが投資し独自で作るよりOSSのプロジェクトとして進める方が良いと判断したのかと考えています。

ここで気になるのが、デファクトスタンダードなOSS達がどんなものなのかということです。 本記事ではFinchと連携しているOSS(Lima、nerdctl、containerd、BuildKit)の紹介と、Finchが意識しているであろう他のOSSについても考えていきます。

OSSを紹介する前に予備知識としてコンテナの仕組みに少し寄り道します。

コンテナの仕組み

※加筆予定

  • OCI
  • CRI

Finchと連携しているOSS

Lima

https://github.com/lima-vm/lima/

Lima: Linux virtual machines (on macOS, in most cases)
Lima launches Linux virtual machines with automatic file sharing and port forwarding (similar to WSL2), and containerd.
Lima can be considered as a some sort of unofficial “containerd for Mac”.
Lima is expected to be used on macOS hosts, but can be used on Linux hosts as well.

LimaはmacOS上で動くLinux仮想マシンです。WindowsにおけるWSL2に似たものになります。 次に出てくるcontainerdをMacで使うためにLimaを使うことになります。

Limaの機能には以下のものが含まれています。 ARMもIntelも問題なく使えます。

✅ Automatic file sharing
✅ Automatic port forwarding
✅ Built-in support for containerd (Other container engines can be used too)
✅ Intel on Intel
✅ ARM on Intel
✅ ARM on ARM
✅ Intel on ARM
✅ Various guest Linux distributions: AlmaLinux, Alpine, Arch Linux, Debian, Fedora, openSUSE, Oracle Linux, Rocky, Ubuntu (default), …

Firecrackerを使わずにLimaにすることで、デファクトスタンダードを優先し開発者やユーザーの障壁を減らそうとしているように感じます。

containerd

https://containerd.io

An industry-standard container runtime with an emphasis on simplicity, robustness and portability.

containerdはコンテナランタイム(コンテナとコンテナイメージを管理するソフトウェア)です。 コンテナランタイムは低レベルランタイムと高レベルランタイムがあり、containerdは高レベルランタイムになります。こちらの紹介が詳しいです。

次に出てくるnerdctlも一緒に話に出てくることが多いです。

nerdctl

https://github.com/containerd/nerdctl

nerdctl: Docker-compatible CLI for containerd

nerdctlはcontainerdプロジェクトの中にあります。
Docker互換のCLIで、特徴としては以下のものがあげられます。

  • ✅ Same UI/UX as docker
  • ✅ Supports Docker Compose (nerdctl compose up)

コマンドでdockerと書いていたところをnerdctlとすれば動くというものになっています。サンプルを見ると以下のようになりdockerを使用していた人でも違和感なく使えるように作られています。

Basic usage
To run a container with the default bridge CNI network (10.4.0.0/24):
# nerdctl run -it --rm alpine

buildkit

https://github.com/moby/buildkit

BuildKit is a toolkit for converting source code to build artifacts in an efficient, expressive and repeatable manner.

BuildKitはmobyというDockerエコシステムのOSS開発プロジェクトで開発されている内の一つです。Dockerはmobyにリリースされたものをベースに作られます。 そのため、BuildKitはDocker上で動作するOSSなのですが、Dockerに限らず汎用のビルドフレームワークとしても使うことができます。 BuildKitが持つ役割は、このスライドの7ページからが詳しいです。

Githubに記載されている特徴は以下のようになっています。

Key features:
Automatic garbage collection
Extendable frontend formats
Concurrent dependency resolution
Efficient instruction caching
Build cache import/export
Nested build job invocations
Distributable workers
Multiple output formats
Pluggable architecture
Execution without root privileges

Finchが意識しているであろうOSS

Red HatのPodman

https://github.com/containers/podman

Podman: A tool for managing OCI containers and pods

Podmanはcontainerdのような高レベルランタイムです。Red Hatのエンジニアとオープンソースコミュニティが作ったもので、今はcontainersプロジェクト内でOSSとして公開されています。

Red HatのPodman紹介ページ
https://www.redhat.com/ja/topics/containers/what-is-podman

Dokcer Desktop有料化に伴いPodmanを試した人も多いのではないでしょうか。 AWSとしては、生まれが競合や同業種のOSSは一定の距離をとっているのかもしれません。

GoogleのgVisor

https://github.com/google/gvisor

gVisorのホームページ
https://gvisor.dev

What is gVisor?

gVisor is an application kernel, written in Go, that implements a substantial portion of the Linux system surface. It includes an Open Container Initiative (OCI) runtime called runsc that provides an isolation boundary between the application and the host kernel. The runsc runtime integrates with Docker and Kubernetes, making it simple to run sandboxed containers.

こちらは低レベルランタイムです。gVisorの思想としては、低レベルランタイムにセキュリティ境界を追加してコンテナへの攻撃に対するセキュリィを高めようというものです。 独立したカーネルとしてgVisorを挟むことでサンドボックス化したコンテナを作ることができます。こちらのページが詳しいです。

gVisorはGoで書かれていることもあり、AWSとしては一定の距離を持っているかもしれません。

まとめ

Finchが取り組もうとしていることと、Finchに関連するOSS、Finchから一定の距離がありそうなOSS(どれも便利だが)をまとめてきました。 これからのFinchの発展に期待していきながらコンテナをどんどん使っていきたいと思います。

Licensed under CC BY-NC-SA 4.0