基于buildah构建跨平台容器镜像的方法、系统及电子设备与流程

文档序号:29937444发布日期:2022-05-07 13:49阅读:326来源:国知局
基于buildah构建跨平台容器镜像的方法、系统及电子设备与流程

1.本发明涉及计算机程序技术领域,具体涉及一种基于buildah构建跨平台容器镜像的方法、系统及电子设备。


背景技术:

2.在日常工作中,经常需要将某个程序跑在不同的cpu架构上,比如让某些软件运行在嵌入式路由器设备上。特别是容器技术席卷全球之后,可以轻松地在arm设备上通过容器部署各种应用,而不用在意各种系统的差异性。但是想要跨平台构建容器镜像并不是一件轻松的活,要么到不同cpu架构的系统上全部构建一遍,要么就得在当前系统上通过虚拟化技术模拟不同的cpu架构,最后可能还要想办法合并镜像。
3.要实现一次构建,随处可用,挑战在于:linux、windows这些不同的操作系统拥有不同的系统api;x86、arm、ibm powerpc这些不同的硬件平台的指令集不同,某些同平台的硬件甚至拥有不同的专用指令集用于加速应用。因此,要构建能够在不同操作系统、不同硬件平台的运行的应用程序,仍然需要工程师们针对具体的操作系统和硬件平台进行海量的移植工作。
4.经检索发现,公开号cn111309451a的中国专利于2020年06月19日公开了一种实现docker镜像交叉编译的方法,具体包括以下步骤:s1、在docker镜像交叉编译环境系统上安装qemu-user-static服务程序,s2、检查linux系统中的binfmt_misc是否注册对应的模拟器配置,s3、确定需要交叉编译的docker镜像的cpu架构类型,s4、编写构建docker镜像的dockerfile文件,不同目标cpu架构的docker镜像使用同一个dockerfile文件来构建,s5、通过查看生成的docker镜像中的标识来确认校验生成的docker镜像是否为目标cpu架构的镜像,本发明涉及计算机程序技术领域。该实现docker镜像交叉编译的方法,在启动应用编译环境时,能够完全的屏蔽掉底层硬件设施的差异,解决了跨平台交叉编译的问题,从而使得能够在快速启动应用交叉编译环境的同时,也能够屏蔽掉底层硬件差异带来的问题。
5.但是,该专利需下载基础镜像并更改tag,增加dockerfile环境变量,构建容器镜像的方法相对复杂。因此,基于buildah工具,研究并使用更为简单的方法,实现容器镜像的构建,仍然是本领域技术人员研究的方向。


技术实现要素:

6.为克服上述现有技术的不足,本发明提供一种基于buildah构建跨平台容器镜像的方法、系统及电子设备,使用更为简单的方法,实现容器镜像的构建。
7.本发明一方面提供一种基于buildah构建跨平台容器镜像的方法,包括,启用qemu模拟器,为构建跨平台容器镜像提供多种cpu架构;启用binfmt_misc,将目标平台的cpu架构转换为当前系统支持的cpu架构;启用buildah工具,传入目标平台的cpu架构信息,根据cpu架构信息拉取基础镜像,对多个目标平台的容器镜像进行构建。
8.上述技术方案中,调用qemu模拟器来执行不同cpu指令集;再调用binfmt_misc支
持工具,以便能够支持二进制,并在注册qemu模拟器时实际使用;最后采用buildah工具来构建跨平台的cpu架构的容器镜像,根据指定的cpu架构信息拉取特定的基础镜像,无需在文件做变量替换等方式,简化了dokcerfile编写和使用的复杂度。
9.优选地,将目标平台的cpu架构转换为当前系统支持的cpu架构,进一步包括:由qemu模拟器将通过binfmt_misc在linux内核中注册一个二进制转换处理程序,并在程序运行时动态翻译二进制文件,将目标平台的cpu架构转换为当前系统支持的cpu架构。
10.具体地,转换cpu架构,最终的效果看起来就像在本地运行目标cpu架构的二进制文件。
11.优选地,创建manifest,合并构建得到的多个目标平台的容器镜像,将合并的结果上传至镜像仓库。
12.具体地,将容器镜像合并之后整体上传到镜像仓库,避免单个多次上传;使用时也会根据跨平台的宿主机cpu架构自动拉取对应容器镜像,这对于容器镜像的管理和后续使用提供了便利。
13.优选地,构建跨平台容器镜像的形式包括但不限于命令行和dockerfile。
14.优选地,构建跨平台容器镜像的操作系统包括但不限于windows和linux。
15.优选地,若使用linux操作系统构建跨平台容器镜像,则需要手动启用binfmt_misc。
16.具体地,有多种实现方式方式手动启用binfmt_misc,包括“qemu-user-binfmt”,“qemu-user-static”,“binfmt”,设置可以利用docker,podman等运行容器实现该功能。
17.本发明还一方面提供一种基于buildah构建跨平台容器镜像的系统,用于实现所述基于buildah构建跨平台容器镜像的方法的步骤,包括,cpu架构提供模块,用于启用qemu模拟器,为构建跨平台容器镜像提供多种cpu架构;cpu架构转换模块,用于启用binfmt_misc,将目标平台的cpu架构转换为当前系统支持的cpu架构;容器镜像构建模块,用于启用buildah工具,传入目标平台的cpu架构信息,根据cpu架构信息拉取基础镜像,对多个目标平台的容器镜像进行构建。
18.优选地,系统还包括容器镜像合并模块,用于创建manifest,合并构建的不同cpu架构的容器镜像,将合并的结果上传至镜像仓库。
19.具体地,所述cpu架构提供模块为构建跨平台容器镜像提供多种cpu架构;所述cpu架构转换模块将跨平台的cpu架构转换为当前系统支持的cpu架构;所述容器镜像构建模块通过一个dockerfile构建不同cpu架构的容器镜像;所述容器镜像合并模块合并构建的不同cpu架构的容器镜像,将合并的结果上传至镜像仓库。
20.本发明另一方面提供一种电子设备,所述设备包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时,实现所述基于buildah构建跨平台容器镜像的方法。
21.与现有技术相比,本发明的有益效果包括:
22.(1)本发明调用qemu模拟器来执行不同cpu指令集;再调用binfmt_misc支持工具,以便能够支持二进制,并在注册qemu模拟器时实际使用;最后采用buildah工具来构建跨平台的cpu架构的容器镜像,根据指定的cpu架构信息拉取特定的基础镜像,无需在文件做变量替换等方式,简化了dokcerfile编写和使用的复杂度;
23.(2)本发明采用的buildah工具支持oci标准的容器规范,buildah不同于docker的进程运行模式,而是一个二进制程序,并且不需要root权限即可完成构建,相对于docker更稳定更安全;
24.(3)本发明构建跨平台容器镜像之后,建立manifest,将容器镜像合并之后整体上传到镜像仓库,避免单个多次上传;使用时也会根据跨平台的宿主机cpu架构自动拉取对应容器镜像,这对于容器镜像的管理和后续使用提供了便利。
附图说明
25.图1为根据本发明实施例的方法流程图;
26.图2为根据本发明实施例的方法过程图;
27.图3为根据本发明实施例的系统结构示意图;
28.图4为根据本发明实施例的电子设备连接示意图。
具体实施方式
29.以下将结合附图对本发明各实施例的技术方案进行清楚、完整的描述,显然,所描述发实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施例,都属于本发明所保护的范围。
30.本发明公开了一种基于buildah构建跨平台的容器镜像方法、系统及电子设备,利用本方法可以对代码进行一次编译构建跨平台运行。本方法首先对构建计算机安装qemu模拟器来执行不同cpu指令集;之后安装binfmt_misc支持工具,以便能够支持fix-binary(f)标志,并在注册qemu模拟器时实际使用;最后安装buildah来构建不同操作系统和目标平台的容器镜像。本发明能够以非root权限和无需守护进程的方式方便快捷的构建跨平台的容器镜像,真正做到一次构建,多平台运行,解决了程序编译过程中的繁琐步骤。同时利用buildah替换掉docker,做到构建过程的安全可控。
31.如图1-图2所示,本发明一方面提供一种基于buildah构建跨平台容器镜像的方法,包括,启用qemu模拟器,为构建跨平台容器镜像提供多种cpu架构;启用binfmt_misc,将目标平台的cpu架构转换为当前系统支持的cpu架构;启用buildah工具,传入目标平台的cpu架构信息,根据cpu架构信息拉取基础镜像,对多个目标平台的容器镜像进行构建。
32.进一步地,创建manifest,合并构建得到的多个目标平台的容器镜像,将合并的结果上传至镜像仓库。
33.具体地,目标机器指代对容器镜像进行构建的机器,目标平台指代对构建完成的容器镜像进行使用的机器。
34.方法具体包括:
35.步骤1:在目标机器上安装qemu并启动,qemu支持许多常见的cpu架构,包括arm、power-pc和risc-v等,使得目标机器能够模拟各类cpu,这是能够构建不同cpu平台容器镜像的基础。
36.步骤2:在目标机器上安装并启用binfmt_misc,qemu将通过binfmt_misc在linux内核中注册一个二进制转换处理程序,并在程序运行时动态翻译二进制文件,根据需要将
系统调用从目标cpu架构转换为当前系统的cpu架构。最终的效果看起来就像在本地运行目标cpu架构的二进制文件。
37.步骤3:安装buildah工具,对目标代码进行构建,并将生成容器镜像进行上传到仓库;buildah支持oci标准的容器规范,buildah不同于docker的进程运行模式,而是一个二进制程序,并且不需要root权限即可完成构建。因此相对于docker更稳定更安全。采用buildah分别构建各种cpu平台容器镜像,创建合并manifest,之后一并上传到镜像仓库。
38.进一步地,所述步骤2中,如果使用的是linux,需要手动启用binfmt_misc,有多种实现方式方式。包括“qemu-user-binfmt”,“qemu-user-static”,“binfmt”,设置可以利用docker,podman等运行容器实现该功能。
39.进一步地,所述步骤2中,在构建机器上启用qemu和binfmt_misc。如果目标cpu平台不被支持,需手动重新编译qemu。binfmt_misc有多种启用方式,在“/proc/sys/fs/binfmt_misc/”目标下验证是否启用了目标平台。
40.进一步地,所述步骤3中,在构建机器上安装buildah,编译安装,二进制安装即可。
41.进一步地,所述步骤3中,buildah的
“‑‑
arch”选项传入目标平台信息进行构建。
42.进一步地,所述步骤3中,buildah构建中跨cpu平台的容器镜像,构建形式包括但不限于命令行,dockerfile,构建机器操作系统包括但不限于windows,linux。
43.进一步地,所述步骤3中,构建不同cpu架构的容器镜像,只需要一个dockerfile,构建时会根据命令行指定的cpu架构拉取特定的基础镜像等,无需在文件做变量替换等方式,简化了dokcerfile编写和使用的复杂度。
44.进一步地,所述步骤3中,buildah创建manifest,合并对应的各个平台容器镜像。构建生成不同架构的容器镜像之后,建立manifest,这样可以将容器镜像合并之后整体上传到仓库,避免单个多次上传。推送时也会根据宿主机架构自动拉取对应容器镜像,这对于容器镜像的管理和后续使用提供了便利。
45.进一步地,所述步骤3中,buildah push镜像到镜像仓库,需要指定
“‑‑
all”参数,以确定是否将已经构建完成的容器镜像全部上传至镜像仓库。
46.进一步地,buildah实现的功能,docker需要通过新版本的buildx插件才能实现这些功能,仅仅通过docker无法实现。而且buildah能合并构建的多个平台的容器镜像到镜像仓库。
47.如图3所示,本发明还一方面提供一种基于buildah构建跨平台容器镜像的系统,用于实现所述基于buildah构建跨平台容器镜像的方法的步骤,包括:cpu架构提供模块,用于启用qemu模拟器,为构建跨平台容器镜像提供多种cpu架构;cpu架构转换模块,用于启用binfmt_misc,将目标平台的cpu架构转换为当前系统支持的cpu架构;容器镜像构建模块,用于启用buildah工具,传入目标平台的cpu架构信息,根据cpu架构信息拉取基础镜像,对多个目标平台的容器镜像进行构建。
48.系统还包括容器镜像合并模块,用于创建manifest,合并构建的不同cpu架构的容器镜像,将合并的结果上传至镜像仓库。
49.具体地,所述cpu架构提供模块为构建跨平台容器镜像提供多种cpu架构;所述cpu架构转换模块将跨平台的cpu架构转换为当前系统支持的cpu架构;所述容器镜像构建模块通过一个dockerfile构建不同cpu架构的容器镜像;所述容器镜像合并模块合并构建的不
同cpu架构的容器镜像,将合并的结果上传至镜像仓库。
50.如图4所示,本发明另一方面提供一种电子设备,所述设备包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时,实现所述基于buildah构建跨平台容器镜像的方法。
51.术语或缩写的含义:
52.buildah buildah是一个用于构建oci(open container initiative)镜像的开源工具。
53.qemu是一个主机上的vmm(virtual machine monitor),通过动态二进制转换来模拟cpu,并提供一系列的硬件模型,使guest os认为自己和硬件直接打交道,其实是同qemu模拟出来的硬件打交道,qemu再将这些指令翻译给真正硬件进行操作。
54.binfmt_misc是linux内核的一项功能,其使得内核可识别任意类型的可执行文件格式并传递至特定的用户空间应用程序,如模拟器和虚拟机。
55.docker是一种虚拟化技术的产品,属于一种“容器”。同时docker也是一种构建运行容器的工具。
56.cpu是中央处理器,是计算机的主要设备之一,功能主要是解释计算机指令以及处理计算机软件中的数据。
57.manifest是容器镜像的资源清单。
58.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1