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

背景

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

启动nginx的x86镜像

复制代码
docker run -itd --name=nginx_x86 -p 8082:80 nginx:latest

启动镜像后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博客

相关推荐
狂奔蜗牛(bradley)1 小时前
拒绝SOEM黑盒!死磕EtherCAT主站:ARM+FPGA架构、DC同步与状态机修复等,50+篇实战开发文档全公开
arm开发·fpga开发·架构
辛迪聊物业数字化1 小时前
智慧社区SaaS平台架构拆解:从物业收费到IoT联动的落地实现
物联网·架构
无序的浪2 小时前
测试博客-基于微服务的在线判题系统
java·spring cloud·docker·微服务·测试·在线判题
天远Date Lab3 小时前
微服务架构实战:基于天远学历信息高级版构建自动化人才准入网关
人工智能·微服务·架构·自动化
头茬韭菜3 小时前
DataFlow 深度分析与技术文档系列计划
架构·dataflow
Thneonl4 小时前
消息队列选型决策树:RabbitMQ vs Kafka vs Redis Streams
后端·架构
海宇大数据4 小时前
零信任架构实战:基于海宇学历核验版构建自动化风控审查网关
运维·人工智能·架构·自动化
91刘仁德4 小时前
RAG实战-从 NoSQL 到 Milvus 混合检索的架构演进
架构·nosql·milvus
这个DBA有点耶5 小时前
数据融合平台的下一代形态:数据库内核自己就能融合,为什么还要ETL?
数据库·架构·aigc
troy1285 小时前
Java 技术栈全景指南:从基础到微服务的完整知识体系
java·开发语言·微服务