经常玩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 可以并行构建多个镜像层,提高构建效率。这对于包含多个依赖项或复杂构建步骤的大型项目尤其有用。
在 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%.docker\cli-plugins |
记得给予执行权限哦:$ chmod +x ~/.docker/cli-plugins/docker-buildx
。除了复制到上面表格中的位置,也可以复制到以下位置:
Linux和macOS:
Windows:
然后在终端中执行下面命令,可以看到输出了版本号和当前已经安装的构建器,就算正常了。
docker buildx version
docker buildx ls
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 .
下图可以看到,镜像推送到Dockerhub后,显示支持amd64和arm64两种架构。当你在pull这个镜像时,Docker会自动根据当前宿主机的架构情况拉取相应的层。
Buildx支持构建以下类型的镜像,当你一次需要构建的架构越多,构建需要花费的时间也就越长,大家在使用的时候还是要合理选择,一般来说linux/arm64和linux/amd64是主流,其他的架构量力而行。
为了日常操作方便,我们也可以将docker build
命令默认替换为使用Buildx,只需要输入下面命令即可:
docker buildx install
如果要取消这个替换,使用下面命令:
docker buildx uninstall
最后,笔者也整理了桌面版的Buildx
,需要的话可以在笔者公众号私信【Buildx】即可快速获取下载链接,打开链接后根据自己的平台下载即可。
原创不易,如果觉得此文对你有帮助,不妨点赞+收藏+关注,你的鼓励是我持续创作的动力!