标签:
持续集成作为最先进的项目实践之一,近年来逐渐受到国内软件公司的重视;但对于许多朋友来说,可能从来都没有听说过持续集成这个词,抑或只是了解一个概念但并没有实践过。其基本拓扑结构如下所示:
熟悉Docker的朋友都知道,Docker以的启动是非常快的,可以说是秒启。在上述的五步中,1
和 5 的耗时是比较短的,整个持续集成主要耗时集中在中间的3个步骤,也就是 Docker build,Docker push ,Docekr pull 的时间消耗,这样还是无法达到我们如丝般顺滑的极致要求,下来我们来分析下Docker build、push、pull的耗时和解决方法:
Docker build
网络优化
DockerHub 的官方镜像在国外,由于众所周知的原因,在国内进行构建的时候网络会是很大的瓶颈,甚至某些公司的环境是无Internet连接的。
在这种情况下,建议使用国内的镜像源,或者自己搭建私有仓库,保存项目需要的基础镜像,把构建过程中的网络传输都控制在国内或者内网,这样就不用再考虑网络方面的问题。
2. 使用 dockerignore文件
dockerignore文件的设计是为了在Docker build的过程中排除不需要用到的文件以及目录,目的是为了Docker
build这个过程可以尽可能地快速高效以及构建出来的image没有多余的“垃圾”。
3. 最小化镜像层数(Layers)
把镜像层数减到最少可能加快容器的启动速度,但是这里也要权衡另一个问题:Dockerfile的可读性。你可以把一个Dockerfile写得很
复杂以达到构建出最小层数的镜像,但同时你的Dockerfile可读性也降低了。所以我们要在镜像层数和Dockerfile可读性之间做出让步与妥协。
Docker push
Docker Registry升级到 v2 后加入了很多安全相关检查,在v2中的镜像的存储格式变成了gzip ,镜像在压缩过程中占用的时间也是比较多的。我们简单分解一下
Docker push 的流程。
buffer to disk,将该层文件系统压缩成本地的一个临时文件;
上传文件至 egistry;
本地计算压缩包 digest,删除临时文件,digest传给 Registry;
Registry计算上传压缩包digest并进行校验;
Registry将压缩包传输至后端存储文件系统;
重复 1-5 直至所有层传输完毕;
计算镜像的 Manifest 并上传至 Registry 重复 3-5。
这样的设计导致push会很慢,如果采用官方的DockerHub的话,需要考虑Docker build章节中提及的网络方面影响,DockerHub公有镜像库还需考虑安全方面的因素。
同时Docker 和
Docker pull
Docker pull 镜像的速度对服务的启动速度至关重要,好在 Registry v2 后可以并行 pull 了,速度有了很大的改善。但是依然有一些小的问题影响了启动的速度:
下载镜像和解压镜像是串行的;
串行解压,由于 v2 都是 gzip 要解压,尽管并行下载了还是串行解压,内网的话解压时间比网络传输都要长;
和 Registry 通信, Registry 在 pull 的过程中并不提供下载内容只是提供下载URL和鉴权,这一部分加长了网络传输而且一些
Metadata 还是要去后端存储获取,延时还是有一些的。
通过刚才的分析,大家可以看到,其实Docker build、push、pull其实主要耗时是在网络传输(主要)及安全防范措施(轻微)上,整个传输过程甚至大大超过了其他所有步骤的时间;这样可以借助我们的AppHouse方便的搭建本地企业级镜像仓库,将网络传输转移至内网,同时完全掌控了
build、push和pull的过程,这样提高效率的同时也解决了安全问题,可谓一举两得。
经过Docker、AppHouse的帮助,我们距极致追求的如丝般顺滑的持续集成目标只有一步之遥,Docker解决了依赖和环境问题,AppHouse解决了镜像安全快速传输的问题,接下来就是容器的部署和管理问题。
Docker实现了底层技术的创新,它的出现将开发者从与系统的纠缠中释放了出来,但是阻碍企业使用Docker的问题是容器的大规模部署、管理问题和缺少企业级容器工具及系统。
镜像创建完成后,需要把它发布到测试环境和生产环境。因为Docker占用资源小,在单个服务器上部署成百上千个容器也不足为奇。这个阶段中如何更合理地使用Docker也是一个难点,开发团队需要考虑如何打造一个可伸缩扩展的分发环境。
AppSoar提供人性化的Web管理界面,丰富的Compose文件格式和功能完备的API接口,通过Compose实现以十分简单的文件描述复杂的应用结构,让部署变得更简单。并且,AppSoar还提供丰富的企业应用商店,让在一键创建服务成为可能。这样可以快速搭建应用场景,开发者只需要关注开发本身即可。
打通最后一个环节后,整个持续集成平台架构演进到如下图所示:
总结:
通过Docker+AppSoar+AppHouse的组合,开发团队在面对复杂的环境中,可以结合自己团队的实际情况,定制出适合自己的方案,从而打造出一套如丝般顺滑的持续集成系统。
标签:
原文地址:http://blog.csdn.net/yourun_cloud/article/details/51830334