论文部分内容阅读
随着PaaS逐步兴起,以及DevOps和自动化运维的快速发展,基于Docker的容器虚拟化环境成为业务系统的主流部署运行环境之一。Docker生态体系仍然面临着诸多挑战,其中容器镜像的构建即是所要面临的重要问题之一。标准的容器镜像构建是通过执行领域特定语言Dockerfile的指令来实现的。然而,Dockerfile指令的复杂性要求编写者十分熟悉Dockerfile语法和语义,目前缺乏有效语法引导的工具支持,更没有对Dockerfile中可能的语义问题进行有效检测的方法和工具。Dockerfile任何语法错误均会导致镜像构建失败,隐含的语义问题会带来运行时的影响,因此,语法和语义问题的检查成为亟待解决的问题。 此外,Docker Hub上有大量常用容器镜像,直接选用Docker Hub中的容器镜像可以有效开展后期维护和更新效率。但是,Docker Hub上很多第三方镜像缺少Dockerfile描述,也缺少完整的功能和使用说明,甚至其中可能存在恶意容器镜像。缺少Dockerfile和相应说明,使得复用第三方镜像的难度大大增加,有违Docker系统设计的本来目的。 针对上述问题,本文设计了一种面向Dockerfile的容器镜像构建工具。首先,在分析Dockerfile语法特点的基础上,通过可视化编辑的方式来提供语法引导;其次,基于数据分析的方式,对DockerOne.io、开源中国、Stack Overflow等Docker活跃社区的Dockerfile常见语义错误进行了分类和统计,并针对每类语义错误给出了相应的错误检测方案;并对Dockerfile中存在的一些效率低下的构建方式进行了优化;最后,在深入解析Docker镜像存储和加载机制的基础上,给出了由Docker镜像到Dockerfile文件的逆向生成方法。用户可以根据生成的Dockerfile描述确定第三方镜像的组成和功能,也可以在Dockerfile基础上构建满足需求的新镜像进行容器镜像复用。基于以上关键技术,实现了一个面向Dockerfile的镜像构建工具,包含了可视化编辑,语义错误检测,逆向分析等主要功能。 论文通过案例研究,验证了该工具能够在镜像构建过程中提供有效的语法引导,对Dockerfile常见的语义错误进行有效检测以及优化,采用Docker镜像逆向生成Dockerfile的方式,可以帮助用户更好的构建Docker镜像并提高第三方镜像的重用率。