一台docker机器如何实现构建多平台镜像

1.实现方式

      想在 x86_64/amd64 的一台机器平台上,构建适用于多个平台的镜像,例如 linux/amd64、linux/arm64,根据官方文档,有三种方法可以使用:

QEMU
  使用 QEMU 模拟构建多平台映像是最简单的入门方法,但可能比本机构建慢得多,特别是对于编译、压缩或解压缩等计算量大的任务。因此如果条件允许的话,更推荐使用 Cross-compilation(交叉编译)。


Multiple native nodes
  使用多个本机节点可以为 QEMU 无法处理的更复杂的情况提供更好的支持,并且通常具有更好的性能。


Cross-compilation
  交叉编译使多平台构建速度更快、用途更广泛,但必须要有相对应的编译器。
 

注意:QEMU 使用起来最简单,所以我们在x86_64平台上构建arm64镜像并运行容器时使用这种方式。

2.QEMU方式实现

如果是Docker Desktop ,可能已经预配置了 binfmt_misc 对其他平台的支持, 但对于其他版本 Docker, 你可能需要使用 tonistiigi/binfmt 镜像启动一个特权容器来进行支持,如果您的节点已经支持 QEMU(例如,如果您正在使用 Docker Desktop),QEMU 是最简单的入门方式。它不需要更改您的 Dockerfile,BuildKit 会自动检测可用的辅助架构。当 BuildKit 需要运行不同架构的二进制文件时,它会自动通过binfmt_misc 处理程序中注册的二进制文件加载它:

docker run --privileged --rm tonistiigi/binfmt --install all

使用docker buildx ls查看,如下已经支持: 

docker buildx ls
NAME/NODE       DRIVER/ENDPOINT STATUS  BUILDKIT PLATFORMS
default *       dockerdefault       default         running 20.10.21 linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
desktop-linux   dockerdesktop-linux desktop-linux   running 20.10.21 linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

当然这里有一个比较重要的一点:

binfmt_misc为了使在主机操作系统上注册的 QEMU 二进制文件能够在容器内透明地工作,必须使用fix_binary 标志进行注册。这需要内核 >= 4.8 和 binfmt-support >= 2.1.7。您可以通过检查F中的标志 是否正确来检查注册是否正确/proc/sys/fs/binfmt_misc/qemu-*。虽然 Docker Desktop 预先配置了binfmt_misc对其他平台的支持,但对于其他安装,可能需要使用映像进行安装tonistiigi/binfmt 。

 3.builder的使用

可以使用默认的builder,也可以创建builder,默认的就是上边docker buildx ls中看到的,可以这样创建builder:

docker buildx create --name mybuilder

启动builder:

docker buildx inspect --bootstrap mybuilder

 4.构建不同平台镜像

如下构建多平台镜像就可以

docker buildx build --platform linux/arm64,linux/amd64 -t test/aa:v1 .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/41933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端面试题13(API请求方法)

在前端JavaScript中,进行API请求主要可以通过几种方式来实现,最常见的是使用XMLHttpRequest(较旧的方法)、fetch(现代浏览器推荐方法)以及使用第三方库如axios或jQuery.ajax等。 1. XMLHttpRequest 这是最…

仙人掌中的SNMP检测不到服务器

登录有问题的服务器1.检测snmp localhost:~ # ps -ef|grep snmp root 55180 1 0 08:37 ? 00:00:08 /usr/sbin/snmpd -r -A -LF n /var/log/net-snmpd.log -p /var/run/snmpd.pid root 58436 53989 0 09:44 pts/0 00:00:00 grep --colorauto snmp2.检测…

linux 编译perf 工具

centos7下编译步骤: wget https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.10.tar.gz tar -xf linux-3.10.tar.gz cd linux-3.10/tools/ yum install -y flex bison python2-devel make perf ./perf/perf top -d 1…

昇思第10天

RNN实现情感分类 二分类问题:Positive和Negative两类 步骤: 1.加载IMDB数据集 2.加载预训练词向量:预训练词向量是对输入单词的数值化表示,通过nn.Embedding层,采用查表的方式,输入单词对应词表中的index,…

【算法专题】模拟算法题

模拟算法题往往不涉及复杂的数据结构或算法,而是侧重于对特定情景的代码实现,关键在于理解题目所描述的情境,并能够将其转化为代码逻辑。所以我们在处理这种类型的题目时,最好要现在演草纸上把情况理清楚,再动手编写代…

FreeRTOS——队列集

一、队列集 一个队列只允许任务间传递的消息为 同一种数据类型 ,如果需要在任务间 传递不同数据类型的消息 时,那么就可以使用队列集 作用:用于对多个队列或信号量进行“监听”(接收或获取),其中 不管哪一…

js 使用 lodash-es 检测某个值是否是函数

import { isFunction } from lodash-eslet isA isFunction(() > {}) console.log(isA) //true https://www.lodashjs.com/docs/lodash.isFunction#_isfunctionvalue https://lodash.com/docs/4.17.15#isFunction 人工智能学习网站 https://chat.xutongbao.top

Spring框架配置进阶_自动装配(XML和注解)

Spring配置进阶 Spring 容器提供配置元数据有三种方式 XML配置文件。基于注解的配置。基于java的配置。 一、自动装配 应用程序上下文为你找出依赖项的过程,Spring会在上下文中自动查找,并自动给bean装配与其关联的属性 Spring中实现自动装配的方式有两种: XML文…

26-ARM常用汇编指令

汇编格式: label:instruction comment label:标号instruction:具体汇编指令comment:注释内容 常用段名: .text:代码段.data:初始化的数据段.bss:未初始化的数据段.ro…

Spring Boot+Vue项目从零入手

Spring BootVue项目从零入手 一、前期准备 在搭建spring bootvue项目前,我们首先要准备好开发环境,所需相关环境和软件如下: 1、node.js 检测安装成功的方法:node -v 2、vue 检测安装成功的方法:vue -V 3、Visu…

JSP WEB开发(一) JSP语言基础

目录 JSP JSP简介: JSP页面 JSP运行原理 JSP脚本元素 JAVA程序片 局部变量 全局变量和方法的声明 全局变量 方法的声明 程序片执行特点 synchronized关键字 表达式 JSP指令标记 page指令 include指令 JSP动作标记 JSP动作元素include和include指令的…

Docker在人工智能领域的应用与实战

摘要 人工智能(AI)技术的快速发展带来了对高效开发和部署工具的需求。Docker作为一个创新的容器化平台,为AI领域提供了强大的支持。本文详细介绍了Docker在AI模型开发、训练、部署以及服务器集群管理等方面的应用,并探讨了其在数…

AcWing 1550:完全二叉搜索树

【题目来源】https://www.acwing.com/problem/content/1552/【题目描述】二叉搜索树 (BST) 递归定义为具有以下属性的二叉树: (1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值 (2)若它的右…

大数据平台之数据同步

数据同步也成为CDC (Chanage Data Capture) 。Change Data Capture (CDC) 是一种用于跟踪和捕获数据库中数据变更的技术,它可以在数据发生变化时实时地将这些变更捕获并传递到下游系统。以下是一些常用的开源 CDC 方案: 1. Flink CDC Flink CDC 是基于 …

快速上手LangChain:构建强大的语言模型应用

引言 在人工智能和自然语言处理(NLP)领域,构建高效且强大的语言模型应用变得越来越重要。LangChain 是一个专为开发者设计的框架,它简化了语言模型应用的构建流程。本文将详细介绍LangChain的功能和使用方法,帮助读者…

76 4G模组 境外拨号入网注意

1 引言 最近朋友把国内的设备拿到新加坡了,然后发现原本国内可以使用的设备无法在异国他乡联网,所以就叫我来看看,发现是附网返回状态、入网APN发生了改变导致的。另外,如果在境外使用国产4G模组拨号入网,也需要关注4G…

Windows安装超好用的截图工具——Snipaste

1、下载 官网:https://zh.snipaste.com/ 2、安装 (1)解压下载的压缩包 (2)选中Snipaste.exe文件,右键发送到 -- > 桌面快捷方式 (3)双击桌面Snipaste图标,桌面右下…

linux 服务器数据备份 和 mysql 数据迁移

查看域名ip 查看程序所处文件位置 list open files 1、 lsof -i :port 查看端口获取进程 pid 2、lsof -i pid 1、scp 下载服务器文件到本地 security copy protocol 2、导出服务器 mysql 数据库(表)到本地 mysqldump是MySQL自带的一个实用程序&…

解析Java中1000个常用类:Date类,你学会了吗?

在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。程序员资料站 推荐一个程序员编程资料站:程序员的成长之路(http://cxyroad.com),收录了一些列的技术教程…

Git 完整的提交规范教程

约定式提交规范 本文中的关键词 “必须(MUST)”、“禁止(MUST NOT)”、“必要(REQUIRED)”、“应当(SHALL)”、“不应当(SHALL NOT)”、“应该(S…