前段时间,一篇名为《 Docker 实战:一部失败史》的文章在 2B 圈子引起一片哗然。原文作者的主观意愿不得而知,当然我们也不是动机论的拥趸,仅作为一名再普通不过的容器技术创业者身份,聊聊我们的 Docker 实战:一部奋斗史。
Docker 并不是一门新技术。如果你之前就使用其他容器技术,那么上手 Docker 会很简单;之前不了解容器技术也没有问题,只是一些容器的思维需要你去了解,然后再去使用。就像使用智能机之前,并不是一定要使用非智能机作为铺垫。
Docker 公司推出的以容器管理为核心的一整套工具是在已有技术( LXC ,并借助 SCM 的设计思想)的基础上做的延续性改进,所以 Docker 并不是一门新技术,他的创新在于思想层面,总结起来有以下几点:
1.打包(封装)
Docker 利用容器技术将软件的代码和环境打包在一个镜像中,这是它的技术特性。从思想层面考虑,它改变了软件交付方式,让软件的生产者将软件做出了之后交付到最终用户那里保持绝对的一致性。通俗地讲,容器技术将软件的运行与环境彻底隔离了。
给大家举个例子:
Windows 系统大家都用过,自 Windows 问世以来,微软花了十几年的时间,一直到 Win7 才基本上解决一个困扰了多年的问题——共享动态链接库的隔离。说得通俗一点就是隔离每个软件的依赖文件使之互相不受影响。
问题是怎么产生的呢?
软件是由不同公司编写的,但库又是共享的,因此随着软件的发布,软件厂商会将自己的动态库打包发布,到了用户那里直接安装。大家别忘了这个是共享库, A 软件用 A 版本的, B 软件用 B 版本的,最终我们可爱的操作系统就因为安装一些软件被搞崩溃蓝屏,坠入到平均 1 个月重装一次系统的循环当中。
微软的共享链接库隔离,说白了就是要减少软件对系统的依赖性,但微软做了这么多年都没能做到彻彻底底的隔离。
但到了 2013 年 Docker 做到了,它用了巧妙的方式将软件和依赖的文件(环境)封装成包(镜像)。当我看到这种方式来解决软件交付问题的时候,仿佛感到一丝带着情感的风吹到我的心坎里一样!“ Docker 太 TM 了解我们这帮开发者了”。当我将这种方式(思想)传达给运维兄弟的时候,运维兄弟迷茫的双眼顿时发出一道闪电,恶狠狠的扔出来一句: “我 和谐和谐,再也不用一次次折腾环境了!”
2.隔离
新技术都是在旧有技术上“生长”出来的, Docker 最早基于 LXC 技术并进行技术革新,但任何技术的演化都与其当时所处的时间点是有关系的。 2013 年虚拟化技术正在逐步成熟,处于快速增长期,业界都在围着虚拟化技术来争抢市场份额,目的是为了抓住云计算这杆大旗。
但虚拟化技术是“生长” 在物理设备上的技术。它本质上是优化物理设备的使用效率。它没有抓住云计算的要害。但以 Docker 为代表的容器技术的出现,它与虚拟化技术完全不是在一个维度上的产品。容器技术解决的是软件交付效率和成本的问题,它直达了用户的最终诉求。云计算的最终目的不就是为了提升产品的交付效率,降低交付成本吗?虚拟化技术提供土壤,容器技术才得以开花结果!
既然是隔离,那么容器技术的隔离只需要保证软件和主机之间的隔离就可以了。谈什么隔离性不好,拿容器当虚拟机用的同学们可能还需要调整下思路。
任何事物都有其适用性,技术也是如此,“不要因为手里拿把锤子,看什么都像钉子。”
3.发布
截至目前,镜像仓库可以说是 Docker 最伟大的发明!它将镜像以代码仓库的形式进行版本管理,并支持通过 Push/Pull 的方式来发布和分发镜像,它为软件的交付提供了载体。
我们已经感受到了代码管理和分布式开发的便利,镜像仓库为我们提供了软件的版本管理和全球分发。想想我们以前经历,以及正在经历的获取软件的方式吧!你用或者不用,镜像仓库就在那里。
额外说一句,那次全球的 docker 大罢工对企业生产环境会造成影响,尤其是《 Docker 实战:一部失败史》文章作者说的互联网金融公司的场景,我觉得这个问题大家看看就好,这应该是作者开的玩笑。
我们的奋斗史 [简短且主观]
13 年初,我们开始接触 Docker 。在刚推出时, Docker 虽然还是个带着实验性质的产品,但完全可以进行完整的测试。请注意这里面的完全和完整两个词, Docker 虽是个新鲜货,但是实践证明测试环境下是没有问题的,所以我们尝试将其用在生产环境下。
14 年初,公司内部自行研发出了一套容器管理系统,使用在内部开发和部分服务的生产环境中,又一次证明生产环境下也是没有问题的。(注:们在 2014 年 3 月份已经将容器应用到生产环境中, 当时 Docker 的版本是 0.9.0 ,我们生产环境的规模是 4 台 2U 的惠普服务器, 32G 内存。没有发生任何线上事故。)
15 年 4 月,我们从之前的公司出来创业,把三年的落地经验和不断迭代的产品,拿来进行商业化运作,最终面向用户的是产品基于容器技术的应用管理平台。我们为什么能放弃现有的一切,投身于才刚刚出现 2 年的技术来创业呢?
一是因为我们看到了未来的发展方向,发现了另外一个维度的市场。容器技术能真正发挥云计算简捷高效的特点。
二是考虑到还有很多在努力填坑的朋友和公司,为了让他们更快的享受云计算和容器技术带来的红利(《一部失败史》恰恰验证了我们的这个想法)。
结语
只要有解决问题的思想,能用钱解决的问题都不是技术问题。
本文作者周悦秋,好雨联合创始人 文中提到《 Docker 实战:一部失败史》 原文链接: http://t.cn/RVFtYi9 THEHFTFGUY “ Docker in Production: A History of Failure ”