1.悲催的发展环境配置张大胖如愿以偿跳槽到了这家新公司的研发部,他正摩拳擦掌,一展身手。按照入门的做法,配置本地开发环境是必不可少的。兴奋的小胖看到组长发过来的配置文件,倒吸一口冷气:有几十页啊!仔细一看,一共有48步,天哪!老人们对新人投来了同情的目光,其中不少还夹杂着幸灾乐祸的目光,仿佛想起了自己刚入职时配置环境糟糕透顶的惨状。胖子深吸一口气,定了定神,正式开始了苦难之旅。从SVN下载代码,解决编译错误。咦,怎么少了那么多jar文件?好心的老梁连忙说:我把jar文件发给你。配置文件太旧了,两年了都没人更新。胖子在心里叹了口气,不过他还是很小心的,边修改文件边配置环境。他决心打造一个最新版本:从我做起,新人不再受苦。不过说起来容易做起来难,丢失的jar文件好办。设置构建路径后,将它们提交到SVN。下次有人下载它们时,编译依赖将自动解决。其他的就有点麻烦了。装nginx、tomcat、mysql、redis……无一不是省油的灯。安装路径的选择,配置文件的修改,端口的设置,最后还得连上。历经九十九、八十一难,终于到了文档的最后一步:运行。不过果然不出所料,控制台上一大堆的错误信息让人触目惊心,似乎在嘲笑每一位新人的无能。万兽从胖子心头疾驰而过,他感觉到了强烈的无助感。老梁在那高级程序员椅上溜过去:“怎么样?感觉不太好,要不要我帮你?”不过这次老司机也翻车了,老梁折腾了半天,满脑子都是大佬,总有运行时错误解决不了。临近中午,老梁说:算了,先填饱肚子吧。下午胖子继续打气,把早上装的系统删掉,重新开始,demo,不信我搞不定你。3个小时过去了,到了运行的时候,还是一样的错误。第二天再试,还是一样的错误!是人品问题吗?本想大展身手,炫耀一下深厚的编程功底,却没想到自己永远也走不出这个小阴沟。第三天,胖子干脆把机器格式化了,看成败,人生豪迈,从零开始。这一次,老梁也是盯着一旁,配对配置,每条配置指令都仔细检查了100遍,中午时分,大胖眼眶湿润地看着:系统终于可以运行了!2.配置一次,跑来跑去把所有的坑都找出来,把所有的坑都填上。张胖子也陷入了沉思:这个过程太痛苦了,要怎么改善呢?这么多步骤,这么多配置,要是都提前做好了,拿过来用就好了!胖子灵机一动:把这些配置好的Tomcat、Mysql、Redis……之类的东西放到一个虚拟机里可以吗?新手来了,只要下载一个配置好的虚拟机,开箱即用,再也不用担心那么多啰嗦的细节了。张胖子是个实干家,立马撸起袖子试了试,结果却不尽如人意。一是虚拟机太大,二是速度极慢。我喝了3杯咖啡,还没有开始喝。一次偶然的机会,张大胖听到同事们在谈论Docker,简单看了下相关资料后,他随即想到,既然虚拟机体积这么大,为什么不用轻量级的Docker来解决问题呢?和虚拟机类似,先配置Tomcat、Mysql、Redis,形成项目专用的docker镜像。任何人拿到这个镜像,就可以用docker引擎运行起来,形成一个容器,对外提供服务。张胖子赶紧试了试,果然轻巧,跑起来像闪电,一站起来倒茶就启动了。老梁很佩服胖子吃苦耐劳的精神。他将外界流行的技术引入到项目中。他学习新技术,提高生产效率,一举两得,实现双赢。老梁自愿当了第一个测试用户,非常顺利,真正的BuildOnce,RunAnyware,于是docker逐渐在项目组流行起来。3、稳定压倒一切。在项目周会上,张胖子提出了一个新的想法:“既然我们已经开始使用docker进行开发,是否可以把测试环境,甚至生产环境都换成docker?这样,我们就可以部署应用了。”非常方便,直接运行镜像即可。”开发组的人都赞同,认为以后生产环境只部署一个镜像,前景一片大好。但负责运维的老王却反对道:“这不是没有必要吗?我们三年前就搭建了生产环境,从那以后一直没有变化。不存在的,为什么要用docker这个新技术?破坏生产环境谁负责?看来老王很抗拒啊,张大发心想,不过生产环境稳定也难怪。想一想,生产环境已经配置好了,现在升级应用无非就是把web代码和数据库SQL交给老王执行。大部分情况下还是自动化的,改配置的机会很少,所以真的没必要。大的。不过,老王也很豁达。他接着说:“你不是在做新的项目吗?你可以试试看,开发、测试、生产都用docker,如果真的能顺利过渡,那我们以后再推广。”“老梁说:“对,试试新技术,慢慢来。”虽然生产环境没有用到docker,但张大发却越来越喜欢docker。另外还发现了docker的另一个好处,就是很容易尝试新技术。本来想折腾个新玩意儿的。在依赖的情况下,就特别麻烦。如果你一个一个地下载包,万一遇到墙,那就更蛋疼了。现在你只需要下载一个包含新技术/新工具的镜像,就可以运行了。真是贴心!不仅如此,有一次客户要求演示一个正在开发的新项目。以前,根据项目经理的要求,一个可用的系统需要费很大力气去演示,现在只需要复制镜像给项目经理,就可以直接使用了,真是方便的。Buildonce,runanyware,张胖子已经实现了。后记:本文主要说说docker的一个应用场景:简化环境的配置,docker还有很多其他的优点,比如docker和微服务是一对好朋友,有兴趣的同学可以看看。另外,当你在项目中尝试引入新技术时,一定要看新技术能解决什么问题,能给项目组带来什么价值,这样才更容易成功。【本文为专栏作家“刘欣”原创稿件,转载请通过作者微信获取授权公众号coderising】点此查看该作者更多好文
