- 大话编程
- 一个故事讲完 https
- C 老头和 Java 小子的硬盘夜话
- 我是一个函数
- 操作系统是个大骗子?
- 90 后 老头儿 和 00 后 Go 小子的硬盘夜话
- 爱炫耀的数据库老头儿
- 浏览器:一个家族的奋斗
- 浏览器家族的安全反击战
- 黑客三兄弟
- 从读写分离到 CQRS,张大胖是如何解决性能问题的?
- 两个程序的爱情故事
- 两个程序的爱情故事(续)
- 烂代码传奇
- 机房夜话
- 干掉状态:从 session 到 token
- 张大胖的 docker 之路
- 从 SOA 到微服务
- XML 的传奇人生
- 从密码到 token, 一个授权的故事
- 编程世界的那把锁
- 加锁还是不加锁,这是一个问题
- 这个动物园, 两年也逛不完
- 张大胖和 CAP 定理
- 一个翻译家族的发家史
- 张大胖和单元测试
- Java 帝国
- 一个著名的日志系统是怎么设计出来的?
- Java 帝国之泛型
- Java 帝国之动态代理
- 从兄弟到父子:动态代理在民间是怎么玩的?
- Java 注解是怎么成功上位的?
- Java EE 要死掉了?
- Java 帝国之宫廷内斗
- Java 帝国之宫廷内斗(2)
- 当世界上只剩下一个 Java 程序员
- 持久化:Java 帝国反击战
- 什么是框架?
- 学习 Java 虚拟机没用? 听听当事人是怎么说的!
- 聊聊 Java 平台上的非 Java 语言
- Java 帝国之消息队列
- Java 帝国之 JMS 的诞生
- Java 帝国之单例设计模式
- 对 Java Inputstream 的一次采访
- ASM: 一个低调成功者的自述
- 序列化: 一个老家伙的咸鱼翻身
- Java IO 的自述
- JDK 先生最近有点烦
- 什么是框架(续)?
- 说 空话,做实事: 谈谈多态
- Kotlin 初体验
- 小白科普
- 小白科普:分布式和集群
- 什么是 Zookeeper?
- 小白科普:悲观锁和乐观锁
- 小白科普:LDAP 有什么用?
- 小白科普:服务那点事儿
- 小白科普:Netty 有什么用?
- 老司机经验
- 后端程序员都做些什么?
- 为什么要学习 HashMap 的底层原理?
- 小心,别被今日头条给困住了!
- 对自己狠一点,开始写作吧
- 开源代码啃不动,不如先定个小目标
- Python 这么简单还用学吗?
- 作为一个有追求的程序员,你应该掌握的七种武器
- 给设计模式说句公道话
- 时间是这么被浪费掉的
- 你真正付出了全部努力了吗?
- 写给初学者:编程的本质
- 在大学期间更应该学习什么?
- 看看 悲催 的码农得学多少东西?
- 学习编程的四兄弟
- 那些年,我后悔没做好的事情
- 我为什么对后端编程情有独钟?
- 当我们在学习编程语言时,我们在学习什么?
- 编程需要多少数学知识?
- 想成为编程高手,一定要学汇编吗?
- 你必须理解的计算机核心概念
- 你的需求是怎么描述的?
- 白话敏捷软件开发
- 人在职场
- 凡事必先骑上虎背,给性格内向的程序员聊几句
- 为什么能力优秀的人当了主管以后反而不行了呢?
- 不想做技术了,还有一条路
- 纪念我最有效率的一次加班
- 书写「简历」时,需要规避的错误。
- 上天还是入地?
- 工作 6 年,半路出家到 CTO
- 只是 Work 还不够,更重要的是 Think
- 我所尊敬的三位女程序员
- 我们向印度人学习什么?
- 你去下家面试,怎么评价你在这家公司做的工作?
张大胖的 docker 之路
1 悲催的开发环境配置
张大胖如愿跳到了这家新公司的研发部门,他摩拳擦掌,准备大显身手。
按照入职的惯例, 配置一个本地的开发环境必不可少。 兴冲冲的大胖看到组长发过来的配置文档,不仅倒吸了一口凉气 :竟然有几十页之多 !
细细一看, 足足有 48 个步骤, 我的天呐!
组内的老人们对新人投来了怜悯的目光, 其中不乏夹杂着幸灾乐祸, 似乎想起了本人刚入职时配置环境那惨不忍睹的时光。
大胖做了一次深呼吸,定了定神,正式开始苦难的历程。
从 SVN 上下载代码, 解决编译错误, 咦,怎么缺少这么多的 jar 文件?
好心老梁赶紧说: 我把 jar 文件发给你, 那个配置文档太老了, 有 两年都没人更新了。
大胖心里一声叹息,但是他很细心,一边配置环境,还一边修改文档。
他立志要搞一个最新版的出来: 从我开始, 后面的新人再也不用受折磨了。
可是谈何容易, 缺失的 jar 文件还好办, 设置好 Build Path 以后把他们都 commit 到 SVN 上, 下次再有人下载,编译的依赖就自动解决了。
其他的就有点麻烦了,安装 nginx , tomcat ,mysql, redis .... 哪个都不是省油的灯, 安装路径的选择、配置文件的修改,端口的设定, 最后还得把它们连起来。
经过九九八十一难, 终于到了文档的最后一步: 运行。
不过所料, 控制台一大堆错误信息触目惊心, 似乎在嘲笑每个新人的无能。
大胖心中一万只神兽奔腾而过, 他感到了强烈的无助感。
老梁坐着那高档的程序员专用椅滑了过来: “怎么样? 滋味不好受吧, 要不要我帮你一下?”
张大胖还能说什么, 老将出马,一个顶俩。
可是这一次老司机也翻车了, 老梁折腾了很久, 满头大汉 , 总是有一个运行时错误解决不了。
临近中午, 老梁说: 算了, 先去填饱肚子吧。
大胖下午继续抖擞精神,把上午安装的系统删掉,重新再来一遍, 小样, 不信我搞不定你。
3 个小时过去了, 到了运行的时候,还是同样的错误。
第二天再来一遍, 还是同样错误! 难道是人品问题? 本来想大显身手,展示自己深厚的编程功底, 没想到在这个小阴沟里一直出不来了。
第三天,大胖干脆把机器格式化了, 看成败,人生豪迈, 只不过是从头再来。
这一回老梁也在旁边盯着, 结对配置, 每一条配置命令都被仔细检查了 100 遍, 到了中午时分, 大胖热泪盈眶的看到 : 系统终于可以跑起来了!
2 配置一次,到处运行
所有的坑都找到了, 所有的坑都被填上了。
张大胖也陷入了沉思: 这个过程是在是太痛苦了, 怎么才能改进一下?
这么多步骤,这么多配置, 要是事先都弄好了, 直接拿过来用该多好!
大胖灵机一动 :把这些配置好的 Tomcat, Mysql, Redis...... 之流搞到一个虚拟机中不行吗? 新人来了, 直接下载一个配置好的虚拟机, 开箱即用, 再也不用理会这么多啰里啰嗦的细节了。
张大胖是个实干家,马上卷起袖子实验, 可是结果却不尽如人意。 一是虚拟机太大,二是慢的要死, 这都喝了 3 杯咖啡了还没启动完。
一次偶然的机会, 张大胖听到同事们在聊 Docker, 简单的看了下相关的资料,他马上联想到, 既然虚拟机这么笨重, 何不用轻量级的 Docker 来解决问题呢?
和虚拟机一样, 把 Tomcat, Mysql , Redis 这些软件先配置好,形成一个项目特有的 docker 的镜像, 任何人只要得到这个镜像就可以用 docker 引擎运行起来,形成一个容器,对外提供服务。
张大胖迅速尝试了一下,果然是轻量级, 运行起来像闪电一般,起身倒茶的功夫就启动完成了。
老梁很赞赏大胖这种实干的精神,把外界流行的技术引入项目中来, 既学了新技术, 又提高了生产效率, 一举两得,双赢。
老梁自告奋勇做了第一个测试用户,也是异常的顺利,真是 Build Once, Run Anyware 啊, 于是 docker 慢慢的在项目组中流行开来。
3 稳定压倒一切
在项目的周例会上,张大胖又提出了一个新想法 : “既然我们开发都开始用 docker 了, 能不能把测试环境甚至生产环境也都改变成 docker ? 这样以来部署应用程序就很方便了, 直接把镜像运行起来就可以了。”
开发组的人纷纷赞同,想想将来只需要把一个镜像放到生产环境就可以部署了,多么美好的前景啊。
但是负责运维的老王表示反对: “这没必要吧? 三年前我们已经把生产环境给搭好了, 一直以来都没什么变化, 你说的那些本地的配置问题,在生产环境上根本就不存在, 为什么要用 docker 这个新技术? 搞坏了生产环境谁负责?”
看来老王是很抵触啊, 张大胖想,不过也难怪,生产环境,稳定压倒一切。
想想也是,生产环境都配置好了,现在升级应用无非就是把 web 代码,数据库的 sql 交由老王去执行,大部分情况下还是自动化的, 改动配置的机会寥寥无几,必要性确实不太大。
不过老王也是很开明的, 他接着说: “你们不是在搞一个新的项目吗, 可以拿它来尝试一下啊, 开发,测试,生产全部都用 docker, 如果确实是可以平滑的过渡, 那以后我们就推而广之。 ”
老梁说:“ 没错, 新技术尝试,慢慢来吧。"
虽然没有争取到生产环境也使用 docker, 但张大胖对 docker 是越来越喜欢了, 他还额外发现了 docker 的另外一个好处,那就是可以轻松地尝试新的技术。
原来想折腾一个新玩意, 在遇到依赖的情况下,特别麻烦,一个包接一个包的下载, 如果遇到被墙,那更是痛不欲生。 现在只需要下载一个包含新技术/新工具的镜像,运行起来即可, 实在是太体贴了!
不仅如此,有一次客户要求演示正在开发中的新项目, 往日按照项目经理的要求,搞一个可用的演示系统那可是费了劲了,现在只需要把镜像 copy 给项目经理,直接就可以用了, 真是方便。
Build once , run anyware, 张大胖算是体会到了。
后记:本文主要讲了 docker 的一个应用场景: 简化环境的配置,docker 还有很多其他优点,例如 docker 和微服务就是一对好基友, 感兴趣的同学可以看一看。
此外,当你试图引入一个新技术到项目的时候, 一定要看看新技术能解决什么问题, 能给项目组带来什么价值, 这样更容易成功。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论