生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

Docker 会是改变世界的那只“箱子”吗?

  • 2016-05-26
  • 本文字数:5708 字

    阅读完需:约 19 分钟

“很多时候,我们面临未来的预测和期望,其实很多答案已经存在在历史中。”

改变世界的“箱子”

“没有集装箱,就不会有全球化。”《经济学家》这个评论可以说是对于这个普通的箱子的历史性地位的一个总结。1956 年 4 月 26 日,当集装箱之父麦克莱恩第一次将集装箱这种方式用于货物运输时,他肯定想像不到他的这个看似普通的发明,会对这个世界的影响如此深远。因为如果把全球经济比作一个高速运转的复杂的机器,那么以集装箱为核心的现代运输体系就是带动这台机器高速运转的齿轮和传送带。

这只普通的箱子,技术含量不高,也并不复杂。和其他很多伟大的发明一样,它的发展也是历经坎坷。集装箱的概念在 20 世纪二三十年代就出现了,但是直到 1957 年,才由麦克莱恩开始运用于大规模的货物运输。在之后,经历了码头工人的抵制,标准化之争,直到 20 世纪 70 年代中后期才大规模流行开来,但是一旦它开始普及,就立刻掀起了一股巨大的变革性的浪潮。站在浪潮之巅的国家和港口,快速地崛起。而落后于浪潮的人和物,被时代快速地抛弃。无数国家的命运因此而改变。整个世界的生产体系被重构。它带来了商品生产的地域分布的改变、协助方式的改变、分工的改变。不仅仅影响整个行业,更影响了我们每一个人的生活。

很多时候,我们面临未来的预测和期望,其实很多答案已经存在在历史中。对于传统行业如此,对于高速发展的 IT 行业,更是如此。在 IT 的世界里,是否已经出现了这样一只改变它的“箱子”呢?

Docker,IT 领域的“箱子”

Docker,顾名思义,是码头工人的意思。它从诞生起,就和集装箱的思想有着千丝万缕的联系。Docker 的发展历史,其实很像集装箱早期的发展史。和传统的集装箱萌芽一样,Container(容器)技术其实早在多年前就出现了。从 2005 年的 Solaris Containers 到 2008 年 LXC 0.1 版本的推出。再到后来的 Google 推出开源的容器管理工具 lmctfy。也将近经历了 10 年的发展。直到 2013 年,Docker 的出现。才代表着容器技术一个新的时代的来临。

很多人将 Docker 等同于 Container,其实这是不对的。就像传统的集装箱运输体系一样,集装箱只是其中一个最核心的部件,用它来代表整个以集装箱为核心的运输体系。那么 Docker 其实就是以容器为核心的 IT 交付与运行体系。它包括了 Docker Engine(容器的运行管理),Docker Registry(容器的分发管理),以及相关的一系列的 API 接口。包括后来发展起来的 Docker Machine,Swarm,Compose。 所以可以看做是一套以容器为核心的创建、分发和运行的标准化体系。

如果把 Container 比作是传统领域的集装箱,那么承载集装箱的港口就可以看做是云的服务商,集装箱的拖船可以看做是云服务所提供的 IaaS 服务。Docker 公司弄出的 Docker Machine 之类的可以看做是一种集装箱的吊装设备。当然,作为一套推动全球经济快速运转的航运体系,不仅仅只有这些,还有无数的基础设施,包括高速公路,集装箱的拖车,将货物装入集装箱的叉车,搬运工人。另外,还有一套软的设施,包括各类的标准,集装箱的交付流程。所有的这些,我们都可以从 IT 世界里面的看到他们的身影。

所以说,Docker 是一套以容器技术为核心的思想和一套标准化体系。它不是一个技术,也不是一个公司。Docker 不等同于现在的 Docker 公司,和它的发展和兴衰没有必然的关系。

Docker 会改变 IT 世界吗

Docker 会是改变 IT 世界的那只”箱子“吗?下这个结论还有点早,但是我们可以从传统的以集装箱为核心的航运体系的发展史来预测一下它的未来。首先,来看看现代航运体系中,最核心的那个东西,也就是集装箱,它是什么时候发明的?其实在上世纪 20 年代就已经在使用了。但是为什么一直到上世纪 70 年代才开始流行开来。因为那个时候,集装箱仅仅是一个工具,仅仅是防止损坏和被盗。它没有融入到全社会的协作体系中。1956 年,集装箱之父麦克莱恩,第一次将它用到大规模的货物运输,这个时候,它才由一个单纯的工具,开始发展成一种新的观念和体系,才开始逐渐融入到全产业链条的运转中去。到上世纪 70 年代中期,各种专用的集装箱港口、拖船、吊装设备开始普及和完善,这才代表一个新的时代的开始。以集装箱为核心的现代航运体系,开始取代了旧式的货运体系。

我们再来看看 Docker 的发展历史。容器技术其实早在 10 多年前就出现了,但是为什么很少人知道它?因为那个时候,它仅仅只是一个虚拟化的技术,只是从一个角度解决了 Run 的问题,没有看出相比 KVM、XEM 有太多的优势。2013 年,Docker 的出现是一个标志性的节点。它首次提出了 Build、Ship、Run 的概念,将容器技术向 IT 产业链条的上游和下游进行了延伸。从软件的使用领域,延伸到了软件的生产领域,以及软件的发布领域。同时借助于容器技术,打通了 DevOps,极大提高了软件领域的生产率。但是,相比传统集装箱的坎坷道路,它还有很多路要走。全产业界已经接受了以容器镜像为主要形态的软件发布模式了吗?应用的执行都基于容器了吗?分布式以及微服务架构已经非常普及了吗?显然没有。

Docker 刚开始出现时,很多人觉得它和 Java 很像,所谓的一次构建,随处执行。但是 Docker 和 Java 其实有本质性的区别的,Java 只是解决了执行环境的兼容性的问题,或者说它只觉得了 Run 的问题,并没有把这个技术延伸到 IT 产业链条的各个环节中,所以注定它只是一个重要的技术,而不能成为改变世界的创新。

集装箱也好,容器也罢,当我们思考,什么样的技术,才是一种颠覆性的技术时,一般从下面几个维度去思考:

  • 它是否带来整个产业生产力的大幅度提升?
  • 它是否融入到了整个产业的价值链条中去了?
  • 整个产业是否围绕它进行分工和协作?

Docker 是否是一种改变未来 IT 产业的颠覆式创新?这里我大胆地给出肯定的答案,至少,从集装箱的发展史,看到了它未来的样子。

Docker 会对 IT 领域带来哪些改变

集装箱航运的发展史,就是一部产业兴衰史。在这个链条的无数的人和物的命运都被改变。有的国家、有的港口因此快速崛起。而有的则被时代所抛弃。它消灭了很多传统的工作岗位,同时也带来了很多新兴的职业。中国这样的发展中国家,因此能够快速融入到全球的协作体系中去,实现了自己的快速崛起。Docker 未来会对 IT 产业带来哪些改变呢?这个问题,的确值得所有人深思。

IT 产业分工方式的变革

传统的 IT 产业,大部分是以项目的方式来运行。客户招标,软件系统的开发商和集成商负责开发。当完成客户的需求以后,搭建系统进行测试,最后部署到客户的执行环境。这期间还需要负责系统的调试,费时费力,如果有新的模块时,还需要重新的部署、调试。系统的开发者、运营者、客户之间,无法划分一条清晰的界限。这很像传统的航运业里面,客户需要自己把一件一件货物搬到轮船上,费时费力。这种模式注定了无法进行大规模的分工协作,所有的模块需要全部集中在一家大的公司进行开发。应为协作的方式,导致的沟通成本太高。

如果未来,所有的系统,全部是以容器镜像的方式去发布,任何云的服务商都可以去执行这些计算负载。很多不同的模块完全可以外包到世界各地的团队去完成,只要模块之间以微服务的方式,定义清晰的接口。完成开发后,push 到统一的镜像仓库。软件系统的运营者,从仓库 pull 到镜像,放到任何的云的系统去执行。所有的团队之间,都有统一的交付界面。大大降低了协作成本。所带来的直接好处是,扫除了软件众包的方式的最大障碍。软件众包会成功一个非常流行的 IT 生产方式。

运维角色的转变

集装箱航运史上,码头工人是个非常悲剧的角色、一开始,抵制集装箱,认为会大大减少他们的工作机会,到后面,当浪潮来临,其实是无法抵挡的。整个的职业基本上就消亡了。大家现在在码头上,肯定看不到那种扛货物的码头工人的。但是并不是人消亡了,而是职业消亡了,取而代之的是各类的吊装设备的操作工人、集装箱的调度管理人员。

Docker 的英文意思就是“码头工人”,其寓意就是 Docker 这种东西,取代了码头工人的传统工作,是机器的延伸。传统运维,如果仅仅是安装软件、配置系统、备份拷贝文件、部署和发布,如果所有的系统都是容器镜像的方式去发布,所有的计算负载都是在云上面去执行,就像传统的码头工人一样,消亡是必然的。当 DevOps 真正实现后,开发和运维,其实界限越来越模糊了。人更多的是从事更有创造力的工作。

企业应用市场的兴起

Apple Store,带来了 2C 领域软件开发新的商业模式。那么企业应用市场会有怎样的创新呢?如果所有的软件系统,全部是以容器镜像的方式发布。那么企业应用市场将是一个非常重要的入口。相比于 2C 领域,企业应用市场还是有一些不同点。未来,会呈现两种模式。一种是公有的企业应用市场。另一种是私有的企业应用市场。中小型公司,或者比较传统企业,会倾向于从公有的企业应用市场获取软件服务。而比较大型的公司,会倾向于建设自己的企业应用市场。不管是哪种模式,必然会带来,IT 生产领域的分工的细化和全球化。就像目前 iPhone 手机上的 APP 所走得道路一样。

云服务商会重新洗牌

建立在传统 IT 模式下的云服务商,主要依赖的绑定用户建立竞争壁垒。Docker 技术会弥合各个云之间的鸿沟,计算负载可以在各个云的服务商之间自由流动。此时传统的竞争壁垒不复存在了。从集装箱航运的历史看,云计算的服务商,好比是传统集装箱运输体系中的港口。伦敦港的迅速衰落,而荷兰的鹿特丹的快速崛起。为我们提供很好的历史经验。最快速地拥抱这种变革的港口,会快速地崛起,而传统利益之间艰难抉择的港口,会很快被时代抛弃。当计算可以自由流动时,更好的开放的姿态接纳这种流动,更快速地规模扩张,降低单位计算的成本,是在未来云计算竞争中胜出的关键因素。

云计算的厂商当前要做的不是设置障碍,阻止计算的流动,也不是推出自己特有的容器的服务,去充当航运公司。因为这不会获取任何的竞争优势。反而是要积极参与 Docker“航运”基础设施的建设。标准的制定,有更好的“集装箱堆场”(镜像仓库),兼容各种集装箱拖船的吊装设备,让自己的航船更经济,有效的运输各个航运公司的集装箱。

Docker 未来之路在哪里

Docker 发展的现阶段,很像集装箱刚开始用于航运的最初的那几年。整个产业链条尚不完善。价格并不比传统货运更有优势。客户大部分处于观望状态。所以出现了不同的道路的分歧。总结起来,有下面三种道路。

容器技术往下走,取代传统的虚拟机

基于 Docker 在安全和隔离性上面存在的一些问题,以及用户对传统机器根生地固的使用习惯(容器当虚拟机在使用),有一种声音是容器应该网 IaaS 层发展,去取代传统的虚拟机,然后再通过 Docker 这样一套体系去管理起来。我觉得未来可能不是这个方向,因为传统的 IaaS 层已经非常成熟了,传统的虚拟化技术,也没用遇到很大问题,Docker 再去解决计算、网络、存储的问题,是重复性的工作,是为了技术而技术,并不会对产业生态带来任何的好处。这非常像传统航运体系中,曾经在一个特殊时期,发展起来的一种特殊的模式,就是用拖船运送带集装箱的卡车。集装箱,不需要长出轮子。已经从历史经验去证明了。

容器技术往上走,取代传统的 PaaS

传统的 PaaS 的确遇到了很大的问题,容器技术往上走,去替代传统 PaaS 也是必然的趋势之一。但是,我觉得这只是副产品,Docker 主要的变革,并不是去改变 PaaS。未来 IaaS、PaaS、SaaS 之间的界限越来越模糊。有可能是一个新的名词,譬如 CaaS(Container As A Service)。计算单元都是以容器为单位。上世纪 60 年代,越战期间,以集装箱为单位运送战略物资时,美军提出了一个著名的 3C 原则,也就是一个集装箱,只运送一种货物,一个目的地。这个原则,同样适用于容器,也就是 Docker 公司提出的一个主要原则:一个进程,只跑在一个容器里面。所以,集装箱就是最基础的计算单元。

私有云的容器服务

现阶段,公有云上搭建 Docker 系统,的确鲜有比较成熟的商用案例。因为要实现稳定的商用环境,一方面需要 Docker 技术,特别是网络技术的不断成熟。另外一方面,也需要公有云的 IaaS 层专门针对容器服务的深度融合。现阶段公有云上跑容器服务,就和上世纪 50 年代,用老式货船运输集装箱业务。反而是私有云领域,得到了较为广泛的应用,国内大的互联网公司,纷纷在自己的私有云中实践 Docker。但是大部分依然是比较传统的使用方法,也就是将容器当虚拟机用,利用 Docker 的 Build 和 Ship 的体系,实现自己的 DevOps。私有云的容器服务,只是特定时期的特定现象。长远看,公有云逐步取代私有云是必然趋势。随着 Docker 技术的越来越成熟,分布式以及微服务架构的应用越来越广泛,私有云容器服务会成为历史。

Docker 的未来在哪里呢?其实很难预测未来的方式。但是在 IT 产业界,两个原则是永远不变的。

  • 简单的东西,永远是最有生命力的。
  • 客户永远只会关注他的业务,不会关心除此之外的任何东西。

Docker 只要不停地让客户使用或者维护 IT 系统越来越简单,永远只需要关心自己的业务,而不必费心其他的东西。我相信这就是它未来的方向。

后记

麦克莱恩发明了集装箱,并且在此基础上,建立了一个庞大的商业帝国。但是,很可惜,在上世纪 80 年代却破产了,其实他并没有犯什么大的错误,就是跑慢了。当一股浪潮来临时,只有在浪尖上的一群人,才能迸射出绚丽的浪花。落后于浪潮的人,则很快被新的浪花所掩盖。2001 年,当这个老人逝世时,全世界所有的集装箱货船同一时刻拉响了汽笛。给予这位老人已最崇高的敬意。

若干年后,或许 Docker 公司已不存在,但是它所带来的思想,会流传更久的时间。我们同样期待看到业界对它以及那群天才所创造的一切,致以相同的敬意。

作者简介

刘永峰 腾讯云高级产品经理,Docker 布道师,2011 年加入腾讯,近十年的研发以及产品经验。曾负责过流媒体服务器架构设计、操作系统性能优化、云监控系统架构设计等相关技术研发工作,以及基础云、云监控、游戏云相关的产品设计工作,在技术和产品领域具有丰富的行业经验。目前主要关注领域包括企业云化趋势、基于云端的系统架构实践、Docker 技术的发展以及在云计算领域的应用。


感谢陈兴璐对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-05-26 17:463706

评论

发布
暂无评论
发现更多内容

天天都是520

Neco.W

爱情 表白日

Redis 命令执行过程(下)

程序员历小冰

redis 源码分析

识别代码中的坏味道(四)

Page

敏捷开发 面向对象 重构 CleanCode 代码坏味道

推动敏捷,就是推动软件业变革

盛安德软件

敏捷 推动软件业变革

企业数字化转型:用 SpreadJS 打造互通互链的电力系统物联网

葡萄城技术团队

数字化转型 SpreadJS 电力

SpringBoot瘦身

JFound

Spring Boot sprnig

关于架构的几件小事:System context

北风

系统架构 系统性思考 架构师 系统上下文 极客大学架构师训练营

Enhanced Github:一个 GitHub 专用的好插件

非著名程序员

GitHub 程序员 效率工具

Elastic Stack 系列专辑

Yezhiwei

elasticsearch Logstash Kibana ELK Elastic Stack

如何做好 To B 的 SAAS 服务

路边水果摊

SASS 企业 服务

SQLite是什么

山楂大卷

sqlite 数据库 RDBMS 存储

为提升网点业务员效率,我们做的事情。

黄大路

商业

nginx 概念及上手

HelloZyjS

程序员需要了解的硬核知识大全

cxuan

Java c 计算机基础

kotlin 200行代码开发一个简化版Guice

陈吉米

Java kotlin guice ioc mynlp

JVM源码分析之Java对象头实现

猿灯塔

敏捷为什么会失败之「PA-SA-WAKA-DA」理论

Worktile

Scrum 敏捷开发 Agile

Redis6.0 多线程源码分析

代码诗人

redis 源码 技术 线程模型

万字长文带你看懂Mybatis缓存机制

程序员小岑

Java 源码 技术 mybatis

竟然有人想看我的「日记」,满足一下大家

非著名程序员

学习 程序人生 提升认知

回“疫”录(22):我以为结束了,其实才开始

小天同学

疫情 回忆录 现实纪录 纪实

JVM源码分析之synchronized实现

猿灯塔

JavaScript 基础拾遗(一)

hq

Java 学习 文章收集

ARTS_20200520

凌轩

Java ARTS 打卡计划

Android | Tangram动态页面之路(五)Tangram原理

哈利迪

android

职场“潜”规则

L3C老司机

个人成长 职场 新人 人才培养 能力模型

Django的ListView超详细用法(含分页paginate功能)

BigYoung

Python django ListView 分页

当我们持续感觉很糟糕要怎么办

董一凡

写作 生活质量 情感

2020年全球经济萎缩,火花国际PLUS逆袭而来闪耀数字经济

极客编

深入剖析ThreadLocal原理

JFound

Java

我的编程之路-4(进阶)

顿晓

进阶 看书 编程之路

Docker会是改变世界的那只“箱子”吗?_语言 & 开发_刘永峰_InfoQ精选文章