背景
最近在项目中需要编译arm架构的某驱动docker镜像,但是手头上没有现成的arm架构的机器环境,于是在网上搜索了下如何在x86机器模拟arm环境来进行编译。我找到了一款神器:multiarch/qemu-user-static
简介
项目地址:https://github.com/multiarch/qemu-user-static
qemu-user-static是一个用于利用当前操作系统来运行其它架构的一个仿真器,这个github项目可以通过x86的机器编译出其它各个架构的docker镜像。
支持的指令集架构:
- armv7l
- ppc64le
- s390x
- aarch64
- armv7l
ppc64le
- 。。。
arm环境搭建
这里我手头上的机器为x86_64,ubuntu系统
1. 安装docker环境
2. 安装qemu相关
#更新apt源 apt-get update #安装qemu apt-get install qemu #下载qemu-aarch64-static wget https://github.com/multiarch/qemu-user-static/releases/download/v5.1.0-5/qemu-aarch64-static.tar.gz #解压 tar xzvf qemu-aarch64-static.tar.gz #配置可执行文件路径 sudo cp qemu-aarch64-static /usr/bin/ chmod +x /usr/bin/qemu-aarch64-static
3.注册qemu-user-static虚拟机
#注册qemu-user-static虚拟机 docker run --rm --privileged multiarch/qemu-user-static:register --reset #查看运行的docker容器 docker ps -a |grep arm
看到如下图即注册成功。
构建docker镜像
编译二进制
我们写一个helloworld的C程序,然后使用docker编译一个支持arm架构体系的镜像,hello.c:
#include<stdio.h> int main() { printf("hello world "); return 0; }
生成二进制文件
gcc hello.c -o hello
制作Dockfile
这里我们要构建aarch64的docker,使用基础镜像: multiarch/alpine:aarch64-edge
其他基础镜像地址参考:https://hub.docker.com/u/multiarch/
DockerFile内容:
FROM multiarch/alpine:aarch64-edge RUN mkdir /data WORKDIR /data COPY hello /data/hello # Define default command. ENTRYPOINT ["/data/hello"]
1)使用DockerFile构建镜像
docker build . -t hello
2)查看编译好的镜像
docker images
这样支持arm架构的helloworld的docker镜像打好了,你可以将其push到docker到镜像仓库中,然后在arm机器上pull并运行该镜像。
博主:测试生财(一个不为996而996的测开码农)
座右铭:专注测试开发与自动化运维,努力读书思考写作,为内卷的人生奠定财务自由。
内容范畴:技术提升,职场杂谈,事业发展,阅读写作,投资理财,健康人生。
csdn:https://blog.csdn.net/ccgshigao
博客园:https://www.cnblogs.com/qa-freeroad/
51cto:https://blog.51cto.com/14900374
微信公众号:测试生财(定期分享独家内容和资源)