虚拟化技术——Container技术
Posted 雨钓Moowei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟化技术——Container技术相关的知识,希望对你有一定的参考价值。
概述
前面介绍了。因为虚拟机中Guest OS开销太大,会造成隔离的虚机越多资源被浪费的就越多的情况出现。所以有人就会想,可不可以不启动Guest OS,而是直接使用Host OS来模拟一个相对完整的操作系统呢。这样就不需要再在Host OS上跑Guest OS,按照这个思路,逐渐发展出来了操作系统级的虚拟化技术,就是利用操作系统本身的功能来实现虚拟化,这就是Container技术 。结构如下图(以Docker为例):
一、Container技术及其历史
Container技术也可以在完整服务器上隔离出多个完整的小的资源格子出来,且互相之间资源是隔离的。但它利用的是操作系统本身的功能,所以在每个小格里面不需要再去运行Guest Os 了,这部分资源的开销就被省下来了,尽可能把资源提供出来供实际的应用使用 。
虽然Container技术提供了这样的功能,但是Container技术在被发明的很长时间内都没有得到广泛的应用。原因在于:虽然它提供了这样的功能但是,各个应用所需的环境不同,相对完整的操作系统环境要怎么定义呢,这个环境要配成什么样才能算是完整的环境?
1.1、Container技术的困境
如上图中所示,如果虚拟化出三个小格子,且其中运行不同的应用,前两个应用使用Python2.7,第三个用的是python3.0,每个Container所需要的环境不一致,那怎么办,关键是要怎么管理。一种方式就是,你先登录Host OS的系统,在上面装一个python2.7然后虚拟两个小格出来,在上面运行前两个应用,这两个应用可以直接使用HOST OS上的python2.7;之后再虚拟出一个小格出来,然后在这个小格里只用Host OS操作系统的内核,小格子里单独装一个Python3.0,这样是可以达到这个目标的。如果只有三个Container还好,但如果多了呢?以前我们说一台物理服务器可以虚拟出20个或者30个虚拟机出来,现在,因为不需要启动Guest OS 了,一个服务器可以启几百上千个Container出来,你一个一个的去配置吗?就算你一个一个配置好了,你之后怎么管理呢。所以当初Container技术很难被广泛使用。
1.2、虚拟机技术如何解决该问题的
返过头来,我们可以看下为什么虚拟机没有这个问题,因为虚拟机就是一个完整的镜像文件,本质上就是一个文件,如果是对于云平台来说它存储在一个镜像库里的文件,即便是没有云平台,没有对应的管理工具,你用U盘拷贝都可以。只要将它拷贝到你宿主机的本地,然后用这个镜像去启动一个虚机,那么只要在生成这个镜像的时候把环境配好(例如在生产这个镜像文件的时候就把JDK,Hadoop,Python都预装好)做成镜像,之后你在启动虚拟机的时候,当初你装了什么环境,启动起来就是什么环境。 因为他是纯软件的,不是物理的硬件,所以我们可以拷贝。
但是对于当初的Container技术来说,没有这样的镜像,所以虚拟出来众多的Container的配置管理就是一个大问题,所以在之前的很多年里Container一直没有得到大规模的应用。只有Google在大量应用,因为Google里面对Container的环境要求一样,也就是说2000台服务器一样的环境配置,我只需要用传统的配置管理手段把这2000台服务器配置好,然后启动那些Container,因为Container是共用操作系统的,所以启动的Container里面的环境就都是一样的。因此只有在这种场景才能大范围应用。也就是Container中需要的配置和HOST OS 上运行的配置都是统一的,没有那么多差异的配置需要操心,因此可以大量应用。Google当年用的Container技术名字就叫Linux Containers(简称LXC)。
二、Docker的出现
那为什么这几年Container一下子火了呢?因为出现了 Docker,现在我们说Docker是一个Container,甚至很多时候提到Container就是指Docker,而不是其他的Container技术。然而Docker刚诞生的时候甚至没有自己的Container技术,他用的就是LXC,但是它多做了一件事情,它发明了一个叫做Docker File的东西,这就是一个文本文件,里面描述了这一个Container启动时如何去配置它的环境,一行一行的写的很清楚。所以当我们在用Docker的时候,会按照Docker File去启动一个Container并且按照Docker File的描述把相关的环境给配置好,最后把应用给启动起来。这个时候我们就发现,Docker File就具有与虚机镜像类似的作用,实际上Docker还有一个概念叫Docker镜像。根据Docker File生成一个Container的文件系统,对文件系统中存着的一些东西进行打包,就可以形成Docker镜像。Docker镜像的功能就跟虚机镜像的功能非常的接近了,Docker File和Docker镜像基本上是等价的,因为你有了Docker File就可以根据Docker File生成一个Docker镜像。所以大家用的比较多的还是Docker File。也正因为Docker File解决了Container技术最大的问题:实现环境的统一和管理。有了DockerFile以后就可以让用户在使用Container技术的时候,方便对环境的管理,且任何应用或者服务的运营环境跟你当初在开发时的环境保持一致。需要提及的一点是,随着Docker的迅猛发展,之后LXC不够Docker玩了,所以他自己搞了一套Container技术。
下一节介绍Docker的应用场景、缺点以及与虚机技术的对比。
未完待续。。。。(谨以此系列文章缅怀逝去的学生时代)
以上是关于虚拟化技术——Container技术的主要内容,如果未能解决你的问题,请参考以下文章