把构建结果直接输出成文件
buildx 的输出类型决定构建产物去往何处。type=local 把指定阶段的内容铺到本地目录,适合取出编译产物或某一阶段的文件;type=oci 生成 OCI layout 归档,用于离线搬运或交给扫描工具;type=docker 把镜像载入本地镜像库,效果等同于 --load。这几个出口不经过本地镜像列表,需要镜像时用 --load,需要远端时用 --push。
基本信息
| 输出类型 | type=local / type=oci / type=docker |
|---|---|
| local 行为 | 把目标目录内容铺到 dest 指定目录 |
| oci 行为 | 生成 OCI layout 归档文件或目录 |
| 等价关系 | type=docker 等价于 --load |
典型使用场景
- 取编译产物:多阶段构建里只导出构建阶段的二进制文件
- 生成离线归档:保存为 OCI 格式后再搬到隔离环境
- 交给扫描工具:把产物落盘后交由外部安全工具检查
- 前端静态产物:直接输出到发布目录,省掉一层镜像
- 流水线交接:把产物交给后续阶段,避免中间镜像层层堆积
三种输出写法
三种输出写法
# 只取 build 阶段的文件到本地目录
docker buildx build --target build --output type=local,dest=./out .
# 生成 OCI layout 归档,便于搬运与分发
docker buildx build --output type=oci,dest=./app-web-1.4.2.tar .
# 等价于 --load:把镜像载入本地库
docker buildx build --output type=docker,name=app/web:1.4.2 .
# 核对产物
tar tf app-web-1.4.2.tar | head输出类型对照
| 类型 | 产物形态 | 典型用途 |
|---|---|---|
| type=local | 目标目录里的文件 | 取出编译产物或某个阶段的结果 |
| type=oci | OCI layout 目录或归档文件 | 离线分发、交给扫描工具 |
| type=docker | 载入本地镜像库 | 需要本地镜像的场景 |
| --push | 推送到镜像仓库 | 构建完成即发布 |
local 输出会把文件直接铺进目标目录,同名文件被覆盖,先选一个干净的目录再执行。
OCI 归档交给其他工具消费前,先确认对方支持这一格式,避免流程衔接不上。
多阶段构建里 --target 与 --output 常配合使用:--target 决定构建停在哪个阶段,--output type=local 决定把该阶段的内容铺到哪里,两者一起用就能只取编译产物而不生成最终镜像。
输出类型可以按需组合成多条出口,把镜像推到仓库的同时把产物落盘;构建一次多处产出,省掉重复构建的时间。