Docker 基于 buildx 构建跨平台镜像
在 x86_64 平台上使用 docker buildx 构建多平台的 docker image
在 Docker 19.03+ 版本中可以使用 docker buildx build 命令使用 BuildKit 构建镜像。该命令支持 --platform 参数可以同时构建支持多种系统架构的 Docker 镜像,大大简化了构建步骤。
安装 buildx,判断当前 docker 环境中是否已有 buildx
# docker --help | grep buildx || echo "Buildx not installed"
如果未安装则通过 buildx releases 页面下载当前操作系统对应的版本,并存放到 $HOME/.docker/cli-plugins 下
# mkdir -p $HOME/.docker/cli-plugins # wget -O $HOME/.docker/cli-plugins/docker-buildx \ https://github.com/docker/buildx/releases/download/v0.7.1/buildx-v0.7.1.linux-amd64 # chmod +x $HOME/.docker/cli-plugins/docker-buildx
注意:Linux/MacOS 需要为二进制文件赋予可执行权限
操作系统 buildx 二进制文件名 存放目录
Linux docker-buildx $HOME/.docker/cli-plugins MacOS docker-buildx $HOME/.docker/cli-plugins Windows docker-buildx.exe %USERPROFILE%.docker\cli-plugins
导入 buildx 后,再次通过 docker --help 查看是否已有 buildx
# docker --help | grep buildx || echo "Buildx not installed" buildx* Docker Buildx (Docker Inc., v0.7.1) # docker buildx version github.com/docker/buildx v0.7.1 05846896d149da05f3d6fd1e7770da187b52a247
构建多平台镜像
为了让在主机操作系统上注册的 QEMU 二进制文件 binfmt_misc 在容器中透明地工作,它们必须静态编译并使用 fix_binary 注册。这需要 kernel >= 4.8 和 binfmt-support >= 2.1.7。您可以通过检查文件 /proc/sys/fs/binfmt_misc/qemu-* 来检查是否正确注册。虽然 Docker Desktop 为其他平台预配置了 binfmt_misc 支持,但对于其他安装,它可能需要使用 Tonistigi/binfmt 镜像进行安装。
# docker run --privileged --rm tonistiigi/binfmt --install all
创建如下 dockerfile 文件
cat dockerfile FROM alpine RUN uname -a > /os.txt CMD cat /os.txt
使用如下命令通过 buildx 构建并推送至仓库
--push 参数表示将构建好的镜像推送到 Docker 仓库
# docker buildx build --platform linux/amd64,linux/arm64 -t tonistiigi/binfmt . --push
验证imagestools
# docker buildx imagetools inspect tonistiigi/binfmt:latest
作者:一毛
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
不管遇到了什么烦心事,都不要自己为难自己;无论今天发生多么糟糕的事,都不应该感到悲伤。记住一句话:越努力,越幸运。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!