经常玩Docker的小伙伴应该知道,直接使用
docker build
构建出来的镜像架构是跟构建机的CPU架构绑定的,比如你用x86的机器,构建出来的镜像通常只能在x86的设备上跑,遇到事Arm或其他架构的设备想要使用这个镜像时就难受了,大概率会启动不了或启动后各种报错。笔者介绍的这个工具:Buildx就厉害了,可以在一台设备上打出多个架构的Docker镜像,
🎭 功能简介
Docker Buildx 是 Docker 官方提供的一个构建工具,它底层使用 BuildKit 扩展了 Docker 的构建功能。Buildx 不仅保留了标准 docker build 的所有功能,还加入了一些强大的新特性,如多平台构建、构建缓存优化、多阶段构建支持等。具体如下:
-
多平台构建:
Buildx 支持在单个命令中为多个平台构建 Docker 镜像,如同时构建适用于 Windows、Linux 和 ARM 架构的镜像。这大大提高了开发效率,减少了手动操作的复杂性。 -
构建缓存:
Buildx 支持高级构建缓存机制,能够显著加快重复构建的速度。它智能地利用缓存来避免不必要的重新构建步骤,从而节省时间和资源。 -
多阶段构建:
Buildx 支持 Dockerfile 的多阶段构建,允许开发者在单个 Dockerfile 中定义多个构建阶段,每个阶段都可以使用不同的基础镜像和配置。这有助于优化镜像大小和提高构建效率。 -
构建策略:
用户可以根据需求定义构建策略,例如选择不同的构建环境、镜像源等。这为开发者提供了更灵活的构建选项,以满足不同的构建需求。 -
并发构建:
Buildx 可以并行构建多个镜像层,提高构建效率。这对于包含多个依赖项或复杂构建步骤的大型项目尤其有用。
🦀 安装与使用
1️⃣ 安装Buildx
在 Docker 19.03 及更高版本中,Buildx 通常已经内置,只需要对/etc/docker/deamon.json
进行配置并重启Docker即可。
{
"experimental"
:
"enabled"
}
对于旧版本的 Docker,请在文末获取二进制包后安装下面的方法进行配置:
首先将下载下来的文件重命名,复制到相应的位置,见下面的表格
系统 | 文件名 | 保存位置 |
---|---|---|
Linux | docker-buildx | $HOME/.docker/cli-plugins |
macOS | docker-buildx | $HOME/.docker/cli-plugins |
Windows | docker-buildx.ext | %USERPROFILE%.dockercli-plugins |
记得给予执行权限哦:$ chmod +x ~/.docker/cli-plugins/docker-buildx
。除了复制到上面表格中的位置,也可以复制到以下位置:
Linux和macOS:
- /usr/local/lib/docker/cli-plugins 或 /usr/local/libexec/docker/cli-plugins
- /usr/lib/docker/cli-plugins 或 /usr/libexec/docker/cli-plugins
Windows:
- C:ProgramDataDockercli-plugins
- C:Program FilesDockercli-plugins
然后在终端中执行下面命令,可以看到输出了版本号和当前已经安装的构建器,就算正常了。
docker
buildx version
docker
buildx
ls
2️⃣ 使用Buildx
Buildx默认已经包含一个名为default
的构建器,我们也可以自己创建一个:
# 创建一个名为mybuilder的构建器
docker
buildx create
--use
--name
mybuilder
如何使用这个构建器构建镜像呢?很简单,在终端中切换到需要构建的项目中(需要提前写好Dockerfile),然后执行下面命令即可:
docker
buildx build
--builder
mybuildx
-t
fooololo/it-tools:latest
--platform
linux/amd64,linux/arm64
--push
.
- docker buildx build,表示使用buildx构建
- --builder mybuildx,指定buildx的构建器
- -t fooololo/it-tools:latest,为镜像指定名称和标签
- --platform linux/amd64,linux/arm64 ,指定构建镜像的目标平台。在这个例子中,镜像将被构建为适用于amd64和arm64两种架构,当然也可以指定更多,用逗号分隔
- --push,在构建完成后,将镜像推送到 Docker 仓库
- . 表示 Dockerfile 所在的上下文目录
下图可以看到,镜像推送到Dockerhub后,显示支持amd64和arm64两种架构。当你在pull这个镜像时,Docker会自动根据当前宿主机的架构情况拉取相应的层。
3️⃣ Buildx支持的架构
Buildx支持构建以下类型的镜像,当你一次需要构建的架构越多,构建需要花费的时间也就越长,大家在使用的时候还是要合理选择,一般来说linux/arm64和linux/amd64是主流,其他的架构量力而行。
- linux/arm64
- linux/amd64
- linux/amd64/v2
- linux/riscv64
- linux/ppc64le
- linux/s390x
- linux/386
- linux/mips64le
- linux/mips64
- linux/arm/v7
- linux/arm/v6
4️⃣ 设置为docker build 默认使用Buildx
为了日常操作方便,我们也可以将docker build
命令默认替换为使用Buildx,只需要输入下面命令即可:
docker
buildx
install
如果要取消这个替换,使用下面命令:
docker
buildx uninstall
⏬ 获取Buildx
最后,笔者也整理了桌面版的Buildx
,需要的话可以在笔者公众号私信【Buildx】即可快速获取下载链接,打开链接后根据自己的平台下载即可。
原文始发于微信公众号(高等精灵实验室):使用Docker Buildx 轻松构建跨平台镜像
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论