Bake简介

Bake是对docker build命令的抽象,它允许您更轻松地以一致的方式管理构建配置(CLI标志、环境变量等),以便团队中的每个人都能使用。

Bake是Buildx CLI中内置的一个命令,因此只要安装了Buildx,您就可以通过docker buildx bake命令访问bake。

使用Bake构建项目

这是一个简单的docker build命令示例

$ docker build -f Dockerfile -t myapp:latest .

此命令构建当前目录中的Dockerfile,并将生成的镜像标记为myapp:latest

使用Bake表达相同的构建配置

docker-bake.hcl
target "myapp" {
  context = "."
  dockerfile = "Dockerfile"
  tags = ["myapp:latest"]
}

Bake提供了一种结构化的方式来管理您的构建配置,它可以避免您每次都必须记住docker build的所有CLI标志。使用此文件,构建镜像就像运行一样简单

$ docker buildx bake myapp

对于简单的构建,docker builddocker buildx bake之间的区别很小。但是,随着构建配置变得越来越复杂,Bake提供了一种更结构化的方式来管理这种复杂性,而这对于docker build的CLI标志来说很难管理。它还提供了一种在团队中共享构建配置的方法,以便每个人都能以一致的方式、使用相同的配置来构建镜像。

Bake文件格式

您可以使用HCL、YAML(Docker Compose文件)或JSON编写Bake文件。一般来说,HCL是最具表现力和灵活性的格式,这就是为什么您会在本文档的大多数示例以及使用Bake的项目中看到它的原因。

可以为目标设置的属性与docker build的CLI标志非常相似。例如,考虑以下docker build命令

$ docker build \
  -f Dockerfile \
  -t myapp:latest \
  --build-arg foo=bar \
  --no-cache \
  --platform linux/amd64,linux/arm64 \
  .

Bake等效项将是

target "myapp" {
  context = "."
  dockerfile = "Dockerfile"
  tags = ["myapp:latest"]
  args = {
    foo = "bar"
  }
  no-cache = true
  platforms = ["linux/amd64", "linux/arm64"]
}

后续步骤

要了解有关使用Bake的更多信息,请参阅以下主题

  • 了解如何在Bake中定义和使用目标
  • 要查看可以为目标设置的所有属性,请参阅Bake文件参考