截至上周,Docker一直处于上升势头,这其中也涉及到一些实质性问题。对于当今许多产品的用户而言,使用Docker却是弊大于利的。Docker漂亮地吸引了开发者,尤其是在开发、测试以及CI环境下,但是它也确实破坏了生产。在DockerCon 2015的『Docker in Production』一主题中,我想开诚布公地谈谈Docker面临的挑战,以使它能适合产品的用例。这里提到的都不是新问题;它们均在GitHub中以某种形式存在着。其中绝大多数问题,我都已经在会议中提及,或已和Docker团队讨论过。本文不会明确指出哪些问题已经不复存在:例如,新的注册机制改进了旧版本的很多缺板。虽然许多看似存在问题的地方不会在文中提及,但是我个人坚信接下来提到的问题是至关重要的,需要在短时间内修复,以使得更多的组织能够在产品中使用容器。在Shopify,我们大规模地使核心平台运行于容器之上,现已超过一年时间,因此这里的列表无疑更倾向于本人使用Docker的经验。对于像Docker这样发展如此迅速的技术,保证一切通用基本是不可能的。因此,当你发现错误时,还望能够伸出援手。
在1.x的发行版中Docker引擎关注的是稳定性。Pre-1.5则是投入了少量工作来降低产品接入使用的门槛。开放容器生态模型是Docker成功所必须的,并且他们害怕破坏这个模型。当前,Docker迭代速度总是得忍受如下问题:每次UX变更都要经历过多流程。Docker 1.7则是发布了网络和存储插件牵头的实验性版本。这些特性被明确标注为“不适用于产品”并且随时可能会被移除或修改。对于那些已经押注Docker的公司而言,这是一则好消息,因为这将使得核心团队对于新特性完成更快速的迭代,且无需关心“最佳实践”中的向后兼容性。对于公司而言,修改Docker内核依旧很困难,因为这需要fork或是取得上游的采用,前者风险高,维护负担重,后者对于那些有趣的补丁而言则显得耗时费力。随着1.7版插件模式的公布,处理这类问题的策略变得明晰:使每个可选组件都是可插拔的。这种“水果拼盘”式的哲学于DockerCon Europe 2014首次引入,尽管还很模糊。在6月的DockerCon,很高兴地得知这个策略由作为第一纵列的Plumbing团队全权文档化(这对我是最重要的,因为海象是我最喜爱的海洋哺乳动物,而Plumbing正是以它作为吉祥物)[译者:呵呵]。正如过去2年一样,它现在依旧是一个痛处,即使未来终于看起来有点盼头了。
在Docker的第一次迭代中,它对于镜像构建、传输和运行时就走了一条捷径。它并不是针对每个问题选取正确的工具,而是选择了一个能够解决所有情况的工具:文件系统层。这种抽象一直暴露到在产品中运行容器。[译者:This abstraction leaks all the way down to running the container in production。大家自己理解下吧。。。]这是一种完全可以接受的最小成本的产品使用主义,但是其中的每个问题本都可以被更加有效地解决: