openEuler 22.03 x86架构下docker运行arm等架构的容器——筑梦之路

这篇具有很好参考价值的文章主要介绍了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.tgz

chmod +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/docker

cat > /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-amd64

mv buildx-v0.9.1.linux-amd64 docker-buildx

chmod +x docker-buildx

mv docker-buildx ~/.docker/cli-plugins/

# 检查验证

docker buildx  version

docker buildx ls

注册可支持的架构解释器

不指定 CPU 平台,使用 register 来注册可支持的架构解析器

docker run --rm \
> --privileged \
> multiarch/qemu-user-static:register \
> --reset

docker arm x86,国产化,虚拟化,linux系统运维,arm开发,docker,x86环境下运行其他架构容器

ls  /proc/sys/fs/binfmt_misc/ 

docker arm x86,国产化,虚拟化,linux系统运维,arm开发,docker,x86环境下运行其他架构容器

cat /proc/sys/fs/binfmt_misc/qemu-mips64el

cat /proc/sys/fs/binfmt_misc/qemu-aarch64

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

docker arm x86,国产化,虚拟化,linux系统运维,arm开发,docker,x86环境下运行其他架构容器

 启动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-static

https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-mips-static

https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-mips64-static

https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-mipsel-static

https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-ppc64-static

https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-s390x-static

https://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 -m

docker 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

docker arm x86,国产化,虚拟化,linux系统运维,arm开发,docker,x86环境下运行其他架构容器

 同理,启动ppc64le架构的镜像如下:

wget -c https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-ppc64le-static

chmod +x qemu-ppc64le-static

# 简单测试

docker run -t \
--rm \
--platform ppc64le \
-v $(pwd)/qemu-ppc64le-static:/usr/bin/qemu-ppc64le-static \
alpine \
uname -m

docker arm x86,国产化,虚拟化,linux系统运维,arm开发,docker,x86环境下运行其他架构容器

以上测试了两种非x86架构的镜像,均可以正常运行,其他架构的类似,这里就不再赘述。 

龙芯架构这里,做特别说明

loongarch 架构的支持

1. 注册解释器

wget https://gitee.com/michael0066/qemu-loongarch64-static/blob/master/qemu-loongarch64-static

chmod +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 arm x86,国产化,虚拟化,linux系统运维,arm开发,docker,x86环境下运行其他架构容器

docker arm x86,国产化,虚拟化,linux系统运维,arm开发,docker,x86环境下运行其他架构容器 

另一种方式: 

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
EOF

docker run --rm -t "arm64v8/redis_new" uname -m
#aarch64

这里没有使用buildx插件来构建其他架构的镜像,提供了另外一种构建其他架构镜像的思路和方法,但在云原生一般场景下构建多架构的docker镜像还是推荐使用docker buildx方式,效率更高。文章来源地址https://www.toymoban.com/news/detail-767409.html

到了这里,关于openEuler 22.03 x86架构下docker运行arm等架构的容器——筑梦之路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南续篇

    ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南续篇

    作者:运维有术 知识点 定级: 入门级 KubeKey 安装部署 ARM 版 KubeSphere 和 Kubernetes ARM 版 KubeSphere 和 Kubernetes 常见问题 实战服务器配置 (个人云上测试服务器) 主机名 IP CPU 内存 系统盘 数据盘 用途 ks-master-1 172.16.33.16 6 16 50 200 KubeSphere/k8s-master ks-master-2 172.16.33.22 6 16 50 200 KubeSph

    2024年02月06日
    浏览(12)
  • openEuler 22.03 LTS-SP1体验安装docker、防火墙配置等

    openEuler默认采用firewall-cmd进行管理,iptables默认是禁用状态。

    2024年02月16日
    浏览(19)
  • openEuler 22.03 (LTS-SP1)安装最新版Docker(踩坑及解决方案)

    openEuler 22.03 (LTS-SP1)安装最新版Docker(踩坑及解决方案)

    openEuler 22.03 LTS-SP1要是直接yum install docker,默认安装docker 是18.09.0,这个版本Docker有个bug,所以还是安装个最新版Docker。 1、先增加docker官方仓库 以下作踩坑过程,请直接跳过查看下面的\\\"2、修改配置文件\\\" 查看一下最新版docker,然后报错可以发现, 这里只有centos/7/   或 ce

    2024年02月13日
    浏览(17)
  • openEuler22.03LTS网卡配置

    VmWare完成安装openEuler,修改网卡配置文件,重启network报错service not found,因为欧拉使用nmcli管理网络。 按照centos7的经验,修改ifcfg配置文件,重启network失败,报错“network.service not found.” [root@localhost ]# systemctl restart network Failed to restart network.service: Unit network.service not found. 欧

    2023年04月08日
    浏览(9)
  • 《全网唯一》解决华为OpenEuler 22.03LTS重启后,docker丢失自定义网络,docker-compose报错: network not found

    如果你在华为OpenEuler 22.03LTS系统中 使用yum或者dnf安装docker,docker network create 创建的网络,然后重启宿主机,会发现之前的网络全都不见了 或者docker-compse创建一组容器,重启宿主机会发现docker-compose无法启动,报错找不到网络 如果只是想解决以上问题,不关心处理过程,请直

    2024年02月10日
    浏览(15)
  • openEuler22.03制作openstack平台使用的镜像

    openEuler22.03制作openstack平台使用的镜像

    第一章 openEuler22.03制作openstack平台使用的镜像 使用openEuler22.03的iso制作openstack平台使用的云主机镜像。 使用的镜像:openEuler-22.03-LTS-SP1-x86_64-dvd.iso 使用的工具:virt-manager 首先将网卡类型,硬盘类型修改为Virtio类型 只保留一个跟目录分区即可 总体上制作方式一致,直接使用云

    2024年02月07日
    浏览(13)
  • openEuler 22.03 LTS登录AWS Marketplace

    openEuler 22.03 LTS登录AWS Marketplace

    openEuler 22.03 LTS镜像正式登录AWS Marketplace ,目前在亚太及欧洲15个Region开放使用,后续将开放更多版本和区域,openEuler 22.03 LTS AMI(Amazon Machine Images)由openEuler社区提供支持。 点击查看具体使用指导:https://www.openeuler.org/zh/blog/20230711-AMIs/AMIs.html

    2024年02月16日
    浏览(13)
  • openEuler 22.03 LTS 上源码安装 PostgreSQL 15

    openEuler 22.03 LTS 上源码安装 PostgreSQL 15

    6.1 创建数据目录 6.2 切换到 postgres 操作系统用户 6.3 初始化数据库 6.4 启动数据库 把 start 改为 stop 就是停止。 7.1 以管理员的身份配置/etc/profile 在/etc/profile.d 目录下新增 postgresql.sh 文件,内容如下 7.2 设置开机自动启动 (1)创建启动文件 在/usr/lib/systemd/system 下创建文件 po

    2024年02月20日
    浏览(10)
  • x86架构上构建arm64架构的docker镜像

    x86架构上构建arm64架构的docker镜像

    项目需要提供arm64架构上的centos7对应docker镜像,然后本地宿主机只有x86架构机器,因此需要在x86机器上构建centos arm64架构的docker镜像 宿主机操作系统:centos7.7 amd64架构 docker版本:19.03.15 ARM,AMD,X86,AArch64的概念可以参考: https://blog.csdn.net/Bubbler_726/article/details/88397357 下载 qemu-

    2024年02月11日
    浏览(19)
  • 使用QEMU(x86)模拟运行ARM64架构并进行内核调试

    使用QEMU(x86)模拟运行ARM64架构并进行内核调试

    在 x86 上使用 QEMU 虚拟机模拟并调试 ARM64。 参考:ubuntu虚拟机中使用QEMU搭建ARM64环境 主机 ubuntu 20.04, Linux 5.16.0 QEMU emulator version 7.2.92 (v8.0.0-rc2-23-gefcd0ec14b) :qemu-7.2.29 合适的ARM64内核源码:linux-4.14.221.tar.gz 安装交叉编译工具: sudo apt-get install gcc-aarch64-linux-gnu 命令安装以及源码

    2024年02月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包