前言:在当今科技蓬勃发展的浪潮中,有一股神秘的力量如同幕后的巨擘,强力推动着信创化的进程。这股力量恰似一只无形却力大无穷的巨手,其影响范围广泛,涵盖了从操作系统、形形色色的中间件、数据库,一直到容器平台等诸多领域。
伴随着技术架构的深刻变革,docker 镜像也迎来了关键的转型 —— 从 x86 (amd) 向 arm 架构转变,相关详情可参考下图。
需要特别注意的是,国产 XC 容器平台和主流的 k8s 容器平台相比,在功能按钮上存在一些细微的差异。在此,我精心编撰了一篇操作文档,详细阐述了在生产环境中 XC 容器平台从镜像构建开始,一直到将其推送进 XC 镜像仓库并成功运行的完整流程。然而,受当前 XC 相关资料的局限,这里暂时只能向大家展示构建 ARM 镜像包的操作步骤,无法将 XC 容器平台的所有操作内容毫无保留地呈现出来,期待后续有合适契机再为大家展示完整内容以供参考。
文章主要介绍了ARM架构Docker镜像构建相关操作,包括在ARM机器上安装Docker以及在不同场景下构建ARM版本镜像的方法,具体如下:
- ARM机器上安装Docker(以麒麟V10系统为例)
- 查看系统信息:通过
cat /proc/version
确定系统基于ubuntu16.04(xenial)。 - 添加软件源
- 参考清华镜像站帮助文档,添加arm架构的清华镜像软件源到
/etc/apt/sources.list
文件。 - 执行
sudo apt-get install apt-transport-https
、sudo apt-get clean
、sudo apt-get update
命令。
- 参考清华镜像站帮助文档,添加arm架构的清华镜像软件源到
- 安装Docker
- 卸载旧版本docker相关组件。
- 安装
apt-transport-https
、ca-certificates
、curl
、gnupg-agent
、software-properties-common
。 - 添加Docker官方GPG Key并确认添加成功。
- 编辑
/etc/apt/source.list
,添加docker软件源(arm64 xenial)。 - 执行
sudo apt-get update
,然后安装docker-ce
、docker-ce-cli
、containerd.io
,最后通过docker --version
查看版本。
- 查看系统信息:通过
- ARM版本镜像构建(非ARM机器上执行,使用buildx交叉构建)
- 启用试验性功能(仅支持docker19.03及以上版本)
- 编辑
/etc/docker/daemon.json
,添加{"experimental": true}
。 - 编辑
~/.docker/config.json
,添加"experimental": "enabled"
。 - 执行
sudo systemctl daemon-reload
和sudo 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
类似错误,表示镜像中部分可执行文件架构不匹配)。
- 通过
- 启用试验性功能(仅支持docker19.03及以上版本)
- 在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
。