docker运行arm64架构的镜像、不同平台镜像构建

news2024/10/4 1:17:04

背景

Docker 允许开发者将应用及其依赖打包成一个轻量级、可移植的容器,实现“一次构建,到处运行”的目标。然而,不同的操作系统和硬件架构对容器镜像有不同的要求。例如,Linux 和 Windows 系统有不同的文件系统和系统调用,而 x86_64(amd64)和 ARM64 架构则有不同的指令集。

Docker 从 18.09 版本开始支持多平台镜像构建。--platform参数允许用户指定构建过程应该生成的目标操作系统和架构。例如,--platform=linux/amd64指定生成一个在 64 位 Linux 操作系统上运行的镜像

操作系统架构概览
在讨论--platform参数之前,我们需要了解一些常见的操作系统架构:

amd64:即 x86_64,是最常见的桌面和服务器 CPU 架构,广泛用于 Intel 和 AMD 的处理器,这个就是x86架构的。
arm64:ARM 架构的 64 位版本,常用于移动设备和一些高性能计算场景。
windows/amd64:指运行在 64 位 Windows 操作系统上的架构。

开启platform参数

docker默认没有开启 --platform 参数,需要手动开启

docker info | grep -i 'experimental'

修改daemon.json文件

{
  "experimental": true,
   "registry-mirrors": ["https://dockerpull.com"]
}

重启docker

systemctl daemon-reload
systemctl restart docker

修改完成后,重启 docker 来验证

安装 qemu 多平台支持

下载多架构支持的包,注意选对目标架构
qemu-aarch64-static 是arm-arch64架构的包

wget https://github.com/multiarch/qemu-user-static/releases/download/v5.1.0-5/qemu-aarch64-static.tar.gz

qemu-aarch64-static.tar.gz已上传到csdn资源上

https://download.csdn.net/download/wjzholmes/89839670

解压

tar xzvf qemu-aarch64-static.tar.gz

 配置可执行文件路径,增加权限

sudo cp qemu-aarch64-static /usr/bin/
chmod +x /usr/bin/qemu-aarch64-static

注册qemu-user-static虚拟机 

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

(作用是注册一些什么东西,可以用先不考虑具体内容)
# --rm          容器退出时自动移除
# --privileged  赋予容器拓展的权限
# --reset      (启动时传递给容器的参数) 即:/register --reset

启动nginx的arm镜像 

docker run -itd --platform linux/arm64 -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static --name=nginx_arm -p 8081:80 nginx:arm114 /bin/bash

启动nginx的x86镜像

docker run -itd --name=nginx_x86 -p 8082:80 nginx:latest /bin/bash

 启动镜像后web访问NGINX不通,查看是镜像内NGINX未启动,登录镜像启动nginx

docker exec -it nginx_x86 /bin/bash
service nginx status
service nginx start

查看arm和x86的nginx镜像都启动

 

参考文章:

【Docker系列】跨平台 Docker 镜像构建:深入理解`--platform`参数_docker --platform-CSDN博客

x86 平台利用 qemu-user-static 实现 arm64 平台 docker 镜像的运行和构建_docker_chen2ha-云原生

【无标题】_qemu-aarch64-static 源码下载-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2187148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银河麒麟桌面操作系统修改默认Shell为Bash

银河麒麟桌面操作系统修改默认Shell为Bash 💐The Begin💐点点关注,收藏不迷路💐 在银河麒麟桌面操作系统(ARM版)中,若要将默认Shell从Dash改为Bash,可执行以下步骤: 打开…

谈及医疗和教育真实需求是什么

医疗就是健康,物质基础身体棒; 教育就是心智,心理稳定智慧高。 提示:能让人内心充盈并不断提升自我能力的教育才是高品质的。 全文终结 需求量萎缩对品质端的改变-CSDN博客 与参考资料中的内容以及“贪嗔痴”的关联性进行详细扩…

【C++】vector类的模拟实现

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 🔥 所属专栏:C深入学习笔记 💫 欢迎来到我的学习笔记! 本篇文章参考博客:【C】…

HTML5+CSS+JavaScript剪子石头布游戏

HTML5CSSJavaScript剪子石头布游戏 用HTML5CSSJavaScript剪子石头布游戏实现剪子石头布游戏,游戏有成绩计数,人、机输赢情况,及平局情况。 ✂代表剪刀,▉代表石头,▓ 代表布,给出人机双方的出拳情况 游戏…

对于无人机行业技术、人才、实验环境共享,这事你怎么看?

对于无人机行业技术、人才、实验环境共享这一话题,我认为这是一个具有前瞻性和积极意义的趋势,对于推动无人机行业的健康发展具有重要意义。以下是我对此事的详细看法: 一、技术共享促进创新与发展 1. 加快技术创新:技术共享能够…

web前端面试中拍摄的真实js面试题(真图)

web前端面试中拍摄的真实js面试题(真图) WechatIMG258.jpeg WechatIMG406.jpeg WechatIMG407.jpeg WechatIMG922.jpeg WechatIMG1063.jpeg © 著作权归作者所有,转载或内容合作请联系作者 喜欢的朋友记得点赞、收藏、关注哦!!…

散度旋度拉普拉斯算子速记

哈密顿运算符号想象成一个矢量(对x偏导,对y偏导,对z偏导) 1、旋度就是这个矢量做点乘 2、散度就是矢量做叉乘 3、拉普拉斯算子就是哈密顿算符点乘哈密顿算符

【自然语言处理】(1) --语言转换方法

文章目录 语言转换方法一、统计语言模型1. 词向量转换2. 统计模型问题 二、神经语言模型1. 词向量化2. 维度灾难3. 解决维度灾难4. embedding词嵌入5. Word2Vec技术5.1 连续词袋模型(CBOW)5.2 跳字模型(Skip-gram) 总结 语言转换方…

[论文笔记]SGPT: GPT Sentence Embeddings for Semantic Search

引言 解码器Transformer的规模不断壮大,轻松达到千亿级参数。同时由于该规模,基于提示或微调在各种NLP任务上达到SOTA结果。但目前为止解码器Transformer还无法应用在语义搜索或语句嵌入上。 为了简单,下文中以翻译的口吻记录,比…

平台数据分类与聚类实验报告

参考书籍:《数据流挖掘与在线学习算法》 李志杰 1.6.1 实验目的 本书内容以及课程实验主要涉及Java程序设计语言、数据挖掘工具Weka和数据流机器学习平台MOA,因此,需要安装、配置并熟悉实验环境。Java、Weka和MOA都是开源小软件&#xff0…

2024年10月2日历史上的今天大事件早读

1683年10月2日 清朝康熙帝统一台湾 1869年10月2日 印度民族解放运动领袖甘地诞辰 1890年10月2日 中共创始人之一李达诞生 1895年10月2日 天津中西学堂(天津大学前身)开学 1901年10月2日 郑士良等发起惠州起义 1909年10月2日 京张铁路正式通车 1920…

国外电商系统开发-运维系统功能清单开发

一、最终效果图 二、功能清单 功能 描述 自定义日志绘图 根据Nginx、Apache登录日志文件绘图,绘图数据包括:访问量走势,500错误,200正确百分比等 创建服务器 加入服务器 主机状态自动检查 加入主机到系统后,系统…

【STM32】TCP/IP通信协议(2)--LwIP内存管理

五、LWIP内存管理 1.什么是内存管理? (1)内存管理,是指软件运行时对计算机内存资源的分配的使用的技术,其主要目的是如何高效、快速的分配,并且在适当的时候释放和回收内存资源(就比如C语言当…

前端规范工程-5:Git提交信息规范(commitlint + czg)

前面讲的都是在git提交之前的一些检查流程,然而我们git提交信息的时候,也应该是需要规范的。直接进入主题: 目录 需安装插件清单commitlint 介绍安装配置配置commit-msg钩子提交填写commit信息czg后续方式一:push触动build并上传…

行为设计模式 -观察者模式- JAVA

观察者模式 一.简介二. 案例2.1 抽象主题(Subject)2.2 具体主题(Concrete Subject)2.3 抽象观察者(Observer)2.4 具体观察者(Concrete Observer)2.5 测试 三. 结论3.1 优缺点3.2 使用…

从零开始讲PCIe(0)——外设与外设总线

一、外设 计算机外设(Peripheral)是指连接到计算机主机以扩展其功能的外部设备。这些设备可以是输入设备、输出设备、存储设备或通信设备等,外设(外围设备)通过输入、输出、存储和通信等方式帮助计算机与用户和其他设备…

用Arduino单片机读取PCF8591模数转换器的模拟量并转化为数字输出

PCF8591是一款单芯片,单电源和低功耗8位CMOS数据采集设备。博文[1]对该产品已有介绍,此处不再赘述。但该博文是使用NVIDIA Jetson nano运行python读取输入PCF8591的模拟量的,读取的结果显示在屏幕上,或输出模拟量点亮灯。NVIDIA J…

可解释聚类又“炸出圈”啦!把准3个切入点一路开挂!创新思路一学就会~

可解释聚类是机器学习领域一个非常重要的研究方向,它通过引入解释性强的特征和模型,让我们更直观地理解聚类结果,从而提升聚类分析的准确性和可靠性。 这种方法在一些敏感领域如医疗、金融等非常适用,因为它与传统方法不同&#…

工具模块及项目整体模块框架

文章目录 工具模块logger.hpphelper.hppthreadpool.hpp 核心概念核心API交换机类型持久化⽹络通信消息应答持久化数据管理中心模块虚拟机管理模块交换路由模块消费者管理模块信道管理模块连接管理模块Broker服务器模块消费者管理信道请求模块通信连接模块项⽬模块关系图 工具模…

Oracle SQL语句没有过滤条件,究竟是否会走索引??

答案是:可能走索引也可能不走索引,具体要看列的值可不可为null,Oracle不会为所有列的nullable属性都为Y的sql语句走索引。 例子: create table t as select * from dba_objects; CREATE INDEX ix_t_name ON t(object_id, objec…