Docker,一个似乎熟悉而又陌生的词汇。码头工人?容器?还是条鲸鱼?

很多人都看过Docker的logo,一个背着一堆集装箱的鲸鱼。

Docker是什么?他为什么受到了那么多人的关注,为什么那么多人喜欢用它?

Docker的出生

在直接Docker之前,我们先来看看Docker的前身,dotCloud

dotcloud.png

2010年,几个搞IT的年轻人(秃头程序猿),在美国旧金山成立了一家名叫“dotCloud”的公司。

这家公司主要提供基于PaaS的云计算技术服务。具体来说,是和LXC(Linux容器虚拟技术,Linux container)有关的容器技术。

后来,dotCloud公司将自己的容器技术进行了简化以及制定了标准,并给他起了个响亮的名字——Docker。

docker.png

Docker也就这样诞生了

Docker技术诞生之后,并没有怎么引起行业的关注。而dotCloud公司,作为一家小型创业企业,在激烈的竞争之下,也步履维艰。日子过得并不好,公司的收入也很难维持一帮人的正差生活

正当他们快要坚持不下去的时候,他们决定将其开源,尝试碰碰运气。

什么是开源?开源,就是开放源代码。也就是将原来内部不对外公开的程序源代码开放给所有人,然后让大家一起参与进来,贡献代码和意见。世界上最有名的开源的项目之一——Linux,可以说是开源的的鼻祖。Linux也在所有参与维护的程序员的改进下茁壮成长。

linux.png

有的软件是一开始就开源的。也有的软件,是在闭源的情况下没有能力维护了,创造者又不想放弃,所以选择开源。自己养不活这个娃了,也就只能忍痛让它去吃“百家饭”了嘛。

2013年3月,dotCloud公司的创始人之一,Docker之父,28岁的Solomon Hykes(现已从Docker离职)走出了艰难的一步。正式决定,将Docker项目开源。

Solomon Hykes.jpg

事情立马出现了翻天覆地的改观。越来越多的IT工程师发现了Docker的优点,然后蜂拥而至,加入Docker开源社区。

Docker的人气迅速攀升,速度之快,令人瞠目结舌。开源当月,Docker 0.1 版本发布。Docker快速发展,此后的每一个月,都会发布一个版本。到2014年6月9日,Docker 1.0 版本正式发布。

此时的Docker,已经成为行业里人气最火爆的开源技术,没有之一。各大头部科技公司自然也没有忽视它,Google、微软、Amazon、VMware这样的巨头,都对它青睐有加,表示将全力支持。

Docker火了之后,dotCloud公司2013年10月29日决定进行更名,把公司名字改成了Docker Inc. 。

为什么Docker那么受欢迎

Docker和容器技术为什么会这么火爆?说白了,就是因为它真的很“轻”。

在容器技术发展之前,业界的网红是虚拟机。而其中虚拟机技术的代表,是VMWare和OpenStack。

Vmware.png

相信很多人都用过虚拟机。虚拟机,就是在你的操作系统里面,装一个操作软件,然后通过这个软件,将本身的硬件进行分割,再模拟一台甚至多台“子电脑”出来。

VSphere.png

在“子电脑”里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以切割出好几个“子电脑”,里面都开上QQ。“子电脑”和“子电脑”之间,是相互隔离的,互不影响。即使其中一台中病毒导致崩溃了,其他虚拟机也可以丝毫不受影响的正常运行。

虚拟机属于虚拟化技术。Docker这样的容器技术,也是虚拟化技术的一个分支,但是它是轻量级的选手。

虚拟机虽然可以隔离出很多“子电脑”,但占用系统资源更多,启动更慢,虚拟机软件本身的采购价格也不菲,通常需要花费几百美刀(例如VMWare)。

而容器技术恰好没有这些缺点。它免费使用,它不需要虚拟出一整个操作系统,只需要虚拟一个小规模的运行环境(类似“沙箱”)。

sandbox.jpg

它启动时间也快到吓人,几秒钟就能迅速完成。而且,它对资源的利用率非常的高,一台主机可以同时运行几千个Docker容器。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间才能运行,而容器只需要MB级甚至KB级。

compare.png

也因如此,容器技术受到了众多企业和从业人员热烈的欢迎和追捧,发展迅速。(用更少的钱买到更好的东西,谁能不心动呢?)

Build, Ship and Run

这时我们可以回头来看看Docker了。需要注意的是,Docker本身并不是一个容器,它是创建容器的工具,是应用容器引擎。

想要搞懂Docker,其实看他们提出的两句口号就可以有一个很好的认知

第一句,是“Build, Ship and Run”。

build ship run.png

翻译过来就是 “搭建、运送、运行”,它是Docker的核心理念。那它到底是什么意思呢?

举一个很简单的例子

我家中有一片空空如也的墙,想把这面墙装饰起来,便拿起画笔、水桶、颜料,开始起了创作。墙上很快出现了一幅壁画,很漂亮,我也很满意。

mural.jpg

结果,我住了一段时间,搬家了。新家还有一片很空的墙。这时候,按以往的办法,我只能拿起画笔、水桶、颜料,再把壁画给画上去。

这时一个人跑过来,问我要不要复印机了解一下?

我一看,这是一个好东西。在纸上画完个大概之后,想复印多少份就复印多少份。往背包里一塞,就可以直接带走。再次搬家的时候直接把复印件往墙上一贴,再补上细节之后就好了,节省时间也保持了一致性。

所以,Docker的第二句口号就是:“Build once,Run anywhere”(搭建一次,到哪都能用)。

Build once,Run anywhere

build once run anywhere.jpg

Docker技术的三大核心概念,分别是:

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

我刚才例子里面,那个放在包里的壁画,就是Docker镜像。而我的背包,就是Docker仓库。那个空空如也的墙,便是Docker容器。

说白了,这个Docker镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

也就是说,每次贴上的壁画是一样的,但是细节需要自己补充。谁贴的壁画自己补充两笔就可以了。

如果这时候你不再喜欢这种风格的壁画了怎么办?没有关系,有很多不同的Docker镜像在等着你

也就是说,我画了一幅中国山水画风格的壁画,生成了镜像。另一个哥们可能画了一幅欧洲抽象派的的壁画,也生成了镜像。还有哥们,画了幼儿园风格的蜡笔壁画,也生成了镜像。

这么一来,我们可以交换镜像,你用我的,我用你的,岂不是很爽?

art with different style.jpg

于是乎,大家把自己的镜像分享出来,就变成了一个大的公共仓库。负责对Docker镜像进行管理的,是Docker Registry服务(类似仓库管理员)。

不是任何人建的任何镜像都是合法的。万一有人在画壁画的时候顺手抹了把鼻涕在上面呢(好恶心)?所以,Docker Registry服务对镜像的管理是非常严格的。

最常使用的Registry公开服务,是官方的Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。你也可以更放心的去挑选你看中的壁画,好好的去装饰你的房间。

讲到这里,对于Docker的介绍也差不多了。

对Docker未来的展望

前几年,大家以为虚拟机是未来网络服务的终极形态。目前看来,更有可能是容器化。

Docker 6年,同时也是IT界巨变的6年,巨变的是应用模式,是容器生态,是编排技术,更是千万软件工程师对时代的思考。

厚积薄发,会是 Docker 未来几年内的最准备描述。而应用编排领域的竞争势必会更加白热化,鹿死谁手,三足鼎立抑或是百家争鸣,犹未可知。

还是那句话,发展是一个亘古不变的话题,而这十年,你会相信是 Docker 引领吗?

参考文献

一些参考文献,十分感谢:
https://zhuanlan.zhihu.com/p/53260098
https://www.infoq.cn/article/docker-turns-3

Last modification:November 1st, 2019 at 10:52 am
会是风雨过后,波澜不惊