Files
docker_practice/10_buildx/10.2_buildx.md
T
yeasy ef2625531d style: 含中文的括号统一为全角(336 处 / 110 文件)
全书此前是真·五五开:含中文的括号 336 处半角 : 336 处全角,而且**在同一文件
内混用**——`18_security/18.1_kernel_ns.md` 第 11/17/20 行写 `(如 runC)`,
第 31 行写 `(用户命名空间映射)`。这不是体例问题,是它自己跟自己不一致。

集群里其余 13 本都一边倒(llm_internals 5 : 1049、oc_guide 2 : 713、
forward_deployed_engineering_guide 0 : 108),blockchain_guide 已在 2026-08-05
按同一方向统一过 97 处,故取全角,而非另立新规。全角括号前后不留空格,
原先 `概念 (镜像、容器、仓库) 和` 两侧的空格一并收掉。

**纯拉丁内容的半角括号一个没动**——`新建一个层 (Layer)`、`项目 (project)`
保持原样:改动前后「半角且内容纯拉丁」的数量都是 **1163**,而「半角且含中文」
从 **336 变成 0**。

其余验证:改动前后各自抹掉全部空白与圆括号后**逐字节相同**(两侧均 19559 字符);
左右括号总数改动前后都是 399 : 399,证明没有吞括号也没有配错对。
`check_project_rules` 202/202、`check_emphasis` 202/202、37 tests OK、
根 `format_checker` 与 `validate_codeblocks` 干净、`git diff --check` 干净。
2026-08-24 13:13:23 -07:00

2.8 KiB
Raw Blame History

10.2 使用 buildx 构建镜像

10.2.1 使用

Buildx 的使用非常直观,绝大多数情况下可以替代 docker build 命令。

你可以直接使用 docker buildx build 命令构建镜像。

$ docker buildx build .
[+] Building 8.4s (23/32)
 => ...

Buildx 使用 BuildKit 引擎进行构建,支持许多新的功能,具体参考 Buildkit 一节。

需要注意的是,默认 docker driver 会把构建结果加载到本地镜像存储;使用 docker-container、remote、cloud 等 builder 时,如未指定 --load、--push 或 --output,结果通常只保留在构建缓存中。

构建前检查

Buildx 0.15 起支持构建检查:常规构建会默认检查 Dockerfile 与构建参数;如果只想做检查而不真正构建,可以使用 --check:

$ docker buildx build --check .

这适合作为 CI 的快速门禁:普通构建中的检查告警默认不会让构建失败,但 --check 发现问题会以非零状态退出;需要把告警提升为错误时,可在 Dockerfile 顶部配合 # check=error=true。

使用 bake

docker buildx bake 是一个高级构建命令,支持从 HCL、JSON 或 Compose 文件中定义构建目标,实现复杂的流水线构建。

## 从 Compose 文件构建所有服务

$ docker buildx bake

## 仅构建指定目标

$ docker buildx bake web

生成 SBOM

Buildx 支持在构建时直接生成 SBOM (Software Bill of Materials),这对于软件供应链安全至关重要。

$ docker buildx build --sbom=true -t myimage .

该命令会把 SBOM 作为构建 attestation 附加到构建结果中;BuildKit 默认使用 SPDX SBOM attestation。需要 CycloneDX 文件时,可使用 Syft、Docker Scout 等工具另行生成或转换。

⚠️ 注意与失败模式: 要使 SBOM(或其它 attestation 元数据)成功附着并可见,对底层的存储格式有前置要求:默认的 classic image store 不支持 manifest list/index 这种存放 attestation 的结构。

如果只简单运行上述命令,你可能会面临 “命令成功执行,但本地镜像中看不到 SBOM” 的体会落差。

正确的解决路径有两条:

  1. 推送到远端仓库:使用 docker buildx build --sbom=true --push -t myimage:tag 时,SBOM 会正确保存到远端仓库。远端 OCI 兼容的镜像仓库能够完整存储这些元数据。
  2. 启用 containerd image store:在 Docker 守护进程中启用 containerd image store 特性(Docker 29+,新安装场景默认启用,Docker Desktop 上也更容易直接使用),可以在本地查看和管理 SBOM 等 attestation 元数据。

10.2.2 官方文档