qemu-user-static:利用x86機器編譯支持arm架構的docker鏡像


背景

最近在項目中需要編譯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環境

參考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

微信公眾號:測試生財(定期分享獨家內容和資源)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM