Repolode
bazel-contrib

bazel-contrib/rules_img

用于在 Bazel 中构建 OCI 容器镜像的规则集,支持浅层拉取基础镜像、层去重和减少本地数据传输的推送策略。

可替代:Docker Build

Star
144
Fork
58
未关闭 Issue
16
最近提交
昨天

这是什么?

rules_img 是一组用于在 Bazel 构建过程中直接生成 OCI 容器镜像的规则,无需 Docker daemon。它同时支持 Bzlmod 和 WORKSPACE 两种配置方式,可以把任意 *_binary 目标(如 C++、Go、Python、Java、Rust 等)打包成镜像,并自动从目标中推导出 entrypoint、cmd、环境变量和工作目录。

项目重点关注构建性能。基础镜像采用浅层拉取,只获取 manifest 和配置,CUDA 这类大型镜像的层仅在真正需要时才下载。每个层在一个 action 中生成,相同文件通过硬链接去重。项目提供 eager、lazy、CAS registry 和 BES 等多种推送策略,可以让镜像从远程执行环境或 Bazel 远程缓存直接上传,不必经过本机。此外还支持多平台镜像索引、eStargz 和 SOCI 懒加载,以及文件系统和磁盘镜像格式的层。

核心功能

  • 01在 Bazel 中构建 OCI 镜像,无需 Docker daemon,构建可复现。
  • 02可将任意 *_binary 目标打包为容器镜像,自动设置 entrypoint 和 cmd。
  • 03基础镜像浅层拉取,仅在需要时才下载层数据。
  • 04通过硬链接对各层中的相同文件去重。
  • 05提供多种推送策略,包括从 Bazel 远程缓存中惰性推送。
  • 06支持多平台镜像索引,以及 eStargz 和 SOCI 懒加载。

适用场景

  • 在已有的 Bazel 单体仓库中为 C++、Go、Python 或 Java 服务构建容器镜像。
  • 构建基于 CUDA 等大型基础镜像的工作负载,避免在每台构建机上下载全部基础层。
  • 在 CI 或远程执行集群中直接把镜像推送到镜像仓库,无需把层复制到构建主机。
  • 通过同一套 Bazel 配置生成 linux/amd64 和 linux/arm64 的多架构镜像。

快速上手

  1. 1

    在 MODULE.bazel 文件中添加 rules_img

  2. 2

    可选:在 .bazelrc 文件中配置默认设置

使用前须知

  • 当前版本为 0.3.x,API 在各版本之间可能仍会变化。
  • 部分功能(如磁盘镜像)被标注为实验性功能。

标签

常见问题

rules_img 是什么?
用于在 Bazel 中构建 OCI 容器镜像的规则集,支持浅层拉取基础镜像、层去重和减少本地数据传输的推送策略。 rules_img 是一组用于在 Bazel 构建过程中直接生成 OCI 容器镜像的规则,无需 Docker daemon。它同时支持 Bzlmod 和 WORKSPACE 两种配置方式,可以把任意 *_binary 目标(如 C++、Go、Python、Java、Rust 等)打包成镜像,并自动从目标中推导出 entrypoint、cmd、环境变量和工作目录。
rules_img 可以免费使用吗?用的什么许可证?
rules_img 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
rules_img 还在维护吗?
活跃维护中。rules_img 最近一次提交是在 2026年11月6日。
rules_img 适合用来做什么?
在已有的 Bazel 单体仓库中为 C++、Go、Python 或 Java 服务构建容器镜像。 构建基于 CUDA 等大型基础镜像的工作负载,避免在每台构建机上下载全部基础层。 在 CI 或远程执行集群中直接把镜像推送到镜像仓库,无需把层复制到构建主机。 通过同一套 Bazel 配置生成 linux/amd64 和 linux/arm64 的多架构镜像。
rules_img 怎么安装和运行?
在 MODULE.bazel 文件中添加 rules_img 可选:在 .bazelrc 文件中配置默认设置
在哪里获取 rules_img?
源代码和安装说明在 GitHub 上:https://github.com/bazel-contrib/rules_img

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目