如何通俗的解释“Docker”?
≚➤如何通俗的解释“Docker”?
我家是搞养殖的,养了几十头羊,有的瘦小,有的强壮。之前,所有羊在一个食槽里吃饲料,强壮的羊会挤兑瘦小的,不让其吃。结果就是强壮的愈加强壮,瘦小的愈加瘦小。为了解决这个问题,我为每头羊分配了一个食槽,每头羊只能在属于它的食槽吃饲料,去其他食槽吃就会挨打,一段时间后,每头羊便可以吃到为其分配的饲料,羊的长势也就比较均衡了。
有人的地方就有江湖,羊也一样。强壮的羊经常欺负瘦小的羊,导致瘦小的羊受伤,为了解决这个问题,我们将经常欺负弱小的羊单独圈起来,这样,对于它来说世界就只有它一头羊了,精力无处发泄,只能撞墙了。原先的羊圈,欺负弱小的情形还在继续发生,理想的方法是为每头羊准备一个单独的羊圈,我将方法提出后,被家里以成本过高为由否决了。
我们以进程类比羊,以操作系统类比羊圈,以资源类比饲料。
进程A为了运行流畅,可能会无限申请内存及CPU时间,挤压了其他进程的资源,导致其他进程运行卡顿,用户就会认为其他软件用户体验差,进而卸载,这是非常不公平的。操作系统的解决方法是可为每个进程分配固定的资源(内存、CPU运行时间等),进程不能使用额外的资源。这就相当于为每头羊分配了一个食槽,里面放适合它的饲料。在计算机中,这种技术叫CGroups。
进程是可以看到其他进程的,也可以看到其他进程产生的文件。进程可调用kill、rm杀死其他进程或删除属于其他进程的文件。通过权限机制可缓解此问题,但是更好的方法是,进程只能看到属于自己的资源,进程想作恶,都不知道如何下手。在计算机中,这种技术叫做Namespace,将进程放在一个独立的Namespace中,进程就只能看到属于它的资源了,相当于为每头羊准备一个单独的羊圈。
通过CGroups和Namespace技术,进程只能使用固定的资源,并认为自己独享操作系统,这就是容器虚拟化技术。
容器虚拟化技术是操作系统级虚拟化。文件系统属于Namespace的一种,通过容器虚拟化技术,进程A使用Ubuntu16.04的文件系统,进程B使用Ubuntu22.04的文件系统,虽然二者使用的内核是同一个,但应用软件的行为(由软件、依赖库、配置文件等决定)分别与Ubuntu16.04和Ubuntu22.04一致,就可以认为,分别虚拟出了Ubuntu16.04和Ubuntu22.04操作系统。
Docker整合了上述虚拟化技术,并提供了一系列工具,简化并自动化容器虚拟化技术使用流程。风云际会,掀开了云原生时代的序幕。
我写了一个称作docker.sh 的小项目,该项目旨在通过一系列的实验使用户对docker的底层技术,如Namespace、CGroups、rootfs、联合加载等有一个感性的认识。在此过程中,我们还将通过Shell脚本一步一步地实现一个简易的docker,以期使读者在使用docker的过程中知其然知其所以然。该项目的仓库地址如下:
https://github.com/pandengyang/docker.sh.git https://gitee.com/pandengyang/docker.sh.git
可用于学习 Docker 原理,里面有Namespace、CGroups的原理及示例的介绍。
☛◕如何通俗的解释“Docker”?
Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注。如果你关注最新的技术发展,那么你一定听说过 Docker。不管是云服务还是微服务(Microservices),越来越多的厂商都开始基于 Docker 作为基础设施自动化的工具。那么什么是 Docker?Docker与传统的虚拟机有什么区别?为何要采用 Docker?如何使用 Docker?
当有人提到“Docker”时,可能是指如下3种概念之一。
Docker公司。Docker的容器运行时和编排引擎。Docker开源项目(Moby)。本文摘自美亚操作系统排名第一的畅销书《深入浅出docker》
深入浅出Docker1.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”之后。
图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方式发布月度版。
图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所示。
图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。
图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公司都是主要贡献者。
❦≋如何通俗的解释“Docker”?
自己买了个服务器,前不久搭建好的一个网站,想要再搞一个站点,无奈只能修改端口后,再部署另外一个站点。繁琐的配置运行环境,迁移网站,是否让你感觉到很繁琐?服务器不想用了,想搬迁到另外一台服务器去部署,先是拷贝原有数据,在新的服务器上又开始搭建环境进行部署,这些费时间的事情现在只需要几分钟就能完成,那就是docker技术。
docker通俗按照自己的理解来说,就是类似VM虚拟机一样的虚拟技术。但是它比虚拟机更加强大,体积小,运行速度快,启动和关闭只需要几秒。相对于普通虚拟机来说,启动时间在分钟级别,占用内存大。所以这就是docker出现之后的优势。docker容器可以打包为镜像文件(类似VM虚拟机的那些快照文件),迁移的时候我们只需要在新服务器上安装docker,就能把之前打包好的镜像文件导入到docker里面,运行容器,就能实现访问,不需要重新配置环境。
┋⇍如何通俗的解释“Docker”?
Docker,搬运工的意思。也就是说搬运容器continer。Docker是一个开源的应用容器引擎,让开发者可以通过Docker打包他们的应用以及依赖包到一个可移植的容器Container中,容器与容器之间是完全隔离的,然后在任何主流的操作系统中开发、调试和运行。
✝☓如何通俗的解释“Docker”?
把一台电脑隔离成很多独立小环境的技术,现代操作系统和大部分硬件支持。这个新环境就是容器,而管理这个小环境的就是容器管理程序。docker就是其中的一个,还有其它的比如podman,当然没有这些专用的工具,也能用操作系统的自带的工具手工创建这个小环境。和虚拟机不同的是,他是把系统隔离出来的,一个大楼有好多房间,共用的是一个底层硬件和操作系统。而虚拟机不是,虚拟机是虚拟出一个完全独立的操作系统,这个操作系统和宿主机是2个不相干的系统,环境更彻底,缺点是会浪费些资源,牺牲些性能。
------------------
推荐阅读:
摩托罗拉edge S30 Pro有16G+512G版本,卖价定为3299,多少人期待?