使用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 就可以看到支持多个平台。

支持与分享

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

赞助
使用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
GhostVM:给 AI Agent 一个完整的 Mac,而不是容器!
虚拟化与运维 介绍 GhostVM——基于 Apple Virtualization.framework 的 macOS 虚拟机工具。支持近原生性能、自包含 bundle、秒级克隆,提供完整的 CLI (vmctl) 覆盖 GUI 功能,适合 AI agent 隔离环境和多项目开发者。
3
纳瓦尔的人生智慧:关于财富、幸福与自由的 18 条原则
认知与成长 硅谷投资人纳瓦尔·拉维坎特的人生洞见浓缩:从财富创造、幸福修炼到心智模型,18 条可执行原则帮你在长期主义中找到自由。
4
AI搜索吃掉一半流量?2026 你必须调整的内容推广方法
增长与SEO 2026年AI搜索覆盖48%查询,传统社群转发式推广失效。梳理五个按意图优先级排列的分发渠道——GEO优化、Reddit投放、战略合作、员工倡导、直接外联——附带推广时间线和内容再创作框架。
5
有了 tmux 还需要 herdr 吗?一个给 AI Agent 用的「终端管家」
AI实验室 herdr 是一个终端原生的 Agent 多路复用器,专为同时运行多个 AI Agent 的开发者设计。它解决了 Agent 管理混乱、会话丢失、远程协作等痛点,不替换终端、不依赖 Electron。本文从实际使用体验出发,带你了解它的核心功能和上手方法。
随机文章 随机推荐

评论区

Profile Image of the Author
MoeWah
Hello, I'm MoeWah.
专题文章
分类
站点统计
文章
198
分类
9
标签
434
总字数
373,761
运行时长
0
最后活动
0 天前

目录