信创化浪潮下的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


相关推荐
MaCa .BaKa34 分钟前
35-疫苗预约管理系统(微服务)
spring boot·redis·微服务·云原生·架构·springcloud
阿里云云原生4 小时前
SAE 实现应用发布全过程可观测
云原生
Ares-Wang6 小时前
kubernetes》》k8s》》Heml
云原生·容器·kubernetes
阿里云大数据AI技术6 小时前
千万级数据秒级响应!碧桂园基于 EMR Serverless StarRocks 升级存算分离架构实践
大数据·云原生·serverless
易知嵌入式小菜鸡6 小时前
在KEIL里C51和MDK兼容以及添加ARM compiler5 version编译器
arm开发
容器魔方6 小时前
Bilibili、中电信人工智能科技、商汤科技、联通云等正式加入Volcano社区用户组
云原生·容器·云计算
阿里云云原生8 小时前
MCP云托管最优解,揭秘国内最大MCP中文社区背后的运行时
云原生
数字化综合解决方案提供商8 小时前
云原生时代的双轮驱动
云原生
小马爱打代码8 小时前
云原生 - Service Mesh
云原生·service_mesh
weisian1519 小时前
云原生--核心组件-容器篇-2-认识下Docker(三大核心之镜像,容器,仓库)
docker·云原生·容器