APP下载

基于领域知识的Docker镜像自动构建方法

2021-01-21陈伟叶宏杰周家宏魏峻

大数据 2021年1期
关键词:指令方法

陈伟,叶宏杰,周家宏,魏峻

1. 中国科学院大学,北京 100190;2. 中国科学院软件研究所,北京 100190

1 引言

在传统软件开发过程中,开发部署和运行演化两阶段相互割裂,各阶段数据汇聚与知识提炼、关联与运用程度低,难以快速响应需求变化。为此,开发运维一体化(DevOps)[1]被提出,旨在加强开发和运维部门之间的沟通协作,提高软件运行演化过程中生产活动的效率和质量。DevOps的引入对软件产品的开发、测试、交付和运维有重要意义。

Docker[2]是当前主流的容器技术,在DevOps中被广泛使用。Docker容器是Docker镜像的实例,封装了软件应用程序及其系统依赖项(即操作系统和相关软件包),构建了保证软件系统能够正常运行的环境。Docker镜像成为DevOps中软件系统构建和发布的主流制品形式,Docker容器则成为复杂分布式系统部署和运行的主流基本构成。Dockerfile是基于领域特定语言(domain specific language,DSL)编写的脚本代码,用于构建Docker镜像,并实例化Docker容器。Dockerfile包含一组构建Docker镜像的指令序列[2],声明了构建镜像时使用的操作系统、安装的软件包以及安装顺序等。

尽管Dockerfile被广泛用于构建Docker镜像,但人工编写Dockerfile十分复杂且容易出错,Dockerfile质量问题导致的Docker镜像构建失败案例普遍存在[3]。一方面,Dockerfile指定了镜像构建的系统环境配置,特别是软件包之间的关联和依赖、软件包与操作系统的兼容性、软件下载安装的操作以及顺序等,需要全面的领域知识;另一方面,人工编写Dockerfile时的拼写错误、语法错误、违反最佳实践[4]和Dockerfile坏味(bad smell)[5]等质量问题难以避免。例如,在为Python代码片段构建Docker容器运行环境时,开发人员平均要花费2 h编写Dockerfile,但是仍难以保证Python代码片段正确运行[6]。……

登录APP查看全文

猜你喜欢

指令方法
听我指令:大催眠术
学习方法
ARINC661显控指令快速验证方法
LED照明产品欧盟ErP指令要求解读
杀毒软件中指令虚拟机的脆弱性分析
用对方法才能瘦
四大方法 教你不再“坐以待病”!
赚钱方法
捕鱼
一种基于滑窗的余度指令判别算法