前言

本节开始我们正式进入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(一)的更多相关文章

  1. 虚拟机(Virtual Machine)和容器(Container)的对比

    目前云计算平台常用的虚拟化技术有虚拟机(Virtual Machine)和容器(Container)两种.虚拟机已经是比较成熟的技术,容器技术作为下一代虚拟化技术,国内的各厂商应用还不广,但似乎其代表 ...

  2. Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM

    <Windows Azure Platform 系列文章目录> Update: 2016-11-3,如果大家在使用Linux VM,使用FIO进行IOPS测试的时候,请使用以下命令: su ...

  3. [New Portal]Windows Azure Virtual Machine (11) 在本地使用Hyper-V制作虚拟机模板,并上传至Azure (1)

    <Windows Azure Platform 系列文章目录> 本章介绍的内容是将本地Hyper-V的VHD,上传到Azure数据中心,作为自定义的虚拟机模板. 注意:因为在制作VHD的最 ...

  4. [New Portal]Windows Azure Virtual Machine (12) 在本地使用Hyper-V制作虚拟机模板,并上传至Azure (2)

    <Windows Azure Platform 系列文章目录> 本章介绍的内容是将本地Hyper-V的VHD,上传到Azure数据中心,作为自定义的虚拟机模板. 注意:因为在制作VHD的最 ...

  5. Windows Azure Virtual Machine (31) 迁移Azure虚拟机

    <Windows Azure Platform 系列文章目录> 为什么要写这篇Blog? 之前遇到过很多客户提问: (1)我之前创建的虚拟机,没有加入虚拟网络.现在需要重新加入虚拟机网络, ...

  6. Docker系列-(1) 原理与基本操作

    Docker是一个开源的应用容器引擎,基于Go语言,并遵从Apache2.0协议开源. Docker可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux机器 ...

  7. docker系列之一:初见docker

    什么是docker? docker是目前linux最流行的容器技术,Docker 将应用程序与该程序的依赖,打包在一个文件里面.运行这个文件,就会生成一个虚拟容器.程序在这个虚拟容器里运行,就好像在真 ...

  8. Azure PowerShell (6) 设置单个Virtual Machine Endpoint

    <Windows Azure Platform 系列文章目录> 请注意: - Azure不支持增加Endpoint Range - 最多可以增加Endpoint数量为150 http:// ...

  9. Azure PowerShell (7) 使用CSV文件批量设置Virtual Machine Endpoint

    <Windows Azure Platform 系列文章目录> 请注意: - Azure不支持增加Endpoint Range - 最多可以增加Endpoint数量为150 http:// ...

随机推荐

  1. ZOJ 3953:Intervals(优先队列+思维)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5572 题意:给出n个线段,问最少删除几个线段可以使得任意一个点不会被三个以上的 ...

  2. 存储账户静态网站与Azure CDN

    背景 把静态网站或文件托管在对象存储上,有很多可能很多好处,比如说:可以节省成本,因为相对虚机更便宜:性能更优,因为可以依赖于对象存储本身的高吞吐以及 CDN 的:更好的高可用性,因为也可以依赖于对象 ...

  3. Ubuntu 16.4-desktop系统安装显卡CUDA具体步骤!

    1.禁用nouveau驱动(切换至tty界面) sudo vim /etc/modprobe.d/blacklist.conf 在文本最后添加:blacklist nouveau options no ...

  4. 在eclipse中使用git创建本地库,以及托管项目到GitHub超详细教程

    关于安装git的教程,由于比较简单,并且网上教程特别多,而且即使不按照网上教程,下载好的windows版本git,安装时候一路默认设置就行. 安装好之后,在桌面上有git图标:右键菜单中有Git Ba ...

  5. 基于SpringBoot的WEB API项目的安全设计

    SpringBoot的开箱即用功能,大大降低了上手一个WEB应用的门槛,友好的REST接口支持,在SpringCloud微服务体系中可编程性大大提高,本篇基于一个面向企业调用方用户的WEB API项目 ...

  6. 数据结构丨N叉树

    遍历 N叉树的遍历 树的遍历 一棵二叉树可以按照前序.中序.后序或者层序来进行遍历.在这些遍历方法中,前序遍历.后序遍历和层序遍历同样可以运用到N叉树中. 回顾 - 二叉树的遍历 前序遍历 - 首先访 ...

  7. Bzoj 1537: [POI2005]Aut- The Bus 题解 [由暴力到正解]

    1537: [POI2005]Aut- The Bus Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 387  Solved: 264[Submit][S ...

  8. 分享基于EF6、Unitwork、Autofac的Repository模式设计

    目录 分享基于EF6.Unitwork.Autofac的Repository模式设计 一.实现的思路和结构图 二.Repository设计具体的实现代码 三.Repository设计的具体的使用 四. ...

  9. requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read))【已解决】

     问题: 跑python自动化时出现报错如下图 解决: requests请求时,后面加上参数:stream=True. 参考外国小哥:https://stackoverflow.com/questio ...

  10. 实验吧--web--你真的会php吗

    ---恢复内容开始--- 实验吧的一道题php审计题.拉下来写一写. http://ctf5.shiyanbar.com/web/PHP/index.php 打开之后说have fun 那就抓包来看看 ...