首页/云/Docker 容器速查/buildx bake 多目标构建
镜像与构建107 条

buildx bake 多目标构建

用一份 bake 文件(HCL/JSON)声明多个构建目标与公共配置,一条命令并行构建多镜像,适合多服务仓库。

Docker 容器速查云更新于 2026-10-13

bake 是干什么的

buildx bake 用一个声明式文件描述多个构建目标与公共配置,一条命令即可并行构建多个镜像。文件支持 HCL 与 JSON,默认会自动查找 docker-bake.hcl、docker-bake.json 等名称。它适合多服务仓库:目标、标签、平台矩阵、公共构建参数集中管理,本地与 CI 共用同一份定义,避免脚本里堆一长串 build 命令。

基本信息

用途声明式多目标构建
语法docker buildx bake [目标] [--push / --load]
默认文件docker-bake.hcl / docker-bake.json 等,自动查找
复用机制group、variable 与目标继承
依赖Buildx 插件

典型使用场景

  • 单仓库多服务,需要一条命令构建全部镜像
  • 多架构构建:同一目标声明 linux/amd64 与 linux/arm64
  • CI 与本地共用构建定义,减少环境差异
  • 把公共构建参数抽成 variable,避免每个目标重复书写
  • 只重建变更的服务,用目标名按需构建

docker-bake.hcl 示例

docker-bake.hcl 示例
variable "REGISTRY" { default = "registry.example.com/app" }
target "web" {
  context = "."
  dockerfile = "Dockerfile"
  tags = ["${REGISTRY}/web:1.0"]
  platforms = ["linux/amd64", "linux/arm64"]
}
group "default" { targets = ["web", "api"] }

执行方式

执行方式
docker buildx bake --print              # 先看解析后的完整构建设置
docker buildx bake --load               # 构建并导入本地镜像库
docker buildx bake web --push           # 只构建 web 目标并推送
docker buildx bake --set '*.cache-from=type=registry,ref=registry.example.com/app/web:cache'

常用调用方式

命令作用使用时机
bake --print打印解析后的目标配置调整语法后先验证解析结果
bake按 default 组构建日常全量构建
bake 目标名只构建指定目标迭代单个服务时
--set命令行覆盖配置CI 里临时改标签或缓存来源
默认组由 group default 定义;没有定义组时会构建文件内的全部目标,因此局部构建必须显式指定目标名。
bake 文件支持变量与目标继承,公共部分抽出来之后,新增服务只需要补少量差异字段。

落地建议

  • 把公共标签前缀、平台矩阵抽成 variable,减少重复定义
  • 用 group 定义常用组合:default 全量、ci 只构建待发布服务
  • 本地与 CI 共用同一文件,CI 只需通过 --set 覆盖标签与缓存来源
  • 文件纳入版本管理,构建参数变更走评审;敏感值一律不入库

易错点

  • 文件语法错误时提示往往很抽象,先执行 bake --print 验证解析,再执行真正的构建
  • 以为 bake 只构建当前目录相关的目标:默认按文件内目标全量构建,容易意外重建全部镜像
  • 多架构构建忘记 --push 或 --load:多平台镜像无法直接导入本地镜像库,需要推送到仓库
  • 把敏感参数直接写进 bake 文件:文件通常要入库,密钥类参数应通过环境变量或构建期 secret 注入

数据来源与参考

  • Docker 官方文档:Bake(docs.docker.com/build/bake)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌