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


相关推荐
ARM|X86+FPGA工业主板厂家2 小时前
基于嵌入式 GPU 的智能服务机器人
linux·运维·arm开发·fpga开发·机器人
Asum1ta5 小时前
Kubernetes Namespace 命名空间管理实战:资源隔离、默认命名空间与常用命令
网络·容器·kubernetes
雨辰AI5 小时前
信创数仓分层建模|国产数据库 ODS/DWD/DWS 分层落地规范(金仓 / 达梦 / 高斯适配)
数据库·云原生·政务
Asum1ta6 小时前
K8s 学习环境搭建:Python 与 PyCharm 开发环境配置指南
python·学习·kubernetes
阿里云云原生6 小时前
实验:回测、离线实验平台与题目级 Rubric丨AgentLoop 数据飞轮实践(四)
云原生·agent
刘某的Cloud10 小时前
k8s部署prometheus架构规则
linux·运维·kubernetes·prometheus·监控
Ningcode_cloud10 小时前
什么是CICD? GitLab + Jenkins 持续集成实战部署手册
运维·ci/cd·云原生·容器·gitlab·jenkins
瞬间&永恒~12 小时前
【Kubernetes】(十五)维护与升级、ETCD 备份和恢复
linux·运维·docker·云原生·kubernetes
小小程序员.¥12 小时前
docker基础
云原生·eureka
格桑阿sir14 小时前
Kubernetes服务发现机制(二):Service、Endpoint、EndpointSlice
kubernetes·服务发现·负载均衡·service·endpoint·lb·endpointslice