返回
创建于
状态公开
docker buildx build
和 docker build
都用于构建 Docker 镜像,但它们之间存在一些关键区别,主要体现在功能、可移植性、多平台支持等方面。下面我用几个小节详细说明两者的区别:
一、基本定义
docker build
- 是传统的 Docker 构建命令。
- 默认使用本地的构建器(builder),只能为当前主机架构构建镜像(例如你本机是 x86_64,只能构建 x86_64 镜像)。
- 功能相对基础,适合简单的构建任务。
docker buildx build
- 是 Docker BuildKit 的扩展版本命令,支持更多高级构建功能。
- 支持跨平台构建(multi-platform builds),可以构建 ARM、x86 等不同架构的镜像。
- 通常需要通过
--builder
参数使用自定义构建器。 - 适合复杂项目、CI/CD 环境以及需要发布到不同架构平台的项目。
二、功能对比
功能 | docker build | docker buildx build |
---|---|---|
基本镜像构建 | ✅ | ✅ |
构建缓存优化(BuildKit) | ❌(默认不开) | ✅ |
跨平台构建(如构建 ARM 镜像) | ❌ | ✅ |
并行构建(多个阶段同时构建) | ❌ | ✅ |
导出多种格式(如 tar、OCI) | ❌ | ✅ |
使用远程构建器(如 docker-container 模式) | ❌ | ✅ |
直接推送到镜像仓库(如 Docker Hub) | ❌ | ✅(--push ) |
三、跨平台构建示例
如果你想构建一个可运行在 ARM(例如树莓派)上的 Docker 镜像:
1docker buildx build --platform linux/arm64 -t myimage:arm64 .
使用 docker build
是无法实现的,它只支持当前平台。
四、BuildKit 支持和启用方式
从 Docker 18.09 起,Docker 引入了 BuildKit 构建引擎,默认是关闭的。如果你想在 docker build
中启用 BuildKit,需要设置环境变量:
1export DOCKER_BUILDKIT=1
2docker build -t myimage .
而 buildx
则是默认启用 BuildKit 并强化了其能力。
五、构建器(Builder)的管理
buildx
支持管理多个构建器实例,比如:
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 |