「码呗学院」聊一聊互联网公司Docker容器化是如何实践的?( 五 )

docker镜像的构建方式有多种,最合理的一种莫过于Dockerfile了,但此时我们产线运行的项目已经非常多了,一个个往里面添加Dockerfile已经不现实,所以就提供了一个Dockerfile模板,里面标注了基础镜像信息,在项目构建的流程中,通过获取一些项目参数,动态生成一个Dockerfile文件,最后通过docker build生成镜像文件,然后提交到镜像库,这个过程对于开发人员完全无感知,就这样悄无声息的完成了项目格式的转化,并且对于不同类型的项目,提供了不同类型的Dockerfile模板,甚至可以通过项目做定制化。

上面说Dockerfile是动态生成并且对开发人员无感知的,而这个构建过程,也是通过执行容器实现的,通过容器挂载的方式,把构建的结果显示在宿主机上,这整个的过程都做成了docker镜像,并且使用Dockerfile管理这些镜像,通过不同的Dockerfile轻而易举的自定义各个类型项目的构建过程,比如node项目的构建和Java的构建不同,就定义两个Dockerfile就可以了,统一在gitlab上管理,维护成本变得非常低。

发布

项目构建完成,容器的的编排部署,主要是通过marathon操作。marathon本身提供了一些对外开放的api接口,这个开放接口也是我们做自动化基石。项目构建完毕,流程并没有结束。marathon管理的服务编排,主要是配置文件,定义应用,内存,端口,以及健康监测都是在配置文件里面管理的,所以基于此,我按照格式定义了一个项目,专门来管理这些项目的配置,并且把这些配置提交到gitlab上进行管理,项目结构如下:

推荐阅读