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

news2024/10/5 14:45:57

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 *       docker
  default       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   docker
  desktop-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.coloradmin.cn/o/1901260.html

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

相关文章

文件、文本阅读与重定向、路径与理解指令——linux指令学习(一)

前言:本节内容标题虽然为指令,但是并不只是讲指令, 更多的是和指令相关的一些原理性的东西。 如果友友只想要查一查某个指令的用法, 很抱歉, 本节不是那种带有字典性质的文章。但是如果友友是想要来学习的,…

记录第一次使用air热更新golang项目

下载 go install github.com/cosmtrek/airlatest 下载时提示: module declares its path as: github.com/air-verse/air but was required as: github.com/cosmtrek/air 此时,需要在go.mod中加上这么一句: replace github.com/cosmtrek/air &…

VitePress美化

参考资料: https://blog.csdn.net/weixin_44803753/article/details/130903396 https://blog.csdn.net/qq_30678861/category_12467776.html 站点信息修改 首页部分的修改基本都在.vitepress/config.mts,这个文件内修改。 title 站点名称 description 描述 top…

轻松快速上手Thekey库,实现数据加密无忧

Thekey的概述: Thekey库是一个Python库,旨在简化数据加密、解密、签名和验证的过程。它提供了一套简洁易用的接口,用于处理各种加密任务,适合需要在应用程序中实现安全数据处理的开发人员. 安装Thekey库 pip install thekey使用Thekey库进行基本加密和解密操作的…

一种一维时间序列信号变化/事件/异常检测方法(MATLAB)

随着工业物联网、大数据和人工智能的发展,传统工业正在向数字化和智能化升级,从而创造了大量的时间序列数据。通过分析这些数据,可以提供准确可靠的信息服务和决策依据,促进制造业的转型升级。工业物联网在传统工业向“工业 4.0”…

Java+ Idea+ Vue产科信息管理系统源码 什么是产科信息管理系统的门诊管理?

Java Idea Vue产科信息管理系统源码 什么是产科信息管理系统的门诊管理? 产科信息管理系统 门诊管理是现代医疗服务的重要组成部分,它借助信息技术手段,对产科门诊的各个环节进行优化和重构,以提高医疗服务效率、提升患者体验、加…

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

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

Qt 基础组件速学 事件过滤器

学习目标:理解事件过滤器 前置环境 运行环境:qt creator 4.12 学习内容和效果演示: Qt 提供了事件过滤器的机制,允许我们在事件到达目标对象之前对事件进行拦截和处理。这在以下情况下非常有用: 全局事件处理: 我们可以在应用程序级别安装一个事件过…

从文本到安全图像:自动提示优化防止不当内容生成

T2I生成技术已经得到了广泛关注,并见证了如GLIDE、Imagen、DALL-E 2、Stable Diffusion等大型生成模型的发展。尽管这些模型能够根据文本描述生成高质量的图像,促进了书籍插图、品牌标识设计、游戏场景创作等多种实际应用,但它们也被恶意用户…

html+js+css做的扫雷

做了个扫雷&#x1f4a3; 88大小 源代码在文章最后 界面 先点击蓝色开局按钮 然后就可以再扫雷的棋盘上玩 0代表该位置没有雷 其他数字代表周围雷的数量 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8&qu…

vue事件参数

事件参数 事件参数可以获取event对象和通过事件传递数据 获取event对象 <template> <buttonclick"addCount">点击</button><p>count is: {{ count }}</p><p>{{ coutent_e }}</p> </template> <script>expor…

go 为什么是抢占式调度

GMP 模型 gmp模型是 golang 中用于调度管理 goroutine 的调度器。 调度器的发展史 在 Go 语言中&#xff0c;Goroutine 早期是没有设计成抢占式的&#xff0c;早期 Goroutine 只有读写、主动让出、锁等操作时才会触发调度切换。 这样有一个严重的问题&#xff0c;就是垃圾回…

AI视频生成技术爆发 引领虚拟数字人产业新潮流

2024年刚开局&#xff0c;先有OpenAI的AI视频生成模型Sora惊艳全网&#xff0c;随后阿里巴巴发布EMO&#xff0c;一张照片音频&#xff0c;就能生成具有生动表情和各种头部姿势、口型完全匹配高保真的人声头像动态视频。 技术的革新不仅为内容创作者打开了新世界的大门&#xf…

Spring Boot基础篇

快速上手 SpringBoot是由Pivotal团队提高的全新框架&#xff0c;其设计目的是用来简化Spring应用的初始化搭建以及开发过程 入门案例 在Idea创建 创建时要选择Spring Initializr。 Server URL为要连接的网站&#xff0c;默认为官网start.spring.io&#xff08;访问速度慢&…

为什么建议 MySQL 数据库字段一定要设置 NOT NULL

1. 前言 建议 MySQL 数据库字段一定要设置 NOT NULL 这句建议你可能听好多人讲过&#xff0c;但是有没有仔细想过为什么别人这么说 &#xff1f; 在实际开发中&#xff0c;对使不使用 not null 很多人并没有一个明确的标准&#xff0c;要知道某个字段需不需要添加 not null&a…

【MYSQL】事务隔离级别以及InnerDB底层实现

事务隔离级别 读未提交&#xff08;Read Uncommitted&#xff09; 允许事务读取其他事务未提交的数据&#xff0c;可能会导致脏读。 读已提交&#xff08;Read Committed&#xff09; 一个事务只能看见已经提交的事务所做的更改&#xff0c;可以避免脏读&#xff0c;但可能…

基于CLIP特征的多模态大模型中的视觉短板问题

【论文极速读】 基于CLIP特征的多模态大模型中的视觉短板问题 FesianXu 20240706 at Tencent WeChat search team 前言 今天读到篇CVPR 24’的论文 [1]&#xff0c;讨论了常见的多模态大模型&#xff08;大多都基于CLIP语义特征&#xff0c;以下简称为MLLM&#xff09;中的视觉…

阿里云服务器配置、搭建(针对Spring boot和MySQL项目)

这是一篇极其详细且痛苦的文章&#xff0c;还是在两位后端的大佬手把手教导下、以及我找遍全网所有资料、问了N遍AI、甚至直接申请阿里云工单一对一询问客服一整天、连续清空再上传反复30多次整个项目jar包......总结出来的终极要人命踩坑的问题总结 一、首先购买服务器 其实不…

Apache Seata分布式事务及其三种模式详解

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Apache Seata分布式事务及其三种模式详解 分布式事务 Seata 及其三种模式详解 | Meetup#3 回顾…

基于TCP的在线词典系统(分阶段实现)

1.功能说明 一共四个功能&#xff1a; 注册 登录 查询单词 查询历史记录 单词和解释保存在文件中&#xff0c;单词和解释只占一行, 一行最多300个字节&#xff0c;单词和解释之间至少有一个空格。 2.功能演示 3、分阶段完成各个功能 3.1 完成服务器和客户端的连接 servic…