Docker docker 解决环境部署时因为服务较多编译较慢的问题,是否可行?

黑山老妖 · May 08, 2019 · Last by dive replied at June 12, 2019 · 823 hits

之前看了社区论坛里一位大佬的关于docker的帖子,里面提到可以用docker解决代码打包部署时因为编译项目多导致很慢的问题。但是里面没具体说到是怎样实施的。所以发个帖子向各位请教下,看本人这样做是否可行。
举个例子:我公司开发语言是go,项目里有30个微服务,每次更新测试环境,都是先git checkout branch,再git pull下代码,然后make 编译这些服务,再reload所有服务,至此环境更新好。
但是每次最慢的就是在make这30个服务,要花个2,3分钟。我是觉得很慢的。所以打算弄个镜像,里面包含go语言环境,和测试环境一样的环境变量,及git服务。
1.根据镜像起10个容器,容器占用内存不需要很大,因为我只需要在容器内编译服务,不启动服务,所以不要很大内存。每个容器指定只编译其中3个服务,然后挂载到测试环境的build目录中。
2.测试环境写个脚本,每次更新代码时,都是同时执行这10个容器内的脚本,这样原来需要花3*60=180s的编译时间,现在缩短了十分之一,只需要18s。
3.挂载到测试环境后,就reload下服务,测试环境更新完成。

疑惑点:
一个宿主机内起10个容器,在执行脚本,让10个容器并行编译服务,是否真的能做到“并行”?因为假设宿主机是4核8g的配置,那么最多也只能并行4个容器编译吧.

共收到 6 条回复 时间 点赞

每次部署都需要更新所有服务?如果是这样 可能要考量一下服务设计是否合理了 依赖过多?

AngryTester 回复

因为每次更新,都是因为其中7,8个服务的代码有新提交。如果只单独更新这些有变动的服务,那就需要make server1;make server2;一个个对照变动的服务手动编译。还不如先make clean掉所有之前编译的,再make all 编译所有的服务,来的便捷。
另外就是,其实我就是想知道别的公司,当需要编译部署很大量的服务很耗费时间时,通过这种多容器部署是否能缩短编译时间,以及其它公司是否是通过这样操作的😃

黑山老妖 回复

对代码编译这种耗CPU,又耗内存的,在单台物理机上并行并没有太大作用,并行处理只对IO密集型有很好的效果。
你的这种需求唯一的办法就是用多台物理机Agent,一起编译。

arrow 回复

有2点疑问。
1.在linux宿主机里起10个docker虚拟机,忽略内存和cpu不足,编译时效果是否等同于10台物理机?
2.假设宿主机配置很差不是配置是2核4线程,能够做到并行4,但10个并发也能缩短不少时间吧

黑山老妖 回复

感觉你对docker理解有误,docker最大的作用是资源隔离,管理;你开10个docker,和你开10个编译进程是一样的效果,在这里docker可以说没有任何作用。
一般来说都是用多个agent,每个agent上同时编译的项目都是有限制的(2-4个,看配置 )。

你的这种情况,最好是能分开编译,一次就只编译一个你需要的服务,可以通过写一些脚本,来判断每次git push的时候的改编有哪些,然后正对性的编译。推荐你用gitlab-ci或者drone来试试。还有就是go的持续集成其实可以参考之前b站不小心开源的,里面有个rider,就是专门编译go的

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up