返回介绍

张大胖的 docker 之路

发布于 2025-02-16 11:28:22 字数 3158 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文