背景
最近在項目中需要編譯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\n"); 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
微信公眾號:測試生財(定期分享獨家內容和資源)