openEuler 22.03 x86架构下docker运行arm等架构的容器——筑梦之路
为什么要这样做?
随着国产化的普及,国家政策对信创产业的支持,尤其一些金融证券行业、政府单位等,逐渐开始走国产化信创的路线,越来越多接触到国产 CPU (
arm平台,比如华为的鲲鹏处理器)自己买
arm平台的CPU,这个成本着实吃不消,于是尝试x86平台运行arm平台的容器来降本增效。
环境说明
1. 操作系统版本: 华为openEuler 22.03 lts x86_64
2. docker版本:20.10.12 二进制方式安装
3. buildx插件版本:0.9.1
Docker二进制方式安装和buildx插件安装
1. 二进制方式安装docker并配置
# 二进制方式安装docker并配置#下载二进制离线压缩包
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.12.tgz#解压文件
tar -zxvf docker-20.10.12.tgzchmod +x docker/*#将二进制文件拷贝到/usr/bin/
cp docker/* /usr/bin/#注册到系统服务
vim /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target[Service]
Type=notify
#指定docker存储目录/TRS/APP/docker/lib
ExecStart=/usr/bin/dockerd --graph /APP/docker/
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
asksMax=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s[Install]
WantedBy=multi-user.target#重载
mkdir -p /APP/docker/lib
systemctl daemon-reload#启动服务并加入开机启动
systemctl enable docker --now#检查
systemctl status docker# 配置
mkdir -p /etc/dockercat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],"exec-opts": ["native.cgroupdriver=systemd"],"experimental": true,"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2","storage-opts": ["overlay2.override_kernel_check=true"]
}
EOF
2. 安装docker-buildx插件
# 创建目录mkdir -p ~/.docker/cli-plugins/# 下载插件并改名wget -c https://github.com/docker/buildx/releases/download/v0.9.1/buildx-v0.9.1.linux-amd64mv buildx-v0.9.1.linux-amd64 docker-buildxchmod +x docker-buildxmv docker-buildx ~/.docker/cli-plugins/# 检查验证docker buildx versiondocker buildx ls
注册可支持的架构解释器
不指定 CPU 平台,使用
register来注册可支持的架构解析器
docker run --rm \
> --privileged \
> multiarch/qemu-user-static:register \
> --reset

ls /proc/sys/fs/binfmt_misc/

cat /proc/sys/fs/binfmt_misc/qemu-mips64elcat /proc/sys/fs/binfmt_misc/qemu-aarch64cat /proc/sys/fs/binfmt_misc/qemu-ppc64le

启动arm架构的容器
1. 下载qemu-aarch64-static
GitHub - multiarch/qemu-user-static: :earth_africa: `/usr/bin/qemu-*-static`
wget -c https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-aarch64-static# 其他架构https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-arm-statichttps://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-mips-statichttps://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-mips64-statichttps://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-mipsel-statichttps://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-ppc64-statichttps://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-s390x-statichttps://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-x86_64-static
chmod +x qemu-aarch64-static
启动容器时将
qemu-aarch64-static带入到容器内
注意 qemu-aarch64-static 二进制文件的路径,可以自己归纳到指定的路径,只需要带入到容器内的 /usr/bin 目录下就好了
简单测试
# 进运行一条命令查看架构docker run -t --rm --platform arm64 -v `pwd`/qemu-aarch64-static:/usr/bin/qemu-aarch64-static alpine uname -mdocker run -i --rm --platform arm64 -v `pwd`/qemu-aarch64-static:/usr/bin/qemu-aarch64-static debian:11 uname -m# 创建一个容器并开启一个终端docker run -it --rm --platform arm64 -v `pwd`/qemu-aarch64-static:/usr/bin/qemu-aarch64-static debian:11 /bin/bash

同理,启动ppc64le架构的镜像如下:
wget -c https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-ppc64le-staticchmod +x qemu-ppc64le-static# 简单测试docker run -t \
--rm \
--platform ppc64le \
-v $(pwd)/qemu-ppc64le-static:/usr/bin/qemu-ppc64le-static \
alpine \
uname -m

以上测试了两种非x86架构的镜像,均可以正常运行,其他架构的类似,这里就不再赘述。
龙芯架构这里,做特别说明
loongarch 架构的支持
1. 注册解释器
wget https://gitee.com/michael0066/qemu-loongarch64-static/blob/master/qemu-loongarch64-staticchmod +x qemu-loongarch64-static
# 注册echo ":qemu-loongarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x02\x01:\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-loongarch64-static:" > /proc/sys/fs/binfmt_misc/register# 查看
ls /proc/sys/fs/binfmt_misc/ |grep loonqemu-loongarch64
2. 简单测试
docker run --rm \
--platform loongarch64 -t \
-v `pwd`/qemu-loongarch64-static:/usr/bin/qemu-loongarch64-static \
loongsongd/debian10_loongarch64_x64:e15.0 \
uname -m
参考资料:
x86 架构运行 其他架构镜像 - 简书
https://hub.docker.com/r/loongsongd/debian10_loongarch64_x64
构建arm镜像
以构建arm64镜像为例来说明如何构建其他平台架构的镜像。
1. 编写Dockerfile
FROM centos:7.9.2009
COPY ./qemu-aarch64-static /usr/bin/qemu-aarch64-static
RUN yum install -y net-tools gcc gcc-c++ make vim && \yum clean all
2. 构建镜像
docker build \
--platform arm64 \
-t centos_make:7.9_aarch64 .
3. 检查验证
docker inspect centos_make:7.9_aarch64 | grep -i 'architecture'

另一种方式:
docker build --rm -t "arm64v8/redis_new" -<<EOF
FROM multiarch/qemu-user-static:x86_64-aarch64 as qemu
FROM arm64v8/redis
COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin
EOFdocker run --rm -t "arm64v8/redis_new" uname -m
#aarch64
这里没有使用buildx插件来构建其他架构的镜像,提供了另外一种构建其他架构镜像的思路和方法,但在云原生一般场景下构建多架构的docker镜像还是推荐使用docker buildx方式,效率更高。
相关文章:
openEuler 22.03 x86架构下docker运行arm等架构的容器——筑梦之路
为什么要这样做? 随着国产化的普及,国家政策对信创产业的支持,尤其一些金融证券行业、政府单位等,逐渐开始走国产化信创的路线,越来越多接触到国产 CPU (arm 平台,比如华为的鲲鹏处理器…...
【Java】HashMap常见的面试题
HashMap常见面试题 1.HashMap key 是否可以是为 我们自定义对象?——可以 2.HashMap 存储数据 有序还是无序?——无序 3.HashMap key 是否可以存放 null值?如果可以的话 存放在 数组中那个位置?——可以;存放在 index0的位置 4.Ha…...
openpnp - src - 配置文件载入过程的初步分析
文章目录 openpnp - src - 配置文件载入过程的初步分析概述笔记自己编译用的git版本报错截图问题1 - 怎么在调试状态下, 定位到抛异常的第一现场?结合单步调试找到的现场, 来分析报错的原因openpnp配置文件读取的流程END openpnp - src - 配置文件载入过程的初步分析 概述 从…...
中国各城市土地利用类型(城市功能)数据集(shp)
中国各城市土地利用类型(城市功能)数据集 时间:2018年 全国范围的城市用地类型数据(居住/商业/交通用地等共计11类) 分类:居住用地、商业用地、工业用地、医疗设施用地、体育文化设施用地、交通场站用地、绿地等用地类型 含城市编码、一级分类5个、二级分类11个 数据按…...
Linux网络编程:数据链路层
目录 一. 数据链路层概述 二. 以太网 2.1 以太网的概念 2.2 以太网数据帧 2.3 对于MAC地址的认识 2.4 数据碰撞问题 三. MTU和MSS 3.1 什么是MTU 3.2 MTU对UDP的影响 3.3 MTU对TCP的影响(MSS的概念) 四. ARP协议 4.1 ARP协议的作用 4.2 ARP数…...
python 线程 超时时间
python 线程 超时时间_mob649e815f0f18的技术博客_51CTO博客...
LeetCode:274. H 指数、275. H 指数 II(C++)
目录 274. H 指数 题目描述: 实现代码与解析: 排序暴力 275. H 指数 II 题目描述: 实现代码与解析: 二分 比较简单,不再写解析,注意二分的时候,r指针为n,含义为个数…...
多线程及锁
1.lock锁和synchronized锁的区别。 1:Synchronized 是Java的一个关键字,而Lock是java.util.concurrent.Locks 包下的一个接口; 2:Synchronized 使用过后,会自动释放锁,而Lock需要手动上锁、手动释放锁&am…...
C++ 写一个Data类的注意问题
Data类 声明和定义分离的一些问题 声明里面我们不带缺省参数,定义我们给缺省参数,如下面两段代码: Data.h#pragma once #include<iostream> using namespace std; class Data { public:Data(int year,int month,int day);private:in…...
postman做接口测试
之前搞自动化接口测试,由于接口的特性,要验证接口返回xml中的数据,所以没找到合适的轮子,就自己用requests造了个轮子,用着也还行,不过就是case管理有些麻烦,近几天又回头看了看postman也可以玩…...
hdlbits系列verilog解答(always块)-29
文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 由于数字电路由用网线连接的逻辑门组成,因此任何电路都可以表示为模块和赋值语句的某种组合。然而,有时这不是描述电路的最方便方式。过程procedure(其中 always 的块就是一个示例)提供了描述电路的替代语法…...
uniapp实现瀑布流
首先我们要先了解什么是瀑布流: 瀑布流(Waterfall Flow)是一种常见的网页布局方式,也被称为瀑布式布局或砌砖式布局。它通常用于展示图片、博客文章、商品等多个不同大小和高度的元素。 瀑布流布局的特点是每个元素按照从上到下…...
15. 机器学习 - 支持向量机
Hi, 你好。我是茶桁。 逻辑回归预测心脏病 在本节课开始呢,我给大家一份逻辑回归的练习,利用下面这个数据集做了一次逻辑回归预测心脏病的练习。 本次练习的代码在「茶桁的AI秘籍」在Github上的代码库内,数据集的获取在文末。这样做是因为我…...
如何根据进程号查询服务的端口号
ps -ef | grep nacos ps -ef | grep nacos 命令是用于查找系统中所有包含 "nacos" 关键字的进程。这个命令的含义如下: ps: 这是一个用于显示当前正在运行的进程的命令。 -ef: 这两个选项一起使用,表示显示所有进程的详细信息。 -e 选项表示显…...
2.10、自定义量化优化过程
introduction 如何自定义量化优化过程,以及如何手动调用优化过程 code from typing import Callable, Iterableimport torch import torchvision from ppq import QuantizationSettingFactory, TargetPlatform from ppq.api import (ENABLE_CUDA_KERNEL, Quantiz…...
MySQL如何添加自定义函数
深入MySQL:学习如何添加自定义函数 MySQL 是一种流行的开源关系型数据库管理系统,它支持很多内置函数来完成各种操作。不过有时候这些内置函数无法满足我们的需求,这时候就需要自定义函数了。在 MySQL 中,可以通过编写自定义函数…...
超融合数据库:解锁全场景数据价值的钥匙
前言 近日,四维纵横对外官宣已完成上亿元 B 轮融资。作为超融合数据库理念的提出者,三年来 YMatrix 持续在超融合数据库领域中保持精进与迭代,对于超融合数据库在行业、场景中的应用和理解也更为深刻。 本篇文章,我们将基于 YMa…...
Pap.er for Mac:高清壁纸应用打造你的专属视觉盛宴
在浩瀚的互联网海洋中,你是否曾为寻找一张心仪的高清壁纸而烦恼?或者是在大量的壁纸应用中感到困扰,不知道哪一个能满足你的需求?今天,我要向你介绍的,是一款独特的5K高清壁纸应用——Pap.er for Mac。 Pa…...
AI:46-基于深度学习的垃圾邮件识别
🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…...
【骑行贝丘渔场】一场与海的邂逅,一段难忘的旅程
在这个渐凉的秋日,我们校长骑行队一行人骑着自行车,从大观公园门口出发,开始了一段别开生面的海滩之旅。沿途穿越草海隧道湿地公园、迎海路、海埂公园西门(第二集合点)、宝丰湿地公园、斗南湿地公园、蓝光城࿰…...
从零开始!DeepSeek-R1-Distill-Qwen-1.5B完整部署流程详解
从零开始!DeepSeek-R1-Distill-Qwen-1.5B完整部署流程详解 1. 模型简介与核心优势 1.1 什么是DeepSeek-R1-Distill-Qwen-1.5B? DeepSeek-R1-Distill-Qwen-1.5B是一款经过知识蒸馏优化的轻量级语言模型,由DeepSeek团队基于Qwen-1.5B架构开发…...
人肉区块链:用群体记忆对抗AI篡改
当测试数据面临AI篡改危机在生成式AI全面渗透软件开发生命周期的今天,软件测试从业者正面临前所未有的挑战。AI工具在提升测试用例生成、缺陷预测和日志分析效率的同时,也带来了隐蔽而致命的风险:AI驱动的数据篡改。自动化测试结果被注入虚假…...
初识Git,带你深入学习Git相关的知识
在之前的博客中,我都会在博客的开头放一个gitee的链接。Gitee是什么呢?它是一个远程的代码托管库。在我们学习和项目管理的时候起着非常重要的作用。 本期我就带领着大家一起学习Git相关的知识内容。学习它的操作,了解其在企业级开发中的作用…...
抖音音乐高效解决方案:douyin-downloader批量下载与智能管理指南
抖音音乐高效解决方案:douyin-downloader批量下载与智能管理指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fall…...
Windows驱动管理与系统优化:DriverStore Explorer全方位解决方案
Windows驱动管理与系统优化:DriverStore Explorer全方位解决方案 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 设备驱动维护是保障Windows系统稳定运行的核心环节&…...
DanKoe 视频笔记:原创思维指南:如何进行原创思考
在本教程中,我们将学习如何摆脱思维定式,培养真正的原创思考能力。我们将探讨为何独立思考如此困难,并提供一套实用的方法来帮助你形成自己的观点、连接不同领域的知识,并最终创造出有价值的内容。 概述 每个人都希望成为一个原创…...
客服机器人开放平台能自建知识库吗?以百应Agent为例,探讨成都企业售后自动解答的实现路径
在数字化转型加速的今天,成都作为西部电商和制造业重镇,众多企业面临售后咨询量激增的挑战。退货、物流追踪、产品故障排查等售后问题占客服咨询的 60% 以上,传统人工客服成本高、响应慢,已难以满足用户即时需求。客服机器人开放平…...
MogFace人脸检测模型-large应用指南:从图片上传到结果分析,手把手教学
MogFace人脸检测模型-large应用指南:从图片上传到结果分析,手把手教学 1. 认识MogFace-large:为什么选择这个人脸检测模型 在开始实际操作之前,我们先简单了解下MogFace-large的核心优势。这个模型已经在Wider Face六项榜单上霸榜…...
FlowState Lab模型架构解析:深入理解时空生成网络原理
FlowState Lab模型架构解析:深入理解时空生成网络原理 1. 引言:为什么需要时空生成网络 视频生成一直是AI领域最具挑战性的任务之一。与静态图像不同,视频不仅需要保持单帧质量,还要确保帧间连贯性和时间一致性。传统方法往往难…...
GY39传感器实战:从数据采集到环境监测应用
1. GY39传感器入门指南 第一次拿到GY39传感器时,我完全被它小巧的体积震惊了。这个只有拇指大小的模块,居然能同时测量气压、温湿度、光照强度四种环境参数。它的工作电压是3-5V,用普通的USB充电器就能供电,特别适合DIY项目。 GY3…...
