资讯专栏INFORMATION COLUMN

老肖语录 | 使用 Docker 做 CI 解惑

luffyZh / 2195人阅读

摘要:年肖德时先生加入,担任内部工作组。老肖语录是肖德时先生推出的个人公众号栏目,他利用这个公众号记录自己创业路上的点点滴滴,不时会有精彩的技术感悟与分享,欢迎大家关注。

我今天看到一篇网友分享的 php 环境下的Docker持续集成案例。笔者大胆的试用后尝到了容器技术的甜头,也在文中提出了一个没有解决的困惑。 原来他是把代码放在容器外面,通过挂载目录的方法把代码加到容器里面运行的。这样虽然跑起来很快,但笔者感觉这和 Docker 的口号 build、ship、run 还是有很大的区别。当然,他把代码放在镜像里,每次变动都需要花上十几分钟等镜像build,push 到仓库后才能run发布,这个过程笔者也接受不了。这个网友的疑惑是构建镜像本身拖慢了集成的速度,这和一般情况下采用新技术能提高生产力的故事在直觉上是说不通的。

我想提提自己的看法。首先,Docker镜像本身是一个压缩包,每次即使只改几个文件,也需要把整个项目压缩一遍,没法增量压缩。所以,如果你的开发过程中需要频繁的改内容的时候,用 Docker 先打镜像再发布的流程就是一种反作用力,直接降低你的生产力。这个时候,你巧借 Docker 容器的环境一致性,直接把源码挂载到容器里面运行的做法应该是一个好办法。

我也意识到 Docker 对 CI这一块并没有考虑那么周到,还是需要我们自己来解决遇到的问题。比如本地的测试,可以考虑使用 vagrant 来解决,如下面的例子,很巧妙:

如果我们把 CI 的问题再扩展到 CD,上面源码是否放到镜像里面,仍然有很多可以讨论的地方。对于 Docker 的 build,ship,run一样有很多冲突,我是这么理解的:

build过程,从Docker 宣传的口号来说,源码作为服务组件的组成部分,确实应该放在镜像当中。但是,在没有 Docker之前,我们的源码也是打包的,这方面系统方面的安装包已经足够强大。但之前的安装包一定是需要你编写依赖环境的,每一种系统要写一个 spec。在有了 Docker 之后,这个困难就没有了。因为,你的依赖环境就在镜像里面,不需要额外的考虑环境的变化。所以,代码挂载进来也不会影响环境。

ship 是为镜像仓库为中心,你可以把 镜像存到仓库里面,也可以把镜像拉在主机上。代码作为经常变化的部分,并不能把镜像作为不可变的组件特性给发挥到极致。所以,源码在镜像里面打包分发也不一定是好事。

run 的部分是秒开应用以及依赖的环境。把源码打包到镜像里面后,Run 新版本的镜像,就需要 stop 老镜像。毕竟有一个停起的过程,如果没有灰度发布的过程,这个更新镜像的过程就是中断服务的。


上面的困惑虽然小,也能让我们看到 Docker 的使用是需要花心思的。盲从的乱用 Docker 并不能给你带来甜头,反而会让你更烦恼。希望大家一起探讨起来,一起发现一些困惑,一起来探讨解决。

肖德时先生现任数人云CTO,在数人云负责下一代DCOS组件的选型和整合,让众多DCOS
组件能无缝连接,提供支持微服务架构下轻量级PaaS平台。

肖德时先生曾就职于多家知名IT公司,擅长企业级工具软件的设计及实现,拥有十五年计算机行业从业经验。2010年肖德时先生加入Redhat,担任内部工作组Team
Leader。

”老肖语录“是肖德时先生推出的个人公众号栏目,他利用这个公众号记录自己创业路上的点点滴滴,不时会有精彩的技术感悟与分享,欢迎大家关注。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26548.html

相关文章

  • 老肖有话说:雾霾天带你看清Crane技术实现之路

    摘要:今天为大家介绍的容器管理工具是数人云基于最新技术的一个开源项目。今天从技术角度分享一下数人云从设计到开发的实践之路。从控制面板说起数人云是一家开源技术的公司,最初希望做一个开源项目,相当于做了一次内部创新。数人云的技术栈是,正好与十分密切。 小数表示最近雾锁京城真是有些可怕,迷迷蒙蒙让人看不清远处,大家外出也要注意防霾哦! 容器管理面板Crane,是 数人云的第一个开源项目,那...

    Alliot 评论0 收藏0
  • 老肖有话说:如期而至的Swarm新工具Crane开源解读

    摘要:更多技术栈的包容数人云技术团队为了帮助广大技术爱好者对新版本有快速直观的感受,制作了一款基于最新特性的容器管理工具,具备一定容器开发经验的开发者可以通过它在第一时间体验的新特性。可以说,数人云是在技术能否持续下去的争论中发布的工具。 showImg(https://segmentfault.com/img/bVD5g2?w=900&h=500);中秋节前, 数人云技术团队推出了一...

    andot 评论0 收藏0
  • 解惑|你是否为容器监控操碎了心?

    摘要:系统监控容器数量容器监控应用监控每个主机监控数量主机监控项以主机为中心的监控体系容器作为主机,以主机为中心将有两个问题无法解决容器作为主机,因为容器生命周期非常短暂,所以监控系统会认为一半主机在频发故障。 导读:容器对于物理机和虚拟机,单从监控上看就不是一个数量级的,但监控又是至关重要的,没有监控如同闭眼开车。 本次分享邀请数人云运维总监庞铮,本文将从以下几个方面聊聊容器监控的相关思考...

    韩冰 评论0 收藏0
  • 如何使用GitLab和Rancher构建CI/CD流水线 – Part 2

    摘要:第一部分的内容介绍了如何部署配置和确保在的运行。这一部分中,我们将介绍如何使用构建容器,以及如何使用容器配置项目。除此之外,我们还将涉及如何用建立容器并部署到上。 这是我们使用GitLab和Rancher构建CI/CD流水线系列教程的第二部分。第一部分的内容介绍了如何部署、配置和确保GitLab在Rancher的运行。这一部分中,我们将介绍如何使用GitLab CI Multi-Run...

    maybe_009 评论0 收藏0
  • 容器环境下的持续集成最佳实践:构建基于 Drone + GitFlow + K8s 的云原生语义化

    摘要:集成测试完成后,由运维同学从发起一个到分支,此时会会运行单元测试,构建镜像,并发布到预发布环境测试人员在预发布环境下再次验证功能,团队做上线前的其他准备工作运维同学合并,将为本次发布的代码及镜像自动打上版本号并书写,同时发布到生产环境。 云原生 (Cloud Native) 是伴随的容器技术发展出现的的一个词,最早出自 Pivotal 公司(即开发了 Spring 的公司)的一本技术小...

    asoren 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<