返回
创建于
状态公开

docker buildx builddocker build 都用于构建 Docker 镜像,但它们之间存在一些关键区别,主要体现在功能、可移植性、多平台支持等方面。下面我用几个小节详细说明两者的区别:


一、基本定义

docker build

  • 是传统的 Docker 构建命令。
  • 默认使用本地的构建器(builder),只能为当前主机架构构建镜像(例如你本机是 x86_64,只能构建 x86_64 镜像)。
  • 功能相对基础,适合简单的构建任务。

docker buildx build

  • 是 Docker BuildKit 的扩展版本命令,支持更多高级构建功能。
  • 支持跨平台构建(multi-platform builds),可以构建 ARM、x86 等不同架构的镜像。
  • 通常需要通过 --builder 参数使用自定义构建器。
  • 适合复杂项目、CI/CD 环境以及需要发布到不同架构平台的项目。

二、功能对比

功能docker builddocker buildx build
基本镜像构建
构建缓存优化(BuildKit)❌(默认不开)
跨平台构建(如构建 ARM 镜像)
并行构建(多个阶段同时构建)
导出多种格式(如 tar、OCI)
使用远程构建器(如 docker-container 模式)
直接推送到镜像仓库(如 Docker Hub)✅(--push

三、跨平台构建示例

如果你想构建一个可运行在 ARM(例如树莓派)上的 Docker 镜像:

bash
1docker buildx build --platform linux/arm64 -t myimage:arm64 .

使用 docker build 是无法实现的,它只支持当前平台。


四、BuildKit 支持和启用方式

从 Docker 18.09 起,Docker 引入了 BuildKit 构建引擎,默认是关闭的。如果你想在 docker build 中启用 BuildKit,需要设置环境变量:

bash
1export DOCKER_BUILDKIT=1
2docker build -t myimage .

buildx 则是默认启用 BuildKit 并强化了其能力。


五、构建器(Builder)的管理

buildx 支持管理多个构建器实例,比如:

bash
1docker buildx create --name mybuilder --use
2docker buildx inspect --bootstrap

你可以基于不同的需求创建多个构建器,比如支持缓存、远程构建或使用不同平台。


六、总结:何时用哪个?

场景推荐命令
本地简单构建,无需多平台支持docker build
跨平台构建(如构建 ARM 镜像)docker buildx build
多阶段构建,优化缓存,加速构建过程docker buildx build
需要在 CI/CD 系统中构建并推送镜像docker buildx build --push
要导出 OCI 镜像或 tar 文件docker buildx build --output