[用友技术中台]使用x86服务器编译ARM容器镜像的解决方案

举报
用友技术中台 发表于 2020/03/24 16:49:22 2020/03/24
【摘要】 [干货集锦] [用友技术中台]使用x86服务器编译ARM容器镜像的解决方案

前言

    在用友技术中台的国产化服务器适配工作中,经常会碰到这种情况,我们需要在ARM架构的硬件环境下编译和运行容器应用,但是由于项目进度等制约因素,ARM架构的服务器还在采购中,俗话说”巧妇难为无米之炊”,在没有ARM服务器的情况下,我们寻找出了一套解决方案,让传统x86服务器可以编译和运行ARM架构的容器镜像,为用友技术中台的软件交付周期可以提前,提高整体CI/CD的生命周期。

一、     环境需求和准备阶段

1)什么是qemu

    qemu是一个开源项目,使用者可以通过qemu完成跨平台的仿真模拟,类似vm虚拟化,qemu虚拟机是一个用户空间的进程,是一种软件虚拟化的实现。qemu有user和system两种模式,在用user模式下,qemu可以将其他体系结构的二进制代码作为主机的进程,同时也可以将任何模拟系统调用转换为主机系统的调用。

1585097603903713.png


2)在docker环境中运行qemu-user-static

    首先检查系统环境确保linux内核版本在4.0以上,并在x86的服务器上安装docker程序。

然后在docker中的特权模式下运行qemu-user-static容器,命令如下:

docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes

 

二、     编译ARM容器镜像

    编写ARM架构的dockerfile,例如编译arm架构的nginx容器镜像。

FROM arm64v8/alpine:3.9
ENV.UTF-8 \
    LANGUAGE=en_US.UTF-8 \
    LC_CTYPE=en_US.UTF-8 \
    LC_ALL=en_US.UTF-8 \
    TZ="Asia/Shanghai" \
    BASE_IMAGE=alpine:3.9-arm64v8
RUN set -x \
    && sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories \
    && echo 'http://mirrors.aliyun.com/alpine/edge/testing' >> /etc/apk/repositories \
    && apk update \
    && addgroup -g 101 -S nginx \
    && adduser -S -D -H -u 101 -h /var/cache/nginx -s /sbin/nologin -G nginx -g nginx nginx \
    && apk add --no-cache --allow-untrusted \
               wget vim curl binutils\
               openssh-client git less \
               bash bash-doc bash-completion \
               htop iftop \
               tmux fish mdocml-apropos \
               busybox-extras \
               coreutils \
               ca-certificates \
               tzdata \
               libtool \
               apk-tools \
               netcat-openbsd \
               bind-tools \
               nginx \
    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && chown -R nginx:nginx /var/lib/nginx \
    && mkdir /run/nginx \
    && /bin/rm -rf /tmp/* /var/cache/apk/*
 
EXPOSE 80
 
CMD ["nginx", "-g", "daemon off;"]

    执行编译命令

docker build -t iuap/arm64v8-nginx:v1.1 .

1585097673415068.png

    运行编译完成的arm架构的容器镜像

docker run -d -P iuap/arm64v8-nginx:v1.1

    使用exec命令进入该容器,可以看到改容器是ARM架构的

1585097740765276.png

三、     结束语

    虽然使用qemu来虚拟ARM环境性能会有所损耗,但是可以在项目项目开始之前就开始ARM应用的集成构建工作,比等待ARM硬件资源就绪再开展工作要快的多,同时再配合用友技术中台的DevOps流水线,加快企业软件的交付周期。

现在ARM版本的容器镜像已经加入用友开发者中心的基础镜像仓库中,方便ARM环境下的构建工作。

1585097774560695.png

    同时用友技术中台也将容器云中的ARM版本的组件开源出来,方便大家下载和使用。


1585097831474034.png

1585097831843980.png



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。