Buildx 是一款用于通过 BuildKit 扩展构建功能的 Docker CLI 插件,使用 Buildx,我们无需对 Dockerfile 进行任何修改,就可以构建不同 CPU 架构的 Docker 镜像,并支持推送到 Docker Hub,省时、省钱还省力。
注意:在开始之前,默认已经在 Linux 系统(各大发行版)下安装好了 64 位的 Docker,且运行 docker --version
查询的 Docker 版本大于 19.03。
安装 Docker Buildx
(1)使用二进制安装
# 下载二进制文件
wget https://github.com/docker/buildx/releases/download/v0.9.1/buildx-v0.9.1.linux-amd64
# 创建文件夹
mkdir -p $HOME/.docker/cli-plugins
# 移动文件
mv buildx-v0.9.1.linux-amd64 $HOME/.docker/cli-plugins/docker-buildx
# 赋予二进制文件执行权限
chmod +x $HOME/.docker/cli-plugins/docker-buildx
(2)编译二进制文件安装
建议采用编译安装的方式,避免在接下来的过程中出现奇怪的错误。
export DOCKER_BUILDKIT=1
docker build --platform=local -o . "https://github.com/docker/buildx.git"
mkdir -p $HOME/.docker/cli-plugins
mv buildx $HOME/.docker/cli-plugins/docker-buildx
chmod +x $HOME/.docker/cli-plugins/docker-buildx
启用 Buildx 插件
Docker Buildx 属于实验性功能,在确保 Docker 版本不低于 19.03
,通过执行以下命令开启新特性,以启用 buildx 插件。
export DOCKER_CLI_EXPERIMENTAL=enabled
初始化 Docker Buildx
docker buildx create --name builderx
docker buildx use builderx
docker buildx inspect --bootstrap
启用 binfmt_misc
如果你使用的是 Docker 桌面版(包含 macOS 和 Windows)默认已启用,而对于 Linux 系统,可通过运行一个特权容器来启用 binfmt_misc
docker run --privileged --rm tonistiigi/binfmt --install all
验证是 binfmt_misc 否开启:
ls -al /proc/sys/fs/binfmt_misc/
buildx 会通过 QEMU 模拟器和 binfmt_misc 模拟不同平台构建镜像,请查看是否包含 qemu-*
文件,如下:
total 0
drwxr-xr-x 2 root root 0 Oct 22 00:50 .
dr-xr-xr-x 1 root root 0 Oct 9 15:02 ..
-rw-r--r-- 1 root root 0 Oct 22 00:50 qemu-aarch64
-rw-r--r-- 1 root root 0 Oct 22 00:50 qemu-arm
-rw-r--r-- 1 root root 0 Oct 22 00:50 qemu-ppc64le
-rw-r--r-- 1 root root 0 Oct 22 00:50 qemu-s390x
--w------- 1 root root 0 Oct 22 00:50 register
-rw-r--r-- 1 root root 0 Oct 22 00:50 status
构建多平台镜像
可提前通过 docker login
命令登录 Docker Hub,在完成构建多平台镜像后,会同时推送镜像至 Docker Hub。
安装并启用后,我们就可以使用 Docker Buildx 来构建多平台镜像了,以往我们进行构建镜像的命令:
build -t ${IMAGE_NAME}:${VERSION} .
使用 Docker Buildx
体验上与 docker build
用法基本相同,构建多平台的命令为:
docker buildx build --platform=linux/amd64,linux/arm/v7,linux/arm64/v8 -t ${IMAGE_NAME}:${VERSION} . --push
--platform
:指定需要构建的平台,例如:linux/amd64
、linux/arm64
或darwin/amd64
;--push
:指构建完毕后自动推送到 Docker hub 仓库;-t
:镜像的名称及 tag;.
:表示Dockerfile
文件位于当前路径下。
如上图,Docker 镜像完成构建、推送后,我们可以在 Docker Hub 找到对应镜像的 tag 就可以看到支持多个平台。
相关推荐
- 群晖 Synology 部署 Bitwarden 密码管理器
- 在群晖 Synology 上搭建 Bark 消息推送服务器
- Dozzle - docker 容器实时日志查看器
- Send - 自建临时文件分享平台
- WallaBag - 开源网络书签、稍后阅读工具
- DIUN:一款友好的 Docker 镜像更新通知程序
文章作者:喵斯基部落
原文地址:https://www.moewah.com/archives/5125.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。