《现代汉语词典》与《中文技术文档写作风格指南》都以「其他」为规范词形; 本书基线是 90 处「其他」比 35 处「其它」,是集群里遗留最多的一本 (其余各书 0~4 处,blockchain_guide 已于 2026-08-05 统一过 47 处)。 其中 6 处在标题和目录上——`4.6 其它制作镜像的方式`、`第十七章 容器其它生态`、 `18.5 其它安全特性`——标题与 SUMMARY 条目**同批改写以保持一致**: 改动后 196 条目录名与各文件标题仍是 0 处不一致。 **`CHANGELOG.md` 里那一处刻意不动**:它是历史发布记录,改它等于改历史。 改动前后逐字符对称差:只有 34 个「它」变成「他」,无其他字符变化。 `check_project_rules` 202/202、`check_emphasis` 202/202、37 tests OK。
2.8 KiB
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” 的体会落差。
正确的解决路径有两条:
- 推送到远端仓库:使用
docker buildx build --sbom=true --push -t myimage:tag时,SBOM 会正确保存到远端仓库。远端 OCI 兼容的镜像仓库能够完整存储这些元数据。- 启用 containerd image store:在 Docker 守护进程中启用
containerd image store特性(Docker 29+,新安装场景默认启用,Docker Desktop 上也更容易直接使用),可以在本地查看和管理 SBOM 等 attestation 元数据。