加载详情...
加载详情...
docker buildx build
和 docker build
都用于构建 Docker 镜像,但它们之间存在一些关键区别,主要体现在功能、可移植性、多平台支持等方面。下面我用几个小节详细说明两者的区别:
docker build
docker buildx build
--builder
参数使用自定义构建器。功能 | 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
是无法实现的,它只支持当前平台。
从 Docker 18.09 起,Docker 引入了 BuildKit 构建引擎,默认是关闭的。如果你想在 docker build
中启用 BuildKit,需要设置环境变量:
1export DOCKER_BUILDKIT=1
2docker build -t myimage .
而 buildx
则是默认启用 BuildKit 并强化了其能力。
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 |