有你在真好 的个人博客
程序员为什么要学Docker-
阅读:2052 添加日期:3/30/2021 5:55:12 PM

Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注。如果你关注最新的技术发展,那么你一定听说过 Docker。不管是云服务还是微服务(Microservices),越来越多的厂商都开始基于 Docker 作为基础设施自动化的工具。那么什么是 Docker?Docker与传统的虚拟机有什么区别?为何要采用 Docker?如何使用 Docker?

当有人提到“Docker”时,可能是指如下3种概念之一。

  • Docker公司。
  • Docker的容器运行时和编排引擎。
  • Docker开源项目(Moby)。

本文摘自美亚操作系统排名第一的畅销书《深入浅出docker》

程序员为什么要学Docker?

1.1 Docker——简介

Docker是一种运行于Linux和Windows上的软件,用于创建、管理和编排容器。Docker是在GitHub上开发的Moby开源项目的一部分。Docker公司,位于旧金山,是整个Moby开源项目的维护者。Docker公司还提供包含支持服务的商业版本的Docker。

以上是一个简要介绍。下面针对每个概念进行详细介绍。此外还包含对容器生态的探讨,以及对开放容器计划(Open Container Initiative, OCI)的介绍。

1.2 Docker公司

Docker公司位于旧金山,由法裔美籍开发者和企业家Solumon Hykes创立,其标志如图1.1所示。

有意思的是,Docker公司起初是一家名为dotCloud的平台即服务(Platform-as-a-Service, PaaS)提供商。底层技术上,dotCloud平台利用了Linux容器技术。为了方便创建和管理这些容器,dotCloud开发了一套内部工具,之后被命名为“Docker”。Docker就是这样诞生的!

2013年,dotCloud的PaaS业务并不景气,公司需要寻求新的突破。于是他们聘请了Ben Golub作为新的CEO,将公司重命名为“Docker”,放弃dotCloud PaaS平台,怀揣着“将Docker和容器技术推向全世界”的使命,开启了一段新的征程。

如今Docker公司被普遍认为是一家创新型科技公司,据说其市场价值约为10亿美元。在本书撰写时,Docker公司已经通过多轮融资,吸纳了来自硅谷的几家风投公司的累计超过2.4亿美元的投资。几乎所有的融资都发生在公司更名为“Docker”之后。

程序员为什么要学Docker?

图1.1 Docker标志


公司更名为Docker之后,进行了几次小规模的未公开价格的收购,来丰富其产品和服务组合。

至《深入浅出Docker》撰写时,Docker公司拥有约300~400名雇员,并举办名为DockerCon的年度会议。DockerCon的目标是聚拢不断发展的容器生态,并促进Docker和容器技术的推广。

本书将始终使用“Docker公司”来指代Docker这家公司,其他地方出现的“Docker”都是指容器技术或开源项目。

注:

“Docker”一词来自英国口语,意为码头工人(Dock Worker),即从船上装卸货物的人。

1.3 Docker运行时与编排引擎

多数技术人员在谈到Docker时,主要是指Docker引擎。

Docker引擎是用于运行和编排容器的基础设施工具。有VMware管理经验的读者可以将其类比为ESXi。ESXi是运行虚拟机的核心管理程序,而Docker引擎是运行容器的核心容器运行时。

其他Docker公司或第三方的产品都是围绕Docker引擎进行开发和集成的。如图2.2所示,Docker引擎位于中心,其他产品基于Docker引擎的核心功能进行集成。

Docker引擎可以从Docker网站下载,也可以基于GitHub上的源码进行构建。无论是开源版本还是商业版本,都有Linux和Windows版本。

在本书撰写时,Docker引擎主要有两个版本:企业版(EE)和社区版(CE)。

每个季度,企业版和社区版都会发布一个稳定版本。社区版本会提供4个月的支持,而企业版本会提供12个月的支持。

社区版还会通过Edge方式发布月度版。


程序员为什么要学Docker?

图1.2 围绕Docker引擎进行开发和集成的产品


从2017年第一季度开始,Docker版本号遵循YY.MM-xx格式,类似于Ubuntu等项目。例如,2018年6月第一次发布的社区版本为18.06.0-ce。

注:

2017年第一季度以前,Docker版本号遵循大版本号.小版本号的格式。采用新格式前的最后一个版本是Docker 1.13。

1.4 Docker开源项目(Moby)

“Docker”一词也会用于指代开源Docker项目。其中包含一系列可以从Docker官网下载和安装的工具,比如Docker服务端和Docker客户端。不过,该项目在2017年于Austin举办的DockerCon上正式命名为Moby项目。由于这次改名,GitHub上的docker/docker库也被转移到了moby/moby,并且拥有了项目自己的Logo,如图2.3所示。


程序员为什么要学Docker?

图1.3 Moby的Logo


Moby项目的目标是基于开源的方式,发展成为Docker上游,并将Docker拆分为更多的模块化组件。Moby项目托管于GitHub的Moby代码库,包括子项目和工具列表。核心的Docker引擎项目位于GitHub的moby/moby,但是引擎中的代码正持续被拆分和模块化。

作为一个开源项目,其源码是公开可得的,在遵循Apache协议2.0的情况下,任何人都可以自由地下载、贡献、调整和使用。

如果查看项目的提交历史,可以发现其中包含来自如下公司的基础技术:红帽、微软、IBM、思科,以及HPE。此外,还可以看到一些并非来自大公司的贡献者。

多数项目及其工具都是基于Golang编写的,这是谷歌推出的一种新的系统级编程语言,又叫Go语言。使用Go语言的读者,将更容易为该项目贡献代码。

Mody/Docker作为开源项目的好处在于其所有的设计和开发都是开放的,并摒弃了私有代码闭源开发模式下的陈旧方法。因此发布过程也是公开进行的,不会再出现某个秘密的版本提前几个月就宣布要召开发布会和庆功会的荒唐情况。Moby/Docker不是这样运作的,项目中多数内容都是开放并欢迎任何人查看和作出贡献的。

Moby项目以及更广泛的Docker运动一时间掀起了一波热潮。GitHub上已经有数以千计的提交请求(pull request),以及数以万计的基于容器化技术的项目了,更不用说Docker Hub上数十亿的镜像下载。Moby项目已经给软件产业带来了翻天覆地的变化。

这并非妄想,Docker已经得到了广泛的应用!

1.5 容器生态

Docker公司的一个核心哲学通常被称为“含电池,但可拆卸”(Batteries included but removable)。

意思是许多Docker内置的组件都可以替换为第三方的组件,网络技术栈就是一个很好的例子。Docker核心产品内置有网络解决方案。但是网络技术栈是可插拔的,这意味着Docker内置的网络方案可以被替换为第三方的方案。许多人都会这样使用。

早期的时候,经常出现第三方插件比 Docker 提供的内置组件更好的情况。然而这会对Docker公司的商业模式造成冲击。毕竟,Docker公司需要依靠盈利来维持基业长青。因此,“内置的电池”变得越来越好用了。这也导致了生态内部的紧张关系和竞争的加剧。

简单来说,Docker内置的“电池”仍然是可插拔的,然而越来越不需要将它们移除了。

尽管如此,容器生态在一种良性的合作与竞争的平衡中还是得以繁荣发展。在谈及容器生态时,人们经常使用到诸如“co-opetition”[1]与“frenemy”[2]这样的字眼。这是一个好现象!因为良性的竞争是创新之母

1.6 开放容器计划

如果不谈及开放容器计划(The Open Container Initiative, OCI)的话,对Docker和容器生态的探讨总是不完整的。图1.4所示为OCI的Logo。

程序员为什么要学Docker?

图1.4 OCI的Logo


OCI是一个旨在对容器基础架构中的基础组件(如镜像格式与容器运行时,如果对这些概念不熟悉的话,不要担心,本书后续会介绍到它们)进行标准化的管理委员会。

同样,如果不谈历史的话,对OCI的探讨也是不完整的。和所有的历史记录一样,其版本取决于谁来讲述它。所以,以下是我眼中的容器历史。

我讲述的这段简短的历史是,一个名为CoreOS的公司不喜欢Docker的某些行事方式。因此它就创建了一个新的开源标准,称作“appc”,该标准涉及诸如镜像格式和容器运行时等方面。此外它还开发了一个名为rkt(发音“rocket”)的实现。

两个处于竞争状态的标准将容器生态置于一种尴尬的境地。

这使容器生态陷入了分裂的危险中,同时也令用户和消费者陷入两难。虽然竞争是一件好事,但是标准的竞争通常不是。因为它会导致困扰,降低用户接受度,对谁都无益。

考虑到这一点,所有相关方都尽力用成熟的方式处理此事,共同成立了OCI——一个旨在管理容器标准的轻量级的、敏捷型的委员会。

在《深入浅出docker》写作时,OCI已经发布了两份规范(标准):镜像规范和运行时规范。

提到这两项标准时,经常用到的比喻就是铁轨。它们就像对铁轨的尺寸和相关属性达成一致,让所有人都能自由地建造更好的火车、更好的车厢、更好的信号系统、更好的车站等。只要各方都遵循标准就是安全的。没人会希望在铁轨尺寸问题上存在两个相互竞争的标准!

公平地说,这两个OCI规范对Docker的架构和核心产品设计产生了显著影响。Docker 1.11版本中,Docker引擎架构已经遵循OCI运行时规范了。

到目前为止,OCI已经取得了不错的成效,将容器生态团结起来。然而,标准总是会减慢创新的步伐!尤其是对于超快速发展的新技术来说更是如此。这在容器社区引起了热烈的讨论。以我之见,这是好事!容器技术正在重塑世界,走在技术前列的人们有热情、有想法,这很正常。期待关于标准和创新有更加热烈的讨论!

OCI在Linux基金会的支持下运作,Docker公司和CoreOS公司都是主要贡献者。

END

*喜欢的朋友请转发到朋友圈*