概要
Buildah は Linux ベースのオープンソースツールで、Open Container Initiative (OCI) 互換コンテナのビルドに使用します。ビルドしたコンテナは OCI 互換なので、Docker や Kubernetes とも互換性があります。Buildah では、任意のツールを使用して効率性の高いコンテナイメージを作成できます。コンテナイメージの作成は、既存のベースイメージを使用することも、空のイメージを基にゼロから作り上げることもできます。Buildah はコンテナイメージを作成する柔軟でセキュアな方法です。以下でもう少し詳しく見ていきます。
Buildah (「builder」をボストン地域の発音で読んだもの) は 2017 年に、Daniel Walsh (ダニエル・ウォルシュ) をリーダーとするチームによって Red Hat で作成されました。この取り組みは、もともとはコンテナイメージのコアユーティリティを作成し、そのツールを既存のコンテナホストツールと組み合わせて使用して OCI および Docker 互換のコンテナイメージをビルドできるようにしようという意図で始められました。イメージはコンテナレジストリに格納し、複数のランタイム環境で使用できます。その際には Docker のもののようなコンテナデーモンを使用することも、使用しないこともできます (Docker のデーモンは root 特権が必要で、ビルドしたコンテナの機能はデーモンの機能に依存します)。
そうして作成された Buildah は、次のような機能を備えたコマンドラインツールです。
- Dockerfile (イメージのアセンブルで呼び出すすべてのコマンドを記述したテキストファイル) 使用または不使用でコンテナイメージをビルド
- コンテナイメージをゼロから、または既存のコンテナイメージを起点として作成
- イメージそのものにビルドツールを含めないので、ビルドしたイメージのサイズの節約、セキュリティの強化、転送に使用するリソースの削減が可能
- Dockerfile と互換性があり、Docker からの移行が容易
- ユーザー独自のイメージを作成するので、イメージを作成ユーザーで並べ替えることが可能
Buildah を選択する理由
Buildah は Dockerfile なしでイメージをビルドできたり、ビルドプロセスに他のスクリプト言語を統合できたりする柔軟性を備えているのに加え、イメージそのものの外部でビルドツールを使用できるという効率性も持ち合わせているので、革新と新しいアイデアの実装を迅速に行うことができます。コンテナイメージの作成とビルドは、イメージの起動に必要なツールとプロセスのみで迅速に行えます。
Buildah では他にも以下のことができます。
- イメージを検証、確認、修正
- コンテナとイメージをローカルストレージからパブリックまたはプライベートのレジストリまたはリポジトリにプッシュ
- Docker Hub にイメージをプッシュまたはプル
- ローカルに格納されたコンテナイメージを削除
- 実行中のコンテナの root ファイルシステムをマウントまたはアンマウント
- コンテナの root ファイルシステムにある更新されたコンテンツを新しいイメージのファイルシステムレイヤーとして使用
Buildah と Podman
Buildah と Podman はどちらもオープンソースプロジェクトであり、相互に補完的に機能するコマンドラインツールです。OCI イメージとコンテナの操作とビルドに使用します。まず Buildah が作られ、その後 Buildah と同じコードを使用して Podman が作られました。ただし Buildah のコマンドは Podman のものより詳細で、イメージのより細かい制御が可能であり、より繊細にイメージレイヤーを作成できます。Podman の build コマンドは Buildah の機能のサブセットを使用しています。
Buildah はコンテナイメージのビルドを得意としており、デーモン・ソケット・コンポーネントなしで Dockerfile のあらゆるコマンドをレプリケートします。一方で Podman はコンテナ内でイメージのメンテナンスや修正を行うときに必要なことを得意としています。Podman を使用すると、コンテナを作成 (コンテナイメージの提供に Buildah を使用) し、使い慣れたコマンドライン・インタフェース (CLI) コマンドを使用してそれをプロダクション環境で実行、メンテナンス、修正できます (Docker CLI でコマンドを使えるなら、Podman CLI でも同じコマンドを使用して操作できます)。
Podman と Buildah のもう一つの違いは、Buildah で作成するコンテナはコンテナイメージの内容を転送するための一時的なものであるのに対し、Podman ではユーザーは長時間にわたる使用および維持を意図した従来のコンテナを作成することです。Buildah のコンテナは短時間の用途に適し、Podman のコンテナは長時間の用途に適しています。
最後にもう一つ。Buildah と Podman はコンテナの内部表現を共有していないため、Buildah のコンテナから Podman のコンテナは見えず、その逆も同様です。ただしコンテナイメージの内部表現は共有しているため、片方のツールで作成、修正、プルしたコンテナイメージはもう一方のツールでも見えますし、使用することもできます。
Red Hat を選ぶ理由
Buildah は Red Hat で生まれたプロジェクトであり、時間を節約し生産性を高める貴重な方法としての有用なツールを作るために Red Hat のエンジニアと開発者が協力して取り組んでいます。Podman や Skopeo と同様に、Buildah は Linux コンテナを扱うすべての人に有用なツールであり、Red Hat Enterprise Linux をアップグレードすることで、これらのすべてのツールをフル活用できるようになります。コンテナと Kubernetes については、Red Hat はオペレーティングシステムから自動化まで総合的にカバーしています。
Red Hat はコンテナを熟知しており、Kubernetes についても同様です。お客様がコンテナ戦略を構築し、すぐにそれを実行するための製品とサービスが Red Hat にはあります。開発者チームをコンテナ向けプラットフォームに移行させる。最高クラスのオペレーティングシステム上でコンテナ・インフラストラクチャを稼動させる。コンテナが生成する大規模データのストレージ・ソリューションを提供する。Red Hat のソリューションには、どんなケースでもお客様の必要なものがすべて揃っています。