信创化浪潮下的ARM镜像构建指南

news/2024/11/8 10:26:19/文章来源:https://www.cnblogs.com/zhoutuo/p/18534581

前言:在当今科技蓬勃发展的浪潮中,有一股神秘的力量如同幕后的巨擘,强力推动着信创化的进程。这股力量恰似一只无形却力大无穷的巨手,其影响范围广泛,涵盖了从操作系统、形形色色的中间件、数据库,一直到容器平台等诸多领域。
伴随着技术架构的深刻变革,docker 镜像也迎来了关键的转型 —— 从 x86 (amd) 向 arm 架构转变,相关详情可参考下图。
需要特别注意的是,国产 XC 容器平台和主流的 k8s 容器平台相比,在功能按钮上存在一些细微的差异。在此,我精心编撰了一篇操作文档,详细阐述了在生产环境中 XC 容器平台从镜像构建开始,一直到将其推送进 XC 镜像仓库并成功运行的完整流程。然而,受当前 XC 相关资料的局限,这里暂时只能向大家展示构建 ARM 镜像包的操作步骤,无法将 XC 容器平台的所有操作内容毫无保留地呈现出来,期待后续有合适契机再为大家展示完整内容以供参考。

文章主要介绍了ARM架构Docker镜像构建相关操作,包括在ARM机器上安装Docker以及在不同场景下构建ARM版本镜像的方法,具体如下:

  1. ARM机器上安装Docker(以麒麟V10系统为例)
    • 查看系统信息:通过cat /proc/version确定系统基于ubuntu16.04(xenial)。
    • 添加软件源
      • 参考清华镜像站帮助文档,添加arm架构的清华镜像软件源到/etc/apt/sources.list文件。
      • 执行sudo apt-get install apt-transport-httpssudo apt-get cleansudo apt-get update命令。
    • 安装Docker
      • 卸载旧版本docker相关组件。
      • 安装apt-transport-httpsca-certificatescurlgnupg-agentsoftware-properties-common
      • 添加Docker官方GPG Key并确认添加成功。
      • 编辑/etc/apt/source.list,添加docker软件源(arm64 xenial)。
      • 执行sudo apt-get update,然后安装docker-cedocker-ce-clicontainerd.io,最后通过docker --version查看版本。
  2. ARM版本镜像构建(非ARM机器上执行,使用buildx交叉构建)
    • 启用试验性功能(仅支持docker19.03及以上版本)
      • 编辑/etc/docker/daemon.json,添加{"experimental": true}
      • 编辑~/.docker/config.json,添加"experimental": "enabled"
      • 执行sudo systemctl daemon-reloadsudo systemctl restart docker,通过docker version -f '{{.Server.Experimental}}'确认是否开启成功。
    • 创建buildx构建器
      • 使用docker buildx ls查看现有构建器。
      • 选择以下方式之一创建构建器:
        • 不指定参数创建:docker buildx create --use --name multiarch-builder
        • 若构建器无arm架构支持,明确指定要支持的构建类型:docker buildx create --platform linux/arm64,linux/arm/v7,linux/arm/v6 --name multiarch-builder
        • 若需在buildx访问私有registry,使用host模式并指定配置文件:docker buildx create --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 --driver-opt network=host --config=/Users/hanlyjiang/.docker/buildx-config.toml --use --name multiarch-builder(其中buildx-config.toml为配置文件,需按格式编写)。
    • 启用构建器:执行docker buildx inspect multiarch-builder --bootstrap初始化并激活构建器,然后使用docker buildx ls查看是否成功。
    • 修改Dockerfile
      • 确认基础镜像(FROM)是否有arm版本,无则寻找替代或自行编译。
      • 检查Dockerfile各步骤中是否有依赖CPU架构的内容,如有则替换为arm架构对应的内容(如软件下载地址中的amd64替换为aarch64等,需先确认有对应架构的归档包)。
    • 使用buildx构建arm64镜像:执行docker buildx build --platform=linux/arm64,linux/amd64 -t xxxx:tag. --push(指定多个架构时只能使用--push推送到远程仓库,推送成功后通过docker pull --platform拉取指定架构镜像)。
    • 检查构建成果
      • 通过docker buildx imagetools inspect查看镜像信息,确认是否有arm架构信息。
      • 在arm机器上实际运行镜像,确认运行正常(若运行时报exec format error类似错误,表示镜像中部分可执行文件架构不匹配)。
  3. 在x86上运行arm镜像(需安装qemu-user-static):执行docker run --rm --privileged multiarch/qemu-user-static --reset -p yes安装,之后可运行arm版本镜像,如docker run --rm -t arm64v8/fedora uname -m


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

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

相关文章

export、import、default、as 命令的一个综合性案例

a.js // a.js let a = 1; let b = 2; let c = 3;// export { a, b, }// 方法一 // export default c;export { a,b,c as default}// 方法二,不可export2个default可以export 多次,b.js // b.js // import { a, b, default as c } from ./a.js // console.log(a,b,c);// 等价于…

开源分析和落地方案—Sentinel篇

作者:京东物流 刘达一、Sentinel是什么? Sentinel是从阿里技术体系内诞生并由相关社区从微服务到云原生阶段持续孵化的流量治理组件,在服务熔断限流以及秒级/分钟级监控方面提供了开箱即用的解决方案,此外作为支持云原生的重要探索,还提供了GO语言实现。Sentinel目前拥有着…

基于XAML框架和跨平台项目架构设计的深入技术分析

深入探讨基于XAML的各种平台、跨平台战略以及为有效的项目架构设计所需的核心技术XAML平台和跨平台开发策略 本文基于Vicky&James 2024年10月22日在韩国Microsoft总部BMW meetup会议上的演讲内容重新整理而成。这次研讨会我们深入探讨了基于XAML的各种平台、跨平台战略以及…

MCGS_MQTT_STD新建设备变量批次导入

在阿里云物联网添加新设备,我比如我这里添加DK0111先导出标准的连接变量,文件名为 MQTT_STD标准参数.csv触摸屏MQTT_STD配置。发布和订阅主题修改导出新建的设备的连接参数打开标准的连接参数和新建项目的连接参数(.CSV文件),并将标准的连接参数里面的变量名复制到新建项目…

echarts 的使用

官网地址 https://echarts.apache.org/handbook/zh/concepts/dataset 要配合打在echarts Api进行查看,api地址如下: https://echarts.apache.org/zh/option.html#title 使用步骤一:引入echarts 1、设置dom标签的宽度和高度 2、调用echarts.init方法初始化echarts注:在vue中获…

LeetCode 2535[数组元素和与数字和的绝对差值]

LeetCode 2535[数组元素和与数字和的绝对差值]题目 链接 LeetCode 2535[数组元素和与数字和的绝对差值] 详情实例提示题解 思路 遍历容器,依次求出数字和与元素和,然后求差值: 通过 getSun 函数,求取元素的数字和 getSun 函数的实现:将其对10取余操作,获取的余数即为当前…

DearPyGui学习

1.所有DPG应用程序必须做3件事: 创建和销毁上下文 (create_context) 创建和显示视区 (create_viewport、show_viewport) 设置和启动DearPyGui (start_dearpygui) #基本顺序 dpg.create_context() dpg.create_viewport() dpg.setup_dearpygui()dpg.show_viewport() dpg.start_d…

服务器是Ubuntu20.04,安装Colmap

就下这一个东西,遇到的错误简直数不清,在这吐槽一下!顺便,分享一个最终成功的教程!!(虽然可能是玄学~) 附上我跟着一步一步来最终下好的教程链接,亲测好用!!! https://blog.csdn.net/weixin_44172157/article/details/122203759 其实中途还是发现了一个错误!和之前…

Html5QRCode扫描条形码+二维码

代码:<html> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>…

(三)死锁检测和解除

(三)死锁检测和解除 ‍ ​​ ‍(1)死锁的检测 ​​ 理解:在这个图中,以 P2 和 R1 间的箭头为例,表明实际上 P2 请求了两个 R1 资源,但 R1 只给他分配了1个资源。 ‍ 重点:最后能将边全部消除,则没有死锁发生。否则,仍然有边连着且消除不掉的进程则发生了死锁。(可完…

Microsoft Office 2019 (office全家桶)for Mac/Windows电脑安装包

Microsoft Office 2019 for Mac(Office全家桶)是一款功能全面且强大的办公软件套件,专为Mac用户设计。Mac苹果电脑下载:Office 2019 (含激活秘钥) Windows电脑下载:Office 2019(含批量许可) 以下是其主要特点和优势:一、界面设计采用了Mac系统的设计风格,界面简洁大方…

大模型-大模型-架构设计-6种设计模式-09

目录1. 路由分发架构模式2. 代理架构模式3. 基于缓存的微调架构模式4.面向目标的 Agent 架构模式5. Agent 智能体组合架构模式6. 双重安全架构设计模式 架构设计模式已成为程序员的重要技能。然而,当我们转向大模型应用领域,情况可能会有所不同。面对新兴技术,比如:生成式 …