[用友技术中台]使用x86服务器编译ARM容器镜像的解决方案
【摘要】 [干货集锦] [用友技术中台]使用x86服务器编译ARM容器镜像的解决方案
前言
在用友技术中台的国产化服务器适配工作中,经常会碰到这种情况,我们需要在ARM架构的硬件环境下编译和运行容器应用,但是由于项目进度等制约因素,ARM架构的服务器还在采购中,俗话说”巧妇难为无米之炊”,在没有ARM服务器的情况下,我们寻找出了一套解决方案,让传统x86服务器可以编译和运行ARM架构的容器镜像,为用友技术中台的软件交付周期可以提前,提高整体CI/CD的生命周期。
一、 环境需求和准备阶段
1)什么是qemu
qemu是一个开源项目,使用者可以通过qemu完成跨平台的仿真模拟,类似vm虚拟化,qemu虚拟机是一个用户空间的进程,是一种软件虚拟化的实现。qemu有user和system两种模式,在用user模式下,qemu可以将其他体系结构的二进制代码作为主机的进程,同时也可以将任何模拟系统调用转换为主机系统的调用。
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 .
运行编译完成的arm架构的容器镜像
docker run -d -P iuap/arm64v8-nginx:v1.1
使用exec命令进入该容器,可以看到改容器是ARM架构的
三、 结束语
虽然使用qemu来虚拟ARM环境性能会有所损耗,但是可以在项目项目开始之前就开始ARM应用的集成构建工作,比等待ARM硬件资源就绪再开展工作要快的多,同时再配合用友技术中台的DevOps流水线,加快企业软件的交付周期。
现在ARM版本的容器镜像已经加入用友开发者中心的基础镜像仓库中,方便ARM环境下的构建工作。
同时用友技术中台也将容器云中的ARM版本的组件开源出来,方便大家下载和使用。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
热门文章
评论(0)