00:00
那我们看一下这么一张图。这就很好的对比了我们的容器及虚拟化和我们的传统虚拟化的一个不同点,非常好的描述出来啊。首先我们先看左边这张图。左边这张图呢,是一个传统级虚拟化的这么一个定义。最底层是我们的服务器,服务器硬件上一层是我们的数组操作系统,上一层是我们的HYP,对吧,这也就是我们所谓的虚拟监视器。这上一层的是我们的guest OS,也就是数组操作系统。再上一层是我们对应的数字操作系统,这上面的运行的lab库,对吧,或一些命令,再上层的部署了我们的应用程序。看,这就是我们最传统的虚拟化,如果做分类的话,它是什么?完整虚拟化对吧,或者叫完全虚拟化。然后呢?寄居架构并不是裸金属架构,对吧,这是不是也是我们现在比较常见的一种虚拟化结构。
01:02
对吧,好,那在这里有什么优点,优点就是不同的应用程序之间是通过不同的。内核去隔离的。能看明白吧,对吧,每个人都有自己对应的操作系统,通过内核去隔离。那缺点是什么?对于公司来说。这些的操作系统的运行能够带来利益上的增长吗?并不难。我运行1000个操作系统,它能它能加钱吗?肯定不行啊,谁能加钱,这些应用程序的工作才能让我加钱。对吧,比如他是支付宝的话,对吧,那大家是不都过来存钱,他是不是才能有对应的盈利空间啊。那底下这些操作系统再运行有什么用啊,没用的。所以那既然这样的话,我们是不是可以理解为这些操作系统的运行?都是不必要的。
02:01
那有些人可能会说了,它要不运行,你上面的用程序怎么运行啊。这句话非常有。道理对吧,它不运行,没有我们的环境,没有环境你的应用程序怎么部署,肯定部署不了。这也是我们传统虚拟化的一个比较尴尬的一点吧。那我们看右边能不能解决这个问题。硬件上面运行了一个本机的操作系统,然后运行了一个doc n进,也就是我们的doc的管理引擎,对吧,好在上面有不同的B和level上面直接运行我们的APP。你会发现诶。这数组操作系统怎么没有了?对吧,这个操作系统怎么没有了。直接运行应用程序,并且还是一个共享的,看到了吗。好几个APP。放在同一个病或LA上。这就意味着,只要是我们的同一个运营环境的一些应用程序,是不是都能运行在这个。环境上。这样的话会有什么好处啊?
03:03
这些的这些的操作系统运行需要资源吗。如果是Linux的话,最少内核需要消耗200兆完整版的对吧,那对于WIN7的话,那消耗的可能是在几个G了,那对于Windows so的话,那可能要一点几个G。那一个虚拟机一个G。那十台虚拟机十个G内什么有了?这十个G内存如果供给我们的N的话,它是不是可能运行了我们的。将近10万的连接数啊。是还是非常容易实现的呢。对吧。那如果放在这边呢。他不需要,那这些十个G的内存数是不是就可以供给为应用程序本身去使用?也就意味着在相同的硬件属性上。我们的这种容器级别的虚拟化可以供给给更多的访问量。你可以这样去理解吧,理想状态下对吧。
04:01
好。那你说都是优点,难道就没有缺点吗?当然有。容器的安全性较差。安全性较差。你会发现这个应用程序之间并没有本身的隔离机制。看到了吗?它并不像我们传统级虚拟化一样,是通过我们的公司内核去隔离。这里并没有。都是同一个内核的共享机制。所以这张图可以我们可以得出一点。容器级虚拟化消耗的本级不必要的资源最少。在同样的硬件属性下,可以支持更多的用户访问。可以这样理解吧,但安全性较差。那对于我们的传统级虚拟化呢?他虽然消耗了过多的一些不必要的资源,但是他能够对应用程序做到一个所谓的内核级别的隔离,它的安全性最高。
05:08
这样的话,你就知道在什么样的环境中选择什么样的技术去应用了。对吧,好。那这是我们对他做的一个不同的。判断,或叫做他们的对比。那接下来呢,我们就要去学习一下包括的相关的构成了。对于dock来说呢,有一有一些比较重要的组件,我们在这里需要给大家去说明一下,对吧,分别是我们的仓库。镜像以及容器。这个被称作我们在dock环境中的三要素。三大金刚对吧,缺一不可。那第一个我们要给大家讲的是呢,镜像。镜像是什么?如果问大家的话,大家可能会说,诶操作系统镜像,比如WIN7啊,装完了以后,我们通过这个WIN7镜像装完了以后,可以得到一个win win7的操作系统,对吧?那比如Linux装完以后可以得到一个Linux运行环境。
06:04
那这叫操作系统镜像对吧,那刀客镜像是什么呢。大家把它理解为。封装好的。封装好了。运行环境。封装好的运行环境。这句话非常重要,怎么去理解?我可以把NS优化完了以后,把它封装成一个镜像,别人呢,拿到这个镜像以后,运行之后,运行之后变成容器。这个非常重要,对吧,那什么是运营之后啊,什么又是容器呢?运营之后就是我们把它加载。得到容器,容器是什么?就是正在运行的运行环境。有点拗口对吧,什么叫正在运行的运行容器啊啊,正在运行的运行环境啊,就是比如N。
07:05
我现在正在工作。这个过程,这当时的状态,我们可以把它理解为就是正在运行的运行环境。也就意味着镜像跟我们的容器是有转换关系的。镜像运行得到容器。容器,反过来可以把它给停止以后得到镜像,转换成镜像,它们俩之间是互相有转换关系的,这个对应的关系大家要理解一下。第二部分就是我们所谓的仓库,仓库和镜像也有关系。仓库是干嘛的?存放镜像的?我进项。用户镜像以后,我要把它放在一个固定的位置,这个位置就是仓库。当仓库里也可以对应索索取出镜像过来去下载,也就是镜像放在仓库里,镜像也可以仓库里去下载。并且官方呢,给了我们一个官方的经销仓库,叫hubing come。
08:03
这就是官方的镜像仓库。我们也可以过来简单看一下对吧。好,那这个呢,就是我们官方的这么一个镜像仓库,那当然我们刚才也说过了,对吧,这这里可以去存镜像,也可以去索引镜像,比如我们索引一个N的镜像。好,看到了吗?这里是不是有个N镜像。那这个镜像我只要把它下载下来,下载到我本地,那是不是得到镜像了,只要把这个镜像与运行,就运行出了一个N式的运行环境了。好,那这个相当于大家应该没问题了,对吧,那我们接下来继续往后看。到仓库我们已经说过了,到支撑组件还分为我们的client端和S端。
09:01
可乐端,也就是我们的客户端的连接工具,我们也说过了,Dock是一个引擎,它相当于是一个守护进程的方式在这里运行,当客户端向他发出对应的命令的话,他再去执行,得到最新的结果或去操作底层的Linux。去工作对吧?好,所以它也是一个CS的结构,需要大家注意一下。那除了可以接受本机的可的请求,也可以按照路由规则实现路由分发,什么含义呢?就是刀客。DEMO或者do的so端是放在本机的客端,正常情况下在本机,但是我还可以通过别的服务器向他发起,也就是接受远程服务的命令。但一般来说我们都不开启,太危险了。好,那这是我们do的一个构成,以及它三要素的一个解释,对吧,后面我们还会重复的去讲这个三要素,因为它非常重要。
10:01
那接下来我们继续往后看看我们的刀会组件的协同工作方式。那这里呢,演示了几个命令,以及他们组件之间的工作过程,或叫常见的工作过程。这里有个用户先输了一个叫do po。包个铺擦擦。这是什么概念啊?给大家简单解释一下这个命令的含义,刀破代表就是下载镜像,从镜像仓库拉镜像下来。后面跟的就是我们镜像名。这个命令端指令会被发送到我们的do DEMO上,也就是这是C端,这是serve端,对吧,发送到这里以后。本机呢,会去检索当前的本机目录下有没有这个镜像,如果没有会向官方的仓库发行请求。发起请求也就这根线对吧,发起请求成功以后会下载至本地。就是到个铺。那刀割状是干嘛的呢?是把我们的镜像运行起来得到容器。
11:02
那我在发起包括run命令后面跟一个叉叉对吧,那后面要写明什么镜像去运行的,那这样的话它会在本地启动。应用,也就是我们所谓的容器,如果我想把它关闭的话,就是stop,这个命令不需要大家现在去记,对吧?我们只是给大家简述一下他们之间的工作过程。回来简单的给大家看一看,我们后面会重复去讲到这些命令,所以不要慌,对吧,我们后面还会有很多机会。好,那这个呢,就是dock的工作方式,也就意味着先发起命令去下下镜像,下完以后可以在本地去进行,得到对应的应用程序即可。那么接下来继续往后看。刀客他们之间的是怎样去优化得到的?刀客呢,最开始的时候,其实制作起来它是有一个更替的,那个更替呢,可以如图所示对吧,那么一点进去看,我现在有两个应用程序,这是我们最传统的级别的虚拟化,对吧,或者最传统的环境吧。
12:04
两个操作系统,操作系统上面运行了一些依赖包,然后在上面安装了一个对应的应用运行环境或者应用程序,对吧,然后再去跑我们的一些应用,Pip啦,Java啦等等,对吧,应用A和应用B。那我想想怎么优化呢,很简单。我把操作系统给去了。你说诶应用并没操作系统了。那他怎么办,怎么运行啊。用应用A的,我们把它链接过来。那这样有什么好处?这个操作系统本身消耗的资源是不是就不需要了?优化了吗?优化了有些人可能说,诶还能这样玩啊,当然可以。那也会带来一个问题,什么问题啊。如果我要对操作系统做一些更改。举个例子,比如我现在想把EDC下的C ctrl.com里面的IP forward改为一。
13:04
应用程序A可以改为一,应用程序B必须为零。的出事了对吧,那我共享你的,你改成一了,我是不是也得用一的。那怎么办?加一个空白层。这里会出现一个新的东西,叫空白层。空白层。有一句话叫做。应用优先级大于底层。也就是我说的是一,你后面的说的都是零,那对于应用应用程序来说也是一。也就是空白层的优先级大于下面的所有层级。那这样的话,我只要在空白层里写这个文件是一,在他的应用程序B里面写这个文件是零。那这样的话是不是就是你是一,我是零,互不干扰。并且每一个应用是不是都有自己独立的空白层,这是互互相不干扰的,需要大家注意一下。
14:02
那这样的话是不是就是更美好了,哎,我继续共享了,你改了也不会影响我。真的美好了吗?结果有一天我在应用A的这个操作系统基础之上,我搞了一个应用CA,应用D,应用E,应用F等等,啪啪啪啪啪搞了1000多个。搞了1000多个,就像我刚才一样,对吧,手一滑,这些你的就都没了,其实不然,我想表达的是什么?有一天,这个应用程序关了。大家想一下会发生什么?后面呢,嘣嘣嘣嘣嘣嘣嘣1000多个,所有的所有的全部机器。为什么这样去说?我们都是共享你的操作系统,你自身灭亡了,我们后面还能苟活吗?肯定活不了。所以这又会带来一个问题,就是我们所谓的依赖性。
15:00
这个医生关系太复杂对吧。动一发而牵全身,就太太太不想要了,对吧?我们现在都是解除耦合,你这个耦合也太大了,所以怎么办?不用应用程序去共享,而是用镜像去共享。应用是一个活动的,它是一个活的。镜像是一个死的,你只要不删它,它不会损坏。很好理解吧,我给你一个N的源码包,你不要动它,它放在那里能坏吗?那如果我给你一个运行的ending应用程序。你能保证他不坏吗?这很好理解了吧?所以我们的操作系统不是由应用程序或者已经运行的环境供给,而是用我们的镜像供给。所以我们今天也一直在强调,对吧,镜像就是一个运行好的,封装好的运行环境,这也是这句话的含义所在。
16:00
这样的话是不是非常美好了,它不会坏,它又能运行,节省我们对应的操作系统级别的资源。不同的空白层呢,又去写入不同的新数据,保证每个应用程序都可以不一致。完美是这个意思吧?好,那你会发现还有一个问题。就是如果我应用A和应用B他们用的是不同的镜像,那我是不是在这里还需要有个应用B的镜像,那也许还会有一个应用C的镜像,也许还有个应用G的镜像。那这里的镜像会不会占占用我们太多的资源,我们都知道操作系统还是挺大的,对吧,那如果一个镜像好几百个G,这有点夸张了是吧?好几百兆吧,好几百兆比较符合情情况对吧,好几百兆。那如果我的镜像这里有好多个的话,他是不是会占用我们很多的存储资源?那怎么办?分成。
17:01
分成。怎么去理解呢?我现在构建一个lamp环境。第一层,我需要一个Linux内核。比如是我们的。斯诺6.8。第二层,我需要安装Linux。第三章,我安装PHP。第四层,我安装MYSQL,安装的是5.0版本。有一天你跟我说,我需要一个5.5版本的,那怎么办?我直接把这一层给替换掉,给它换成。MYSQL5.5版本。你说底下没有这些东西啊,它会链接过去。只要他使用的是同一种。那这样的话。也就意味着。我一个镜像,我们看起来是一个文件,其实它并不是一个文件,而是有很很多个子文件把它给结合起来。当然,这很多个也是有对应的数目限制的。我们后面会说这个限制尺为128,也就最大不能超过128乘。
18:05
那在这些成绩内部,只要他们,比如我存了一个新镜像。这个镜像也有很多成绩对吧,那如果有一层跟我们之前的镜像某一层是一样的话,他会跳过这个镜像直接下别的,那这样是不是就大大的。减少了我们的存储量。这是我们的最后一步优化方案,分层存储。那这个呢,就是我们dock采用一些。技术。或者他的一些优化过程,得到我们当今的这么一个刀客的环境。好,那这节课呢,我们就先讲到这里,这节课我们讲的东西还是比较多的,对吧,从我们什么是刀客以及刀的以传统机虚拟化的对比,包括我们的刀的构程,以及他的一些优化过程。东西非常多,而且比较难理解。尤其是现在我们还没有用到它,还是那句话,好好的把我说的话回味一下。
19:04
如果有疑问留在心里,后面会慢慢揭开。那这节课我们就先讲到这里,下节课我们再见。
我来说两句