Docker CLI docker buildx bake 常用命令

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍Docker CLI 中 docker buildx bake 常用命令。

1、docker buildx bake 简介

docker buildx bake是一个高级的构建命令。每个指定的目标都将作为构建的一部分并行运行。每个目标都生成一个容器映像。目标尽可能并行运行,以最大限度地提高性能。目标也可以直接引用前任来创建顺序管道。

参考文档https://docs.docker.com/engine/reference/commandline/buildx_bake/

2、docker buildx bake 语法

docker buildx bake [OPTIONS] [TARGET...]

3、docker buildx bake 命令

1)指定一个构建定义文件(-f,--file)

使用-f/--file选项指定要使用的构建定义文件。文件可以是HCL、JSON或Compose文件。如果指定了多个文件,则全部读取,并合并配置。可以传递要生成的目标的名称,只生成特定的目标。下面的例子构建了在docker-bake.dev.hcl文件中定义的db和webapp-release目标:

# docker-bake.dev.hcl
group "default" {
  targets = ["db", "webapp-dev"]
}

target "webapp-dev" {
  dockerfile = "Dockerfile.webapp"
  tags = ["docker.io/username/webapp"]
}

target "webapp-release" {
  inherits = ["webapp-dev"]
  platforms = ["linux/amd64", "linux/arm64"]
}

target "db" {
  dockerfile = "Dockerfile.db"
  tags = ["docker.io/username/db"]
}

docker buildx bake -f docker-bake.dev.hcl db webapp-release

2)打印不构建的选项(--print)

在不开始构建的情况下,以JSON格式打印出要构建的目标的结果选项。

docker buildx bake -f docker-bake.hcl --print db
{
  "group": {
    "default": {
      "targets": [
        "db"
      ]
    }
  },
  "target": {
    "db": {
      "context": "./",
      "dockerfile": "Dockerfile",
      "tags": [
        "docker.io/tiborvass/db"
      ]
    }
  }
}

3)从命令行覆盖目标配置。模式匹配语法定义在https://golang.org/pkg/path/#Match中。

docker buildx bake --set target.args.mybuildarg=value
docker buildx bake --set target.platform=linux/arm64
docker buildx bake --set foo*.args.mybuildarg=value # 覆盖所有以'foo'开头的目标的构建参数
docker buildx bake --set *.platform=linux/arm64     # 覆盖所有目标的平台
docker buildx bake --set foo*.no-cache              # 仅对以'foo'开头的目标绕过缓存

可重写字段的完整列表:

  • args
  • cache-from
  • cache-to
  • context
  • dockerfile
  • labels
  • no-cache
  • no-cache-filter
  • output
  • platform
  • pull
  • push
  • secrets
  • ssh
  • tags
  • target

4、选项说明

名称, 缩写

默认

描述

--file,-f

构建定义文件

--load

--set=*.output=type=docker的缩写

--metadata-file

将构建结果元数据写入文件

--no-cache

在构建图像时不使用缓存

--print

打印选项而不构建

--progress

auto

设置进度输出类型(auto、plain、tty)。使用plain来显示容器输出

--pull

始终尝试提取所有引用的图像

--push

--set=*.output=type=registry的简称

--set

覆盖目标值(例如,targetpattern.key=value)

--builder

覆盖已配置的构builder实例

5、相关命令

命令

描述

docker buildx bake

从文件构建

docker buildx build

开始构建

docker buildx create

创建一个新的builder实例

docker buildx du

磁盘使用情况

docker buildx imagetools

在registry中处理镜像的命令

docker buildx inspect

查当前builder实例

docker buildx ls

列出 builder 实现

docker buildx prune

移除构建缓存

docker buildx rm

删除 builder 实现

docker buildx stop

停止 builder 实现

docker buildx use

设置当前 builder 实例

docker buildx version

显示buildx版本信息

6、父命令

命令

描述

docker buildx

Docker Buildx

推荐阅读
cjavapy编程之路首页