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

前言:在当今科技蓬勃发展的浪潮中,有一股神秘的力量如同幕后的巨擘,强力推动着信创化的进程。这股力量恰似一只无形却力大无穷的巨手,其影响范围广泛,涵盖了从操作系统、形形色色的中间件、数据库,一直到容器平台等诸多领域。
伴随着技术架构的深刻变革,docker 镜像也迎来了关键的转型 ------ 从 x86 (amd) 向 arm 架构转变,相关详情可参考下图。
需要特别注意的是,国产 XC 容器平台和主流的 k8s 容器平台相比,在功能按钮上存在一些细微的差异。在此,我精心编撰了一篇操作文档,详细阐述了在生产环境中 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


相关推荐
荣世蓥2 小时前
6. ARM_ARM指令寻址
linux·运维·arm开发
景天科技苑3 小时前
【云原生开发】k8s后台管理系统开发接口优化方案
云原生·golang·k8s二次开发·云原生开发·接口优化
TeYiToKu5 小时前
笔记整理—linux驱动开发部分(12)I2C总线与触摸屏设备
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件
Databuff10 小时前
OpenTelemetry 赋能DevOps流程的可观测性革命
运维·云原生·性能优化·devops·opentelemetry
低调沉稳11 小时前
k8s1.21.1 etcd服务备份恢复
容器·kubernetes·etcd
linweidong13 小时前
芯原科技嵌入式面试题及参考答案
arm开发·科技·stm32·单片机·电路设计·蓝牙协议·嵌入式offer
水宝的滚动歌词1 天前
K8S单节点部署及集群部署
云原生·容器·kubernetes
yohoo菜鸟1 天前
kubernetes简单入门实战
云原生·容器·kubernetes
子朔不言1 天前
[ARM-2D 专题]6.脏矩形定义的宏使用技巧和分析
c语言·arm开发·arm2d·显控开发-新龙微