可能是鄙人的拙见,不过Docker真的相当了不起。

    在不久以前应用程序还是一些庞大的单体软件,独自运行在一堆钢铁和硅块上。这样的情况持续了很多年,它们拒绝改变,不思进取。对于那些想要快速前行的组织而言,这的确是一个难题,因此虚拟机的崛起也就不足为奇了。应用程序不必再和这些硬件捆绑在一起,这使得一切可以更快更替,也更加灵活。

    但是,虚拟机本身也很复杂。它们在其他的机器上模拟出整台计算机,而这台虚拟计算机仍然是异常复杂并且需要管理的。再者,因为虚拟机更小而且更容易被创建,所以围绕着它们也就产生了更多需要管理的东西。

    我们到底该如何管理所有的复杂性呢?通过配置管理可以办到,当然,这又是另外一个极其复杂的系统。

    Docker则采取了一种截然不同的做法。如果用户将软件放到一个容器里,它就会将应用程序本身的复杂度与基础设施相隔离开来,这使得基础设施本身可以变得更加简单,而应用程序也更加易于装配。基于这样的组织效率,与虚拟机相比,技术速度和执行效率都有了巨大的飞跃。容器的启动是毫秒级的,而不是分钟级的。内存是共享的,而不是预先分配的。这使得用户的应用程序能够以更低的成本运行,同样也意味着他可以按照想要的方式来架设应用,而不用再受缓慢的、不太灵活的基础设施的制约。

    在我第一次见到Solomon Hykes(即“Docker之父”)谈论Docker并将其与装载集装箱做类比的时候,我便意识到他正在做的是一件了不起的大事。全球航运业建立标准之前的混乱状态可以很好地用来类比容器出现以前管理软件的复杂状态。Solomon的观点非常有说服力,我甚至为此开了一家公司,专门围绕Docker构建工具,这家公司最终被Docker公司收购了,并且最终变成了我们现在所熟知的Docker Compose。

    初次见到Ian是在伦敦我们组织的某个Docker聚会(meetup)上。当时,我们坚称:“Docker还没有为生产环境做好准备,请不要在生产环境里使用它!”然而,Ian是何许人也,他无视这个看似明智的建议,一意孤行,非要让它运行在生产环境里。那时,他和Aidan一起为OpenBet公司工作,当我看到他们用我们当时的代码处理过的货币数额时,真的让我感到有点儿懵。

    Ian和Aidan发现,他们在使用Docker的过程中收获的价值超越了其测试阶段使用它时伴随而来的不便之处。他们在很早的时候便用上了这一技术,因此,对怎样更好地运用它也有自己独到的见解。他们在OpenBet内部构建的工具指出了Docker本身缺失的一些东西,而我们之间私下的一些闲聊也实际影响了我们所采用的设计和产品方向。

    Docker自Ian和Aidan第一次使用以来,已然有了一些长足的进步,到如今已有成千上万的组织在用它来解决遇到的真实问题,如更快地装配软件、管理惊人的复杂性、提高基础设施的效率、解决“这个在我机器上运行得好好的”问题等。这促使我们在构建、部署和管理软件方式上的巨大转变,并且围绕着它正在形成一套全新的工具及理念。容器化的美好前景的确是让人兴奋的,但是它同我们之前所习惯的方式也迥然不同。

    对读者而言,恐怕很难从这本书中看到怎样由此及彼,但是这本书中涵盖了大量如何应用Docker去解决自己当下遇到的种种问题的实用建议。遵循这些建议,用户的组织将能够快速前行。同时或许更重要的是,构建和部署应用的过程将会变得更有意思。

    Ben Firshman

    Docker公司产品管理总监、Docker Compose联合创始人