虚拟机
对于虚拟机,抽象层或抽象软件成为管理程序。管理程序就是帮助虚拟机模拟物理计算机的东西。在管理程序下面,我们有些硬件。管理程序管理单个物理主机上不同虚拟机之间的资源分配。管理程序管理单个物理主机上不同虚拟机之间的资源分配。也就是管理程序上有很多个虚拟机,每个虚拟机都运行自己的操作系统,并有自己的虚拟硬件。比如虚拟CPU,虚拟存储之类的东西。
管理程序是负责创建,管理和运行这些虚拟机的软件。管理程序有两种类型:
- 裸机管理程序:直接在主机硬件上运行,在那台电脑上
- 托管管理程序:管理程序在现有操作系统上运行
虚拟组件,是虚拟机的仿真组件,虚拟cpu,虚拟内存,虚拟存储,虚拟网络接口,这些组件显示给客户机操作系统,就好像他是真正的硬件一样。管理程序负责管理这些虚拟资源并将其分配给每个虚拟机。每个虚拟机中可以运行单个操作系统,使得用户可以在一个物理机上运行多个操作系统和应用程序。
Docker
Docker是一个使用容器化技术的开源平台,他允许开发人员将应用程序以及其依赖打包到轻量级,可移植的容器中。Docker容器对操作系统进行虚拟化,而不是像找个虚拟机管理程序那样对底层硬件进行虚拟化。因此每个独立的容器只包括应用程序及其库和依赖项。
我们先了解Docker引擎,这是管理Docker容器生命周期的核心软件,是为创建,运行和编排容器提供基础设施之类的事情。Docker引擎与主机内核交互,以分配资源并强制容器之间的隔离。主要通过两件事情实现的:一种叫做cgroups或control groups的东西,他们在进程之间分配资源。还有一种叫做名称空间的东西,名称空间限制容器对系统上其他资源的访问和可见性,从而确保容器都有自己的隔离环境。
还有docker镜像,docker镜像是轻量的、独立的、可执行的包,包含了有哪些一个软件所需的一切,包括软件的代码,运行时,系统工具,库以及需要的任何设置。Docker镜像是使用Docker文件构成的,Docker文件是非常简单的文档,提供了创建镜像的说明。
还有容器本身,这是docker引擎中运行的镜像的实例,每个容器都是一个独立的,自给自足的环境,只包括必要的组件,用于运行特定的应用程序,可以快速启动,停止和重启。
怎么选择?
虚拟机
1、各种操作系统,虚拟机可以运行不同的os,所以我们可以在一个vm运行win,另一个运行linux,都在同一个硬件上。当你跨平台测试应用的时候就很方便。
2、隔离,两种都提供了隔离,但是虚拟机中应为每个都运行在独立的内核和os上,所以基本上都是内置的。
3、遗留问题。虚拟机非常适合运行遗留应用程序,依赖于可能与主机操作系统或其他容器不兼容的特定操作系统版本或者配置的容器。因此,你可以为遗留的应用程序设计一个完美的环境,而不必对其进行更改。
Docker
1、微服务。Docker容器的轻量级特性,他的快速启动时间以及打包和分发依赖关系的能力,使其成为管理基于微服务的应用程序的理想选择
2、速度。快速开发和部署使用Docker容器的能力,因为我们可以快速构建,部署和扩展这些容器,使得非常适合敏捷开发实践和持续继承、持续部署,CI/CD管道。
3、资源效率,容器共享相同的主机内核,并且占用的空间比虚拟机小得多,运行更多的容器更小的开销在同一硬件上运行。
总结
因此在docker和vm之间选择,本质上需要考虑应用程序和基础设施的特定需求。在混合环境中国使用两种技术是很常见的,遗留引用可能vm上运行,微服务在docker运行,不是非此即彼的,虚拟化技术已经改变了我们部署和管理应用的方式