Repolode
bazel-contrib

bazel-contrib/rules_img

BazelターゲットからOCIコンテナイメージをビルドするルール。ベースイメージの浅いpull、レイヤーの重複排除、ローカルマシンを経由せずにバイト列を転送できるpush方式を備えています。

代替できる製品:Docker Build

スター
144
フォーク
58
未解決の Issue
16
最終コミット
16 時間前

これは何?

rules_imgは、Dockerデーモンを使わずにBazelビルド内でOCIコンテナイメージを直接ビルドするためのBazelルール集です。BzlmodとWORKSPACEの両方に対応し、あらゆる*_binaryターゲット(C++、Go、Python、Java、Rustなど)をイメージにパッケージ化できます。entrypoint、cmd、env、作業ディレクトリはバイナリから自動的に設定されます。

パフォーマンスを重視して設計されています。ベースイメージは浅くpullされ、manifestとconfigのみを取得し、CUDAのような大容量レイヤーは必要になるまでダウンロードしません。レイヤーは単一のアクションで生成され、同一ファイルはhardlinkで重複排除されます。複数のpush方式(eager、lazy、CAS registry、BES)により、ローカルマシンを経由することなく、remote executionやBazel remote cacheからイメージをアップロードできます。また、マルチプラットフォームのindex、eStargzとSOCIによるlazy pulling、ファイルシステムレイヤーとディスクイメージレイヤーにも対応しています。

主な機能

  • 01Dockerデーモンを使わず、hermeticなビルドでBazel内にOCIイメージを構築します。
  • 02あらゆる*_binaryターゲットをコンテナイメージにパッケージ化し、entrypointとcmdを自動設定します。
  • 03ベースイメージを浅くpullし、レイヤーが必要になるまではmanifestとconfigのみをダウンロードします。
  • 04hardlinkを使って、レイヤー間で同一ファイルを重複排除します。
  • 05Bazel remote cacheからのlazy pushを含む、複数のpush方式を提供します。
  • 06マルチプラットフォームのイメージindex、eStargz、SOCIによるlazy pullingに対応しています。

ユースケース

  • 既存のBazelモノレポ内で、C++、Go、Python、Java製サービスのコンテナイメージをビルドする。
  • ビルドマシンごとにすべてのベースレイヤーをダウンロードせずに、CUDAベースのワークロードなど、大容量のGPUイメージを配布する。
  • レイヤーをビルドホストにコピーせず、CIやremote executionクラスターからレジストリにイメージをpushする。
  • 1つのBazel設定から、linux/amd64とlinux/arm64向けのマルチアーキテクチャイメージを生成する。

クイックスタート

  1. 1

    MODULE.bazel ファイルに rules_img を追加します

  2. 2

    必要に応じて、.bazelrc ファイルでデフォルト設定を構成します

使う前に知っておきたいこと

  • 現在のバージョンは 0.3.x のため、リリース間で API が変更される可能性があります。
  • ディスクイメージなど、一部の機能は実験的とされています。

トピック

よくある質問

rules_img とは?
BazelターゲットからOCIコンテナイメージをビルドするルール。ベースイメージの浅いpull、レイヤーの重複排除、ローカルマシンを経由せずにバイト列を転送できるpush方式を備えています。 rules_imgは、Dockerデーモンを使わずにBazelビルド内でOCIコンテナイメージを直接ビルドするためのBazelルール集です。BzlmodとWORKSPACEの両方に対応し、あらゆる*_binaryターゲット(C++、Go、Python、Java、Rustなど)をイメージにパッケージ化できます。entrypoint、cmd、env、作業ディレクトリはバイナリから自動的に設定されます。
rules_img は無料で使えますか?ライセンスは?
rules_img は Apache-2.0 ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
rules_img は今もメンテナンスされていますか?
活発にメンテナンス中。rules_img の最終コミットは 2026年11月6日 です。
rules_img は何に使えますか?
既存のBazelモノレポ内で、C++、Go、Python、Java製サービスのコンテナイメージをビルドする。 ビルドマシンごとにすべてのベースレイヤーをダウンロードせずに、CUDAベースのワークロードなど、大容量のGPUイメージを配布する。 レイヤーをビルドホストにコピーせず、CIやremote executionクラスターからレジストリにイメージをpushする。 1つのBazel設定から、linux/amd64とlinux/arm64向けのマルチアーキテクチャイメージを生成する。
rules_img のインストール方法は?
MODULE.bazel ファイルに rules_img を追加します 必要に応じて、.bazelrc ファイルでデフォルト設定を構成します
rules_img はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/bazel-contrib/rules_img

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト