zoukankan      html  css  js  c++  java
  • 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
    ");
      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

    微信公众号:测试生财(定期分享独家内容和资源)

  • 相关阅读:
    服务器/服务器架构/阿里云服务器/虚拟机
    第十五章、线程之协程
    第十五章、线程池和进程池
    第十五章、线程之queue模块的各种队列
    第十五章、Python多线程之信号量和GIL
    第十五章、Python多线程同步锁,死锁和递归锁
    第十五章、并发编程之守护线程
    第十五章、并发编程之线程
    抢票小程序
    队列与生产者消费者模型
  • 原文地址:https://www.cnblogs.com/qa-freeroad/p/13941445.html
Copyright © 2011-2022 走看看