一、虚拟机
虚拟机思想就是可以把一台计算机分隔成若干台机器使用
所谓虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能、并可以运行在一个完全隔离环境中的完整计算机系统。虚拟机就是相对于传统计算机而言的一个计算机概念,一个非实体的计算机,但具有所有传统计算机的功能。
虚拟机系统可以通过生成现有操作系统的全新虚拟镜像(比如iso)。对于windows操作系统而言,它具有真实windows系统完全一样的功能。对于linux/unix系统,也是如此,一个linux(unix系统)被分隔为多个相对独立的小系统(麻雀虽小却五脏俱全)。进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,甚至拥有自己的独立桌面互动操作,却不会对真正的宿主系统产生任何影响 ,更为方便的是这种系统具有能够在宿主系统与虚拟镜像之间灵活切换。虚拟系统和传统的虚拟机(Parallels Desktop、Vmware、VirtualBox、Virtual pc、kvm)存在不同。
具体就在于:虚拟系统不会大量降低电脑的性能,启动虚拟系统不需要像启动windows/linux系统那样耗费时间,运行程序更加方便快捷;虚拟系统只能模拟和现有操作系统相同的环境,而虚拟机则可以模拟出其他种类的操作系统(比如在笔者的宿主ubuntu下用virtualbox来运行windowsxp)。缺点也不是没有的,虚拟机计算需要多了一个虚拟机与宿主机模拟底层之间的交换层,所以在应用程序**运行速度上比虚拟系统慢得多。但是值得相信的是,现在的硬件越来越快,应该可以不考虑这占损失就好了,尤其还会有未来的量子计算机产生。
二、容器技术
一种比传统虚拟机更优秀的计算资源利用管理技术
有了虚拟机vm的长期网红,容器技术很快就被程序高手们挖掘出来。Cgroup被引入linux系统的内核体系,随之基于cgroup的应用就多了起来!也许很多朋友一开始只希望用这个cgroup来实行操作系统层面资源隔离,从而形成linux系统下多用户使用中的资源安全。可是GO语言出来之后,喜欢尝鲜的程序员,用GO写出了docker这大型工具。GO的新生面孔与Docker强大未来前途,一下子把高密度运算带到了一个新高度。
虚拟化技术的长期使用,已经成为一种被大家广泛认可的服务器资源共享方式,它可以在按需构建操作系统实例的过程当中为系统管理员提供极大的灵活性。这样的特点为满足了投资者缩减成本的需求,也满足了管理人员的希望。但这种是基于
虚拟化技术的。hypervisor作为一个中间件充当一种运行在物理服务器和操作系统之间的中间软件层,其根本任务就在于允许多个操作系统和应用程序共享一套基础物理硬件(比如硬盘、内存、cpu、通讯总线等),它可以协调计算任务访问服务器上的所有物理设备和虚拟机,因此有时间人们又叫它是虚拟机监视(控)器(Virtual Machine Monitor)。Hypervisor是所有虚拟化技术的核心,非中断地支持多工作、多负载迁移的能力是Hypervisor的基本功能。每当服务器启动执行Hypervisor这个进程时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。
hypervisor仍然存在一些性能和资源使用效率方面的小问题,在大运算量有时候就成了一种瓶颈与制约,因此基于容器(Container)的新型虚拟化技术成为真实的新晋网红。这个网红代表就是Docker。
目前Docker的使用已经非常普遍,特别在一线的互联网公司。使用Docker技术的优势可以帮助企业快速地扩展服务,从而实现弹性部署计算业务的能力。在云服务理念兴起之后,Docker的使用场景和范围进一步得到发展,如今微服务架构又流行起来,微服务+Docker再次成为完美组合,快速交付、快速布署、简捷运维部署一股脑儿就落地了。
名词解释
cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)。
这个项目最早是由Google的工程师(主要是Paul Menage和Rohit Seth)在2006年发起,最早的名称为进程容器(process containers)。在2007年时,因为在Linux内核中,容器(container)这个名词有许多不同的意义,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。自那以后,又添加了很多功能。
Hypervisor, 一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor )虚拟机监控器
细说Docker。
Docker 是世界领先的软件容器平台。开发人员利用 Docker 消除了协作编码时“只在我的机器上可正常工作”的问题。对于运维人员而言,利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用 Docker 可以构建敏捷的软件交付方式,以高速度、高安全性、高可靠性地为 Linux 和 Windows Server 应用发布新功能,跨平台一气通吃。
Docker 属于 Linux 容器的一种封装,成套地提供了简单易用的容器使用接口。它是事实上目前最流行的 Linux 容器方案。Docker 将应用程序以及该程序运行的依赖计算环境,打包在了一个镜像文件之中。只要运行这个镜像文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就如同在真实的物理机上运行一样。
另外的优势就是,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。利用容器接口还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样方便快捷,当然前提是你必须学好docker的所有知识。
三、为什么要优先使用Docker,而不是虚拟机呢
1、在性能上讲
容器除了运行其中应用外,基本不消耗额外的系统资源。就连虚拟机中 hypervisor 支持也节省了。因此使得应用的性能进一步提高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个安全隔离的应用就可以了。
2、更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器轻量级的,快速是原生特性。容器的启动时间秒级水平,大量地节约了开发、测试、部署时间。
3、更高效的虚拟化
虚拟机基于硬件层面实现虚拟化,需要额外的虚拟机管理应用和虚拟操作系统层
Docker容器是在操作系统层面上实现虚拟化直接复制宿主主机的操作系统,更轻量级,更高效
4、更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等等。 这种兼容性可以让用户“一次建设跑遍全天下成为事实”,最终简的方法就是把一个应用程序从一个平台直接复制迁移到另外一处即可 。
5、维护更简单
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
四、Docker 与VM的效率。
VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。虽然Docker目前还不够完善,比如隔离效果不如VM,还需要共享宿主机操作系统的一些基础库等(这可能与还不够完善GO-lang有关);网络配置功能相对简单,主要以桥接方式为主。
docker容器与VM间的不同
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
相对传统的虚拟化方式,作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式具有众多优势。Docker 容器的启动可以在秒级实现;Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
对比传统虚拟机总结
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB
|
一般为 GB
|
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |