news 2026/7/5 2:43:12

Docker Buildx命令介绍(官方提供的新一代镜像构建工具,基于BuildKit构建引擎)Builder实例、Buildx驱动类型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker Buildx命令介绍(官方提供的新一代镜像构建工具,基于BuildKit构建引擎)Builder实例、Buildx驱动类型

文章目录

  • Docker Buildx 详解:下一代 Docker 镜像构建工具
    • 什么是 Buildx
    • 为什么需要 Buildx
  • Buildx 架构原理
  • 安装 Buildx
    • 查看 Buildx 版本(docker buildx version)
    • 查看 Buildx 信息(docker buildx inspect)
    • 查看当前 Builder(docker buildx ls)
  • Builder 管理命令
    • 创建 Builder(docker buildx create)
    • 启动 Builder(docker buildx create --use)
    • 使用 Builder(docker buildx use)
    • 删除 Builder(docker buildx rm)
    • 停止 Builder(docker buildx stop)
    • 启动 Builder(`docker buildx inspect --bootstrap`)
  • 镜像构建命令
    • 构建镜像(docker buildx build)
    • 构建并加载到本地(`--load`)
    • 构建并推送(`--push`)
    • 输出 OCI 镜像(`--output`)
    • 导出本地目录(`--output type=local`)
  • 多平台构建
    • 指定平台(`--platform`)
    • 多平台构建并推送(`--platform + --push`)
  • 缓存机制
    • 导出缓存(`--cache-to`)
    • 导入缓存(`--cache-from`)
  • Buildx 参数大全
    • `--platform`:指定目标平台
    • `--push`:推送镜像
    • `--load`:加载到本地
    • `--tag` 或 -t:指定标签
    • `--file` 或 `-f`:指定 Dockerfile
    • `--build-arg`:传递构建参数
    • `--cache-from`:导入缓存
    • `--cache-to`:导出缓存
    • `--secret`:传递 Secret
    • `--ssh`:SSH 转发
    • `--output`:输出格式
    • `--progress`:日志显示模式
  • Buildx 驱动类型
    • docker 驱动
    • docker-container 驱动
    • 补充:Docker Buildx 中 docker 驱动和 docker-container 驱动的区别
      • 核心区别概述
        • 1. **docker 驱动**
        • 2. **docker-container 驱动**(推荐)
      • 详细对比
      • 使用建议
        • 选择 `docker` 驱动的场景:
        • 选择 `docker-container` 驱动的场景(推荐):
      • 实际应用示例
    • kubernetes 驱动
    • remote 驱动
  • Buildx 实战案例
    • 构建 AMD64 与 ARM64 镜像
    • GitHub Actions 多平台发布
    • 使用缓存提升 CI 速度
  • Buildx 与 docker build 对比
  • 总结

Docker Buildx 详解:下一代 Docker 镜像构建工具

什么是 Buildx

Buildx 是 Docker 官方提供的新一代镜像构建工具。

它基于 Docker 的BuildKit构建引擎,实现了比传统docker build更强大的能力,包括:

  • 多平台镜像构建
  • 高性能并行构建
  • 高级缓存机制
  • 分布式构建
  • 输出到 OCI 格式
  • 导出镜像文件
  • 多节点 Builder 集群

简单来说:

docker build ↓ BuildKit(构建引擎) ↓ docker buildx(高级客户端)

Buildx 可以看作:

docker build 的增强版。

如今 Docker Desktop 默认已经集成 Buildx。

许多现代 CI/CD 系统(GitHub Actions、GitLab CI、Jenkins)也普遍采用 Buildx。


为什么需要 Buildx

传统docker build存在一些局限:

能力docker buildbuildx
多架构镜像
并行构建
缓存导入导出有限
远程 Builder
OCI 输出
镜像导出 tar有限
构建集群

例如:

开发机:

Mac M1 arm64

生产服务器:

Linux amd64

传统方式:

dockerbuild.

生成的是:

linux/arm64

部署到 x86 服务器:

exec format error

Buildx 可以直接构建:

dockerbuildx build\--platformlinux/amd64,linux/arm64.

一次生成:

amd64 arm64

多架构镜像。


Buildx 架构原理

Buildx 的核心架构:

Docker CLI ↓ Buildx ↓ BuildKit ↓ Builder Instance ↓ Container Driver Docker Driver Kubernetes Driver Remote Driver ↓ Image Registry

工作流程:

Dockerfile ↓ 解析依赖 ↓ BuildKit DAG ↓ 并行执行 ↓ 缓存复用 ↓ 镜像生成 ↓ push/load/export

BuildKit 会把 Dockerfile 转换成:

DAG Directed Acyclic Graph 有向无环图

例如:

COPY package.json COPY src/ RUN npm install RUN npm build

BuildKit 可以发现:

COPY src COPY package 互不依赖

于是可以:

并行执行

提高构建效率。


安装 Buildx

查看 Buildx 版本(docker buildx version)

查看当前版本。

dockerbuildx version

输出:

github.com/docker/buildx v0.25.0

查看 Buildx 信息(docker buildx inspect)

dockerbuildx inspect

示例:

Name: default Driver: docker-container Platforms: linux/amd64 linux/arm64

查看当前 Builder(docker buildx ls)

列出所有 Builder。

dockerbuildxls

示例:

NAME/NODE default multiarch builder0

Builder 管理命令

Buildx 最大特点之一就是 Builder 实例。

一个 Builder 可以理解成:

一个独立的 BuildKit 环境。


创建 Builder(docker buildx create)

创建新的 Builder。

dockerbuildx create--namemybuilder

使用:

dockerbuildx create\--namemultiarch

指定驱动:

dockerbuildx create\--driverdocker-container

启动 Builder(docker buildx create --use)

创建并切换。

dockerbuildx create\--namemultiarch\--use

使用 Builder(docker buildx use)

切换 Builder。

dockerbuildx use multiarch

删除 Builder(docker buildx rm)

dockerbuildxrmmultiarch

停止 Builder(docker buildx stop)

dockerbuildx stop

启动 Builder(docker buildx inspect --bootstrap

初始化 Builder。

dockerbuildx inspect--bootstrap

会自动启动 BuildKit。


镜像构建命令

构建镜像(docker buildx build)

这是 Buildx 最核心命令。

dockerbuildx build.

指定镜像名称:

dockerbuildx build\-tdemo:v1.

构建并加载到本地(--load

Buildx 默认不会导入本地 Docker。

需要:

dockerbuildx build\--load.

或者:

dockerbuildx build\-tapp:latest\--load.

等价于:

docker image load

构建并推送(--push

dockerbuildx build\--push\-tregistry/app:v1.

Buildx 多平台构建通常需要直接推送。

dockerbuildx build\--platformlinux/amd64,linux/arm64\--push\-tdemo/app:v1.

输出 OCI 镜像(--output

输出到文件。

dockerbuildx build\--outputtype=oci.

输出 tar。

dockerbuildx build\--outputtype=docker,dest=image.tar

导出本地目录(--output type=local

dockerbuildx build\--outputtype=local,dest=./dist

适合:

前端构建 静态网站 编译产物输出

多平台构建

指定平台(--platform

Buildx 最重要功能。

dockerbuildx build\--platformlinux/amd64.

多个平台:

dockerbuildx build\--platformlinux/amd64,linux/arm64

支持:

linux/amd64 linux/arm64 linux/arm/v7 linux/arm/v6 linux/ppc64le linux/s390x

查看支持平台:

dockerbuildx inspect

多平台构建并推送(--platform + --push

dockerbuildx build\--platformlinux/amd64,linux/arm64\-tmyapp:v1\--push.

最终 Registry 中会生成:

Manifest List ├── amd64 ├── arm64

客户端下载时自动匹配。

例如:

Mac M2 ↓ arm64
Ubuntu Server ↓ amd64

缓存机制

Buildx 的缓存能力远强于传统 Docker。


导出缓存(--cache-to

dockerbuildx build\--cache-totype=local,dest=.cache

导入缓存(--cache-from

dockerbuildx build\--cache-fromtype=local,src=.cache

Registry 缓存:

dockerbuildx build\--cache-to=type=registry,ref=myrepo/cache

dockerbuildx build\--cache-from=type=registry,ref=myrepo/cache

GitHub Actions:

type=gha
--cache-totype=gha
--cache-fromtype=gha

非常适合 CI/CD。


Buildx 参数大全

--platform:指定目标平台

--platformlinux/amd64

--push:推送镜像

--push

--load:加载到本地

--load

--tag或 -t:指定标签

-tapp:v1

--file-f:指定 Dockerfile

-fDockerfile.prod

--build-arg:传递构建参数

--build-argENV=prod

Dockerfile:

ARG ENV

--cache-from:导入缓存

--cache-fromtype=local

--cache-to:导出缓存

--cache-totype=local

--secret:传递 Secret

--secretid=token,src=token.txt

Dockerfile:

RUN --mount=type=secret,id=token

--ssh:SSH 转发

dockerbuildx build\--sshdefault

Dockerfile:

RUN --mount=type=ssh

适用于:

私有 Git 仓库 私有依赖下载 企业内部仓库

--output:输出格式

--outputtype=docker
--outputtype=oci
--outputtype=local
--outputtype=tar

--progress:日志显示模式

--progressauto
--progressplain
--progresstty

CI 中推荐:

--progressplain

Buildx 驱动类型

docker 驱动

Driver=docker

直接复用 Docker Engine。

优点:

简单 无需额外容器

缺点:

功能有限 不支持完整多平台

docker-container 驱动

推荐方案。

dockerbuildx create\--driverdocker-container

优点:

功能完整 支持缓存 支持多架构 支持 BuildKit

补充:Docker Buildx 中 docker 驱动和 docker-container 驱动的区别

核心区别概述

1.docker 驱动
Driver=docker

工作原理:

  • 直接复用现有的 Docker Engine
  • 作为 Docker 守护进程的一部分运行
  • 不创建额外的容器

优点:

  • 简单易用:无需额外配置,开箱即用
  • 资源占用少:不需要启动额外的容器
  • 启动快速:没有容器初始化开销

缺点:

  • 功能有限:仅支持基础构建功能
  • 不支持多平台构建:无法同时为不同架构(如 amd64, arm64)构建镜像
  • 不支持并发构建:无法并行执行多个构建任务
  • 缓存机制简单:缺乏高级缓存优化
  • 不支持 BuildKit 高级特性:无法使用 BuildKit 的所有功能

2.docker-container 驱动(推荐)
dockerbuildx create--driverdocker-container

工作原理:

  • 在独立的 Docker 容器中运行 BuildKit
  • 通过容器隔离构建环境
  • 完全独立于主机 Docker Engine

优点:

  • 功能完整:支持所有 BuildKit 特性
  • 多平台构建:可以同时为多种 CPU 架构构建镜像
  • 并发构建:支持并行执行多个构建任务,大幅提升效率
  • 高级缓存:支持更复杂的缓存策略和优化
  • 隔离性好:构建环境与主机环境完全隔离
  • 可扩展性:可以配置多个构建节点

缺点:

  • 需要额外容器:会启动一个专门的构建容器
  • 资源开销稍大:需要额外的内存和 CPU 资源
  • 配置稍复杂:需要手动创建 builder 实例

详细对比

特性docker 驱动docker-container 驱动
架构复用 Docker Engine独立容器运行 BuildKit
多平台支持❌ 不支持✅ 完整支持
并发构建❌ 不支持✅ 支持
高级缓存❌ 基础缓存✅ 高级缓存优化
BuildKit 特性⚠️ 有限支持✅ 完整支持
资源占用✅ 低⚠️ 中等
配置复杂度✅ 简单⚠️ 需手动配置
隔离性⚠️ 与主机共享✅ 完全隔离
推荐使用场景简单单平台构建生产环境、多平台构建

使用建议

选择docker驱动的场景:
  • 仅需要构建单一平台的镜像
  • 资源受限的环境(如低配服务器)
  • 快速原型验证
  • 简单的 CI/CD 流程
选择docker-container驱动的场景(推荐):
  • 生产环境:需要完整功能和稳定性
  • 多平台支持:需要为不同架构(x86_64, ARM64, ARMv7 等)构建镜像
  • 高性能需求:需要并发构建来加速构建流程
  • 复杂项目:需要高级缓存和优化特性
  • CI/CD 流水线:需要可重复、隔离的构建环境

实际应用示例

# 创建 docker-container 驱动的 builderdockerbuildx create--namemybuilder--driverdocker-container--use# 验证支持的平台dockerbuildx inspect--bootstrap# 多平台构建示例dockerbuildx build--platformlinux/amd64,linux/arm64,linux/arm/v7\-tmyapp:latest--push.

总结:虽然docker驱动在简单场景下更轻量,但docker-container驱动提供了完整的功能集和更好的扩展性,是现代容器化开发和生产的推荐选择。除非有特殊的资源限制,否则建议优先使用docker-container驱动。

kubernetes 驱动

BuildKit 运行在 Kubernetes。

buildkitd Pod ↓ 集群构建

适合:

大型 CI 云原生平台 企业构建集群

remote 驱动

连接远程 BuildKit。

tcp://builder:1234

适合:

共享构建节点 集中式构建

Buildx 实战案例

构建 AMD64 与 ARM64 镜像

dockerbuildx build\--platformlinux/amd64,linux/arm64\-tmyapp:v1\--push.

GitHub Actions 多平台发布

-uses:docker/setup-buildx-action@v3-uses:docker/build-push-action@v6with:platforms:linux/amd64,linux/arm64push:truetags:myapp:latest

使用缓存提升 CI 速度

dockerbuildx build\--cache-from=type=gha\--cache-to=type=gha,mode=max

构建时间通常可以减少:

50%~90%

Buildx 与 docker build 对比

功能docker buildbuildx
BuildKit部分支持完整支持
多平台
缓存导出
缓存导入
远程 Builder
OCI 输出
并行构建有限
Secret Mount
SSH Mount
CI/CD一般优秀

总结

Buildx 已经成为 Docker 官方推荐的镜像构建方案。

它不仅仅是docker build的升级版,更是 BuildKit 能力的统一入口。

对于现代云原生开发来说,Buildx 几乎已经成为必备工具:

  • 多架构镜像发布
  • GitHub Actions 自动化构建
  • 高性能缓存
  • 分布式 Builder
  • Kubernetes 集群构建
  • OCI 镜像输出

如果只记住一句话:

docker build 用于传统构建,而 docker buildx build 是面向云原生时代的镜像构建标准工具。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 2:42:23

MonikA.I 终极指南:构建革命性AI伴侣的完整解决方案

MonikA.I 终极指南:构建革命性AI伴侣的完整解决方案 【免费下载链接】MonikA.I Submod for MAS with AI based features 项目地址: https://gitcode.com/gh_mirrors/mo/MonikA.I 你是否曾经想过,如果游戏中的虚拟角色能够真正理解你的话语&#x…

作者头像 李华
网站建设 2026/7/5 2:41:24

解锁开题高效写作新模式,paperxie助力学子轻松通过论文开题

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/科研绘图 开题报告 - PaperXie智能写作PaperXieAi论文智能生成软件,10分钟生成万字毕业论文、期刊论文、文献综述、PPT,Aigc查重、降重报告、文献资料。只需一个标题,从…

作者头像 李华
网站建设 2026/7/5 2:40:22

RAG 权限过滤:召回结果正确,也不能越权

RAG 权限过滤:召回结果正确,也不能越权 一、RAG 最怕把不该看的资料说出来 RAG 系统经常把注意力放在召回率和答案质量上,但权限过滤同样关键。一个答案如果引用了用户无权访问的文档,即使技术上回答正确,也是严重事故…

作者头像 李华
网站建设 2026/7/5 2:39:44

题解单元测试生成:随机用例要有暴力解兜底

题解单元测试生成:随机用例要有暴力解兜底 一、测试生成不能只靠直觉 给算法题写单元测试时,很多人会随手写几个看起来正常的输入。这样能检查格式,却很难覆盖隐藏边界。AI 生成测试用例也会有同样问题,它可能生成一批相似样例&am…

作者头像 李华
网站建设 2026/7/5 2:39:15

UI测试组合拳:视觉对比与自动化测试的融合实践

1. 项目概述:为什么UI测试需要“组合拳”?在软件交付的战场上,UI测试常常是那个最耗时、最脆弱,却又最直观影响用户体验的环节。我经历过太多这样的场景:开发团队信心满满地宣称功能已就绪,结果一到测试阶段…

作者头像 李华
网站建设 2026/7/5 2:38:13

AI 公式复制到 Word 乱码怎么办:LaTeX 转 Word 与 DS随心转方案对比

AI 公式复制到 Word 乱码怎么办:LaTeX 转 Word 与 DS随心转方案对比一句话答案:AI 公式复制到 Word 后变乱码,通常是 LaTeX 或 Markdown 公式没有转换为 Word 公式对象,需要先规范公式结构,再选择手动转换、Pandoc 或第…

作者头像 李华