使用Buildx构建多架构Docker镜像全流程

653 字
3 分钟
使用Buildx构建多架构Docker镜像全流程

Buildx 是一款用于通过 BuildKit 扩展构建功能的 Docker CLI 插件,使用 Buildx,我们无需对 Dockerfile 进行任何修改,就可以构建不同 CPU 架构的 Docker 镜像,并支持推送到 Docker Hub,省时、省钱还省力。

BuildKit.jpg
BuildKit.jpg

注意:在开始之前,默认已经在 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 来构建多平台镜像了,以往我们进行构建镜像的命令:

Terminal window
build -t ${IMAGE_NAME}:${VERSION} .

使用 Docker Buildx 体验上与 docker build 用法基本相同,构建多平台的命令为:

Terminal window
docker buildx build --platform linux/amd64,linux/arm64 -t ${IMAGE_NAME}:${VERSION} . --push
  • --platform :指定需要构建的平台,例如:linux/amd64linux/arm64darwin/amd64
  • --push :指构建完毕后自动推送到 Docker hub 仓库;
  • -t :镜像的名称及 tag;
  • . :表示 Dockerfile 文件位于当前路径下。

dockhub.jpg
dockhub.jpg

如上图,Docker 镜像完成构建、推送后,我们可以在 Docker Hub 找到对应镜像的 tag 就可以看到支持多个平台。

微信公众号

搜一搜 IMMOEWAH

技术/人文/思辨/随笔

微信公众号

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
使用Buildx构建多架构Docker镜像全流程
https://blog.moewah.com/posts/5125/
作者
MoeWah
发布于
2022-10-22
许可协议
CC BY-NC-SA 4.0
相关文章 智能推荐
1
Docker必备:Alpine Linux常用命令及用法整理
虚拟化与运维 如何在Docker中高效使用Alpine Linux?本文详细整理了Alpine常用命令及用法,涵盖SSH配置、源管理等核心操作,帮助开发者快速掌握Alpine在Docker中的实战技巧。
2
Ubuntu/Debian 卸载命令全解:apt remove/purge/autoremove 的区别
虚拟化与运维 apt remove、apt purge、apt autoremove 三个卸载命令的区别详解:remove 保留配置、purge 清除配置、autoremove 清理孤儿依赖,附 --simulate 预览技巧与官方文档出处,Ubuntu/Debian 用户避坑指南。
3
Docker Volume 与 Bind Mount 怎么选?区别、性能对比、双向迁移实战
虚拟化与运维 Docker Volume 和 Bind Mount 有什么区别?性能差距大吗?一文讲透数据卷与绑定挂载的管理边界、适用场景与迁移便捷性,附双向转换完整命令:卷迁宿主机目录、目录转数据卷,全部实测可抄。数据库用卷、开发热重载用绑定挂载,自部署选型不再纠结。
4
SSH 终端下 nano/vim 编辑器卡死问题:terminfo 不兼容排查修复
虚拟化与运维 SSH 连接服务器后 nano/vim 打开即卡死、乱码,方向键退格失效,但 ls/cat 正常?根因是 TERM 环境变量与服务器 terminfo 数据库不兼容。本文给出 4 步排查法、TERM=xterm 修复命令与 256 色保留方案。
5
GhostVM:给 AI Agent 一个完整的 Mac,而不是容器!
虚拟化与运维 介绍 GhostVM——基于 Apple Virtualization.framework 的 macOS 虚拟机工具。支持近原生性能、自包含 bundle、秒级克隆,提供完整的 CLI (vmctl) 覆盖 GUI 功能,适合 AI agent 隔离环境和多项目开发者。
随机文章 随机推荐

评论区

Profile Image of the Author

关于作者

MoeWah

我是 MoeWah,喵斯基部落的作者。一个折腾自托管、群晖 NAS、虚拟化运维与 SEO/GEO 实践的独立博主,10 年以上的企业站运维与SEO优化经验,文章来自真实部署与踩坑记录。为自己记录,为同路人分享。
专题
分类
站点统计
文章
205
分类
9
标签
449
总字数
413,918
运行时长
0
最后活动
0 天前

目录