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 覆盖标签与缓存来源
- 文件纳入版本管理,构建参数变更走评审;敏感值一律不入库