论容器的价值

未来开发人员使用容器将是普遍现象,容器会和与代码管理工具一样成为程序员必知必会的技能。

企业使用容器技术如同习武之人修炼武功一样,不同的阶层发挥出不同的威力。我在此粗略的划分成三个阶段, 每个阶段有不同的价值体现。

在仅懂些皮毛的时候,容器非但不能发挥出任何作用,反而会成为一种负担,那属于入门之前的阶段,如看到一大串 docker启动参数瞬间吓尿,感叹这都是些什么玩意儿。。。 如对docker网络云里雾里,敬而远之 如觉得装docker比装 自己的业务还麻烦 如不知道容器为啥不能连通 在这个阶段很容器勿用,滥用,不知道怎么用容器。

未入门的阶段我这里就不详细展开了。

初级阶段价值体现 - 部署服务,业务

指令式与描述式

运气不错的话恭喜你装成功了。运气差点的,各种依赖库不兼容,无故启动失败等等。 运气再差点,版本装错了。。。删掉 再来一遍吧

那个谁,来了台新机器,把环境搞一下。。。 (容我先思考一下人生意义。。。)

有了docker: asciicast 然后就没有然后了。。。

然而这只是个mysql而已,实际的业务比这多,比这复杂,我们曾经部署一套系统,三十多个组件,五十多台服务器,仅用了不到 一个小时全部部署完毕。没有容器的话真的是个体力活。同样一个项目组,没有使用容器技术,投入三倍人力,加班加点一个星期 部署完毕。

虽然上面的整个安装过程做到了一键部署,不过对于Docker新手来说是个挑战,一大串命令简直不知所云,想想,算了,还是自己老实的一步一步部署吧,熟悉容器比按步骤安装mysql还复杂。事实也确实如此,容器技术很通用,能做到“一劳永逸”,不过这“一劳”也是需要付出很多代价的。这也就是很多公司不愿意“一劳”而无法“永逸”的原因。

中级阶段价值体现 - 开发运维一体化

asciicast

上述过程是这样的,对开发人员来说,提交一下代码,然后运行容器 然后网站就部署好了。改了代码,升级部署不过两三分钟的事。有了这样的神器将给企业节省多少成本!上面虽然只是个简单的hello,world例子,不过即便你是一个大型服务什么的同样适用,无本质区别。容器的好处就是通用,无关语言,无关框架,我们甚至GPU的应用都已经跑在容器中了。

而实际上持续集成组建帮助我们做了很多事, 在push的那一刻,持续集成的组件获取到了git仓库的push事件,然后去仓库里拉去代码,使用指定的基础镜像环境对代码进行构建,编译,编译完跑测试用例然后提交到镜像仓库,整个过程完全自动化!

写完配置就非常省事了。然而其中的“一劳”是得搭建和配置这些服务,写Dockerfile什么的,用起来也不是件容易的事。

高级阶段价值体现 - 弹性计算

假设业务高峰期时需要使用1000台服务器,那我们就一直给这个业务一直配备1000台服务器?这显然是极大的资源浪费。我们应当根据业务的实际需求动态调整业务拥有的资源。 这就涉及到一个高级话题:弹性计算。

弹性计算当然也会包含比如业务量逐年增加需要作一些扩容时