Docker环境的持续部署优化实践 (8)

经过以上优化我们实测后发现,一个28台主机的项目在优化前上线要花10分钟左右的时间,优化后只要2分钟左右,效率提高80%

多环境下配置文件的处理

我们采用了项目代码打包进镜像的镜像管理方案,开发、测试、预发布、生产环境配置文件都不同,所以即便是同一个项目不同的环境都会单独走一遍部署发布流程打包镜像,把不同环境的配置打包到不同的镜像中,这个操作太过繁琐且没有必要,还大大增加了我们的上线时间

用过k8s的都知道,k8s中有专门管理配置文件的ConfigMap,每个容器可以定义要挂载的配置,在容器启动时自动挂载,以解决打包一次镜像不同环境都能使用的问题,对于没有用到k8s的要如何处理呢?配置中心还是必不可少的,之前一篇文章《中小团队落地配置中心详解》有详细的介绍我们配置中心的方案

我们处理不同配置的整体思路是,在Docker启动时传入两个环境变量ENVT和PROJ,这两个环境变量用来定义这个容器是属于哪个项目的哪个环境,Docker的启动脚本拿到这两个环境变量后利用confd服务自动去配置中心获取对应的配置,然后更新到本地对应的位置,这样就不需要把配置文件打包进镜像了

以一个纯静态只需要nginx服务的项目为例

Dockerfile如下:

FROM nginx:base COPY conf/run.sh /run.sh COPY webapp /home/project/webapp CMD ["/run.sh"]

run.sh脚本如下:

#!/bin/bash /etc/init.d/nginx start && \ sed -i "s|/project/env/|/${PROJ}/${ENVT}/|g" /etc/confd/conf.d/conf.toml && \ sed -i "s|/project/env/|/${PROJ}/${ENVT}/|g" /etc/confd/templates/conf.tmpl && \ confd -watch -backend etcd -node=http://192.168.107.101:2379 -node=http://192.168.107.102:2379 || \ exit 1

Docker启动命令:

'docker run -d --env ENVT=%s --env PROJ=%s --restart=always --name=%s -p 80:80 %s' % ( self.environment_name, self.project_name, self.project_name, self.image_url)

做到了一次镜像打包多环境共用,上线时也无需再走一次编译打包的流程,只需更新镜像重启容器即可,效率明显提高

写在最后

缺少编排的容器是没有灵魂的,继续推进编排工具的运用将会是2019年工作的重点

实际上我们在Docker改造稳定后,内网开发测试环境部署了一套k8s集群用到现在已经一年多的时间比较稳定

线上用到了多云环境,一部分线上项目已经使用了基于k8s的容器编排,当然还有一部分是我上边介绍的纯Docker环境

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwpspx.html