千家信息网

Docker buildx如何构建多平台镜像并推送到私有仓库

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家分享的是有关Docker buildx如何构建多平台镜像并推送到私有仓库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。引子最近发现有ARM版Docker,hu
千家信息网最后更新 2026年11月02日Docker buildx如何构建多平台镜像并推送到私有仓库

这篇文章给大家分享的是有关Docker buildx如何构建多平台镜像并推送到私有仓库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

引子

最近发现有ARM版Docker,hub.docker.com上也有ARM版本的镜像,但是ARM版本的Docker镜像构建是个问题。嵌入式程序可以在PC机上进行交叉编译,不知道Docker是否有交叉构建的方案。

方案

目前想到的Docker构建ARM镜像方法有如下几种。第三种就类似交叉编译。

  1. 使用ARM主机,安装ARM版本的Docker,docker build出来的就是ARM版本的镜像。

  2. 使用Linux的虚拟化软件,模拟ARM芯片+ Linux,例如qemu。

  3. 使用Docker试验功能buildx,可以构建多平台的镜像。

使用Docker buildx构建多个平台镜像

参考如下几个链接。
https://docs.docker.com/engine/reference/commandline/manifest/
https://docs.docker.com/buildx/working-with-buildx/
https://engineering.docker.com/2019/06/getting-started-with-docker-for-arm-on-linux/

用到了两个docker的试验功能,使用时需要开启试验功能。

docker manifest,manifest是一个包含了镜像信息的文件。manifest list是一个镜像清单列表,用于存放不同os/arch的镜像信息。我们可以创建一个manifest list来指向两个镜像,然后可以支持多平台。

docker buildx,buildx是docker的一个插件,是下一代docker镜像构建。该插件通过qemu-user-static翻译不同平台的指令集,达到在x64上运行其他平台的程序。buildx实际使用了moby/buildkit:buildx-stable-1镜像进行多平台构建。

搭建docker registry多平台版本

参考如下链接,构建docker registry镜像。
https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/posts/deploying-multi-architecture-docker-registry

搭建dns服务器,解决buildx bug

buildx插件不走本地hosts文件,必须走dns。这是个bug,https://github.com/docker/buildx/issues/218,社区也没人管。
解决方法:自建dns,把镜像的地址buildx.com指向registry的机器,后续用nginx。ubuntu有一个默认systemd-resolved,关闭之后在开启dnsmasq。

使用nginx代理解决命名问题

增加nginx代理同时支持HTTP和HTTPS。buildx这个插件强行使用了HTTPS,没有找到关闭的地方。
提示证书问题,证书不是这个域名的,解决方法: 重新生成一个证书,域名填自己的。
证书问题,不信任自签名证书,把自签名的证书加到buildx daemon容器的证书信任链中。https://github.com/docker/buildx/issues/80#issuecomment-533844117

nginx增加两个配置,解决客户端push时的几个问题。

# nignx.conf 配置proxy_ignore_client_abort on; #忽略客户端告警client_max_body_size 0;  #上传文件大小不限制# 虚拟主机配置server {  listen 443;  server_name buildx.com;  ssl on;  ssl_certificate crt/server.crt;  ssl_certificate_key crt/server.key;  ssl_session_timeout 5m;  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置  ssl_prefer_server_ciphers on;  location / {    proxy_pass http://192.168.1.11:81;  }}server {  listen 80;  server_name buildx.com;  location / {    proxy_pass http://192.168.1.11:81;  }}

设置本地Docker环境

本地Docker需要开启实验功能。

  1. 在/etc/docker/daemon.json中配置 "experimental": true,重启Docker。开启Docker daemon的实验功能。

  2. 在本地执行export DOCKER_CLI_EXPERIMENTAL=enabled,开启Docker Client的实验功能。

  3. 使用docker version查看实验功能是否开启。

  4. 执行docker run --rm --privileged docker/binfmt:820fdd95a9972a5308930a2bdfb8573dd4447ad3,开启内核binfmt_misc功能,可以在当前平台上执行多平台的程序。

  5. 查看是否支持aarch74程序。cat /proc/sys/fs/binfmt_misc/qemu-aarch74

  6. 此时本地的docker可以运行各种平台的docker容器。比如arm64。可以使用如下命令测试。

# 拉取arm64版本镜像并运行docker pull --platform arm64 alpine:3.10docker run --rm -it alpine:3.10 sh

制作基础镜像

可以从hub.docker.com中获取多个平台的版本,生成manifest list,上传的registry中。

# pull arm64版本、改名、上传。 具体镜像是否支持多平台,可以到hub.docker.com上看。docker pull --platform arm64 centos:7docker tag centos:7 buildx.com/base/centos-arm64:7docker push buildx.com/base/centos-arm64:7# pull amd64版本、改名、上传docker pull --platform amd64 centos:7docker tag centos:7 buildx.com/base/centos-amd64:7docker push buildx.com/base/centos-amd64:7# 创建manifest list、上传。docker manifest create --insecure buildx.com/base/centos:7 buildx.com/base/centos-amd64:7 buildx.com/base/centos-arm64:7docker manifest push --insecure buildx.com/base/centos:7

构建业务镜像

# buildx 可以指定多个平台,但是要求Dockerfile中的FROM镜像必须有对应版本的。# buildx 打包的镜像不会在本地存储,加--push,上传docker仓。或者可以使用--output指定输出方式。docker buildx build --platform linux/amd64,linux/arm64 -t buildx.com/base/java-base:openjdk-8-centos7 . --push

感谢各位的阅读!关于"Docker buildx如何构建多平台镜像并推送到私有仓库"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

镜像 平台 版本 功能 证书 配置 插件 程序 问题 实验 支持 两个 多个 文件 方法 交叉 参考 试验 运行 仓库 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技园 科技创新与互联网经济 易通互联网络科技有限公司 兼蜜互联网科技 上海万想互联网科技 一五八零互联网科技 互联网科技素材视频竖屏 深圳互联网科技怎么样 互联网公司会议桌创意科技软装饰 现代科技和互联网有关系吗 须眉科技是互联网公司吗 创业天下互联网科技有限公司 团飞科技与伯堂互联网服务平台 宁夏众和广鑫互联网科技有限公司 赶超互联网科技 微信多开 苏州铭阳互联网科技有限公司 梅州GM互联网络科技有限公司 互联网科技和医药行业 广西泛欧互联网科技有限公司 宁波允成互联网科技有限公司 互联网与科技发展 互联网与科技金融数据 凡科互联网科技 互联网科技股有哪些 开启互联网科技时代小说 全球顶尖互联网科技公司 荆州市昕露互联网络科技有限公司 用友工业互联网科技发展 银川新华互联网科技学校是国营吗 恒生科技互联网指数十大成分股
0