笔者在一家供应链公司,主要业务是跨境商品,公司研发部门成立于2016年4月,仍是比较年轻的,项目开发采用传统的MVC架构,平台交易量不是很大不大。docker
之前咱们发布应用一般把应用打成war包而后交付给运维,由运维统一上线,可是会出现这么一个状况,就是运维对应用的配置不是很清楚,有可能出现配置不当或者由于某些环境差别致使应用发布失败,而采用docker后,开发只须要提交代码到Jekins,而后Jekins检测到版本库是否有更新,若是有代码更新则自动构建打包成image镜像,而后上传至docker registry,运维要作的就是在docker registry获取最新的image而后发布就好了,这样就避免了上诉状况的发生。架构
笔者之前犯过这样一个错误,一个商品搜索系统由于修改了某些代码,上线后Elasticsearch抛出了异常,由于没有备份上一个war包,因此就需找出问题所在而后从新编译源代码及修改配置,最终生成war而后再从新上传,致使咱们搜索服务瘫痪了2个小时,当时就想,若是把war包打成docker镜像,而后上传至docker registry ,这样若是线上出问题,就能够拉取上一个image,由于上一个版本的镜像就存在本地,因此回滚到上一个版本就是分分钟的事了,固然也能够写一些脚本自动化完成。并发
当项目设计高并发,这时项目须要横向扩展,传统作法就是加机器,可是一些公司申请机器是很是耗时的工做,就拿笔者公司来讲,要申请一台机器最起码要3天时间,时间太慢,这时候就可使用docker来解决这个问题,就是使用公用CASS平台或自建CASS平台,这样当并发来时,就能够在分钟级别启动多个容器来承载更多的并发,当峰值过去了,就能够动态缩容,避免资源浪费。运维
项目要尽量简单化,不必为了技术而技术,适合本身才是作好的。高并发
在使用docker时要思考下下面几项。学习
是使用 docker自带的调度仍是k8s又或者是mesos?学习成本如何?设计
以上是个人一点总结,系统大神们斧正。日志