Docker系列开篇之Virtual Machine VS Container(一)
前言
本节开始我们正式进入Docker系列,网上关于Docker相关文章如数家珍,写博客至今,我也一直在朝着如何写出通俗易懂且不枯燥的文章这个目标前进,喃喃自语的同时也希望看到文章的童鞋能明白我在讲什么,将知识点叙述清楚没有,讲解的效果如何,是否有启发或收获,能够得到及时的反馈当然也能让我理解的更透彻,好了,我们开始吧。
Virtual Machine VS Container
开篇我不打算直接讲解各个概念,将虚拟机和容器作比较至关重要,这都是基本概念。既然是系列文章也要适合如我一样作为初学者的入门指南,希望本系列文章能帮助到大家。容器和虚拟机的问世是解决什么问题呢?换句话说它两的作用是什么呢?
容器和虚拟机的作用相似:都是将应用程序及其依赖隔离到可以在任何地方运行的独立单元,同时二者都消除了对物理硬件的需求,能更有效的使用计算机资源
讨论完相似,当然我也得说说二者的不同之处在哪里?区别在于二者的架构处理。下面我们来分别讲讲虚拟机和容器。
Virtual Machine
虚拟机的本质上对真实计算机的仿真,就好比玩具枪对真实枪支的仿真或模拟一样,功能类似,虚拟机借用Hypervisor(管理程序)在物理机器上运行,既然虚拟机可以在Hypervisor上运行,反之,Hypervisor可以在主机上运行,也可以直接在裸机上运行。说到这里,我们又得讲讲Hypervisor是啥玩意,刚才我们讲了Hypervisor(下面我们用管理程序代替)是虚拟机运行的软件,管理程序本身是运行在物理计算机上,这里的物理计算机我们称为【主机】,主机可以为虚拟机提供RAM和CPU,通俗一点讲则是为虚拟机提供内存存储和计算资源,主机为虚拟机提供了RAM和CPU,那么在一台主机上若有多台虚拟机,我们根据需要为多台虚拟机来划分或分发这些资源,因此,如果一台虚拟机运行着更多的应用程序,那么我们可能需要为其分配更多的资源,而不是为在一台主机上运行其他的虚拟机分配更多的资源。
在主机上使用管理程序运行的虚拟机,我们称为【客户机】,该客户机包含运行的应用程序以及应用程序所需要的任何内容,比如依赖的库等等,同时客户机还拥有自己的整个虚拟化硬件堆栈,比如包括虚拟化网络适配器、存储、CPU等等,通过这样描述,我们知道客户机拥有属于自己的一套完整的客户机操作系统,从内部来看,客户机有自己的专属资源,从外部来看,客户机共享主机资源。
综上所述,客户机可以托管虚拟机管理程序或裸机虚拟机管理程序而运行,那么这二者又有什么差异呢?
托管虚拟机管理程序运行在主机的操作系统上,比如运行OSX(苹果操作系统)的计算机可以在该OS(操作系统)之上运行Virual Box或Virtual Machine,同时最重要的一点是,因为虚拟机共享主机资源,所以虚拟机无法直接访问硬件,必须借助主机操作系统来进行访问。想必到了这里我们知道了托管虚拟机管理程序的好处是它并不需要关心底层硬件,也就是说底层硬件对虚拟机管理程序来说并不重要,就好比我们直奔菜市场,我们的任务或者重心放在买当天所需要的菜,而并不是关心菜是怎么种出来的一样,这个例子也恰巧说明了面向对象和面向过程的概念。而主机的操作系统负责硬件驱动程序而不是虚拟机管理程序本身,因为虚拟机管理程序和硬件之间多了夹带了附加层,所以带来了更多了资源开销,从而降低了虚拟机的性能。
裸机虚拟机管理程序通过在主机的硬件上安装和运行,因为它直接与底层硬件连接或打交道,所以解决了性能问题,它完全不需要运行主机操作系统,作为安装在主机上的操作系统当然主要就是为了管理程序,裸机虚拟机管理程序与托管虚拟机管理程序不同的是,裸机虚拟机管理程序拥有属于自己的设备驱动程序,可以直接与底层每个组件进行交互,以执行任何I/O或处理操作系统上特定的任务,如此可以在可伸缩性或稳定上而获得更好的性能。好了,到了这里我们讨论完了虚拟机管理程序和裸机虚拟机管理程序的区别,可能有一个大大的疑问,为何在虚拟机和主机之间要附带额外的这一层呢?因为虚拟机有属于自己一套虚拟化操作系统,而主机也有一套真实的操作系统,所以虚拟机管理程序为虚拟机提供管理和在执行虚拟机操作系统的平台上发挥着重要的作用,它允许主机在作为客户端运行的虚拟机共享其资源。
如下图(图片来源于园友:纯洁的微笑),虚拟机包含虚拟硬件、内核(即操作系统)、用户空间。

Container
我们来揭开容器的面纱,与虚拟化硬件的虚拟机不同的是,容器通过抽象用户空间来提供操作系统级虚拟化,如下图(图片来源于网络):

如上图仅仅只打包用户空间而不包含内核和虚拟硬件,每个容器都有属于自己的独立用户空间,以此来允许多个容器运行在单个主机上,也就是网上很多资料所提及的容器进一步封装了linux,占用资源少。同时我们也可以看到所有操作系统级的体系结构都在容器之间共享,这也就是网上很多资料所提及的容器轻巧的原因。
总结
本节内容我们就到这里,内容太多也容易引起视觉疲劳,不出意外的话,关于Docker系列,应该会坚持每日一更,感谢阅读,下节再会。
Docker系列开篇之Virtual Machine VS Container(一)的更多相关文章
- 虚拟机(Virtual Machine)和容器(Container)的对比
目前云计算平台常用的虚拟化技术有虚拟机(Virtual Machine)和容器(Container)两种.虚拟机已经是比较成熟的技术,容器技术作为下一代虚拟化技术,国内的各厂商应用还不广,但似乎其代表 ...
- Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM
<Windows Azure Platform 系列文章目录> Update: 2016-11-3,如果大家在使用Linux VM,使用FIO进行IOPS测试的时候,请使用以下命令: su ...
- [New Portal]Windows Azure Virtual Machine (11) 在本地使用Hyper-V制作虚拟机模板,并上传至Azure (1)
<Windows Azure Platform 系列文章目录> 本章介绍的内容是将本地Hyper-V的VHD,上传到Azure数据中心,作为自定义的虚拟机模板. 注意:因为在制作VHD的最 ...
- [New Portal]Windows Azure Virtual Machine (12) 在本地使用Hyper-V制作虚拟机模板,并上传至Azure (2)
<Windows Azure Platform 系列文章目录> 本章介绍的内容是将本地Hyper-V的VHD,上传到Azure数据中心,作为自定义的虚拟机模板. 注意:因为在制作VHD的最 ...
- Windows Azure Virtual Machine (31) 迁移Azure虚拟机
<Windows Azure Platform 系列文章目录> 为什么要写这篇Blog? 之前遇到过很多客户提问: (1)我之前创建的虚拟机,没有加入虚拟网络.现在需要重新加入虚拟机网络, ...
- Docker系列-(1) 原理与基本操作
Docker是一个开源的应用容器引擎,基于Go语言,并遵从Apache2.0协议开源. Docker可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux机器 ...
- docker系列之一:初见docker
什么是docker? docker是目前linux最流行的容器技术,Docker 将应用程序与该程序的依赖,打包在一个文件里面.运行这个文件,就会生成一个虚拟容器.程序在这个虚拟容器里运行,就好像在真 ...
- Azure PowerShell (6) 设置单个Virtual Machine Endpoint
<Windows Azure Platform 系列文章目录> 请注意: - Azure不支持增加Endpoint Range - 最多可以增加Endpoint数量为150 http:// ...
- Azure PowerShell (7) 使用CSV文件批量设置Virtual Machine Endpoint
<Windows Azure Platform 系列文章目录> 请注意: - Azure不支持增加Endpoint Range - 最多可以增加Endpoint数量为150 http:// ...
随机推荐
- Failed to start Docker Application Container Engine.
[root@dockertest ~]# systemctl status docker.service● docker.service - Docker Application Container ...
- Linux不重启识别新添加的磁盘
现网的一台EXSI 下的虚拟机一般在进行配置变更后都会通过重启来识别新增的配置,不过业务侧某台主机因为业务需要无法重启,想通过不重启直接识别护容上去的新磁盘.经测试,发现如下方可以解决. 1.通过ex ...
- HTML连载22-序选择器(下)
一.子元素选择器 1. (1)选中标签之中只有一个子元素的子元素,并且那个标签必须使我们格式中前面指定的标签才行 (2)格式: 标签:only-chirld{属性:值:} (3)举例: p:only- ...
- 前端从零开始学习Graphql
学习本姿势需要电脑装有node,vue-cli相关环境,以及要有node,express,koa,vue相关基础 本文相关demo的github地址: node服务:https://github.co ...
- windows软件卸载工具Geek Uninstaller免安装版
曾经一个问题一直困扰这我,就是每次在卸载软件的时候都卸载不干净,卸载完后会有遗留文件夹,每次都要手动删,还有注册表也不干净,让我很是难受,直到有一天发现了一个卸载神器Geek Uninstaller ...
- SpringCloud解析之Zuul(一)
本文基于Spring Cloud Edgware.SR6,Zuul版本1.3.1,解析Zuul的请求拦截机制,让大家对Zuul的原理有个大概的认识和了解.如有不对的地方,欢迎指正. spring bo ...
- C语言指针专题——为何要学习指针
欢迎转发本文! 之前的文章与各位谈论了指针是什么,以及指针为何这那么难学.不少知友留言说看了我的文章对指针了解了不少,这给我继续创作提供了莫大的动力啊.指针其实就是一个纸老虎,你看着可怕,等你了解其本 ...
- 五分钟了解Zabbix
Zabbix-简介 Zabbix概念 Zabbix组成 Server Zabbix server 是 Zabbix agent 向其报告可用性.系统完整性信息和统计信息的核心组件.是存储所有配置信息. ...
- python函数知识一 函数初始、定义与调用、返回值、参数和函数的好处+菜中菜
第四章 函数 1.函数初识: def :关键字 -- 定义 函数名:和变量的定义方式一样 (): 用于参数传递,: 形参:函数的定义中()内的是形参 实参:调用的()内是实参 传参:调用时将实参传递给 ...
- 洛谷P3905 道路重建
题目:https://www.luogu.org/problemnew/show/P3905 分析: 此题是显然的最短路算法,只是看到一起删掉的一堆边感到十分棘手,而且还要求出的是最短添加边的总长度 ...