mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 12:21:17 +00:00
1.8 KiB
1.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 一节。
使用 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 .
该命令会在构建结果中包含 SPDX 或 CycloneDX 格式的 SBOM 数据。
⚠️ 注意与失败模式: 要使 SBOM (或其它 attestation 元数据) 成功附着并可见,对底层的存储格式有前置要求:默认的 classic image store 不支持 manifest list/index 这种存放 attestation 的结构。
如果只简单运行上述命令,你可能会面临**“命令成功执行,但本地镜像中看不到 SBOM”**的体会落差。
正确的解决路径有两条:
- 在 Docker 守护进程中启用
containerd image store特性(现代 Docker Desktop 默认推荐)。- 或者使用
docker-containerdriver 的构建器,并直接加上--push参数将产物推送到远端支持 OCI 的镜像仓库,仓库会正确保存这些元数据。