Docker系列开篇之Virtual Machine VS Container(一)

简介: Docker系列开篇之Virtual Machine VS Container(一)前言本节开始我们正式进入Docker系列,网上关于Docker相关文章如数家珍,写博客至今,我也一直在朝着如何写出通俗易懂且不枯燥的文章这个目标前进,喃喃自语的同时也希望看到文章的童鞋能明白我在讲什么,将知识点叙述清楚没有,讲解的效果如何,是否有启发或收获,能够得到及时的反馈当然也能让我理解的更透彻,好了,我们开始吧。

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系列,应该会坚持每日一更,感谢阅读,下节再会。
原文地址https://www.cnblogs.com/CreateMyself/p/10702559.html

相关文章
|
11月前
|
Linux Shell Docker
|
6月前
|
存储 Kubernetes C++
Kubernetes VS Docker Swarm:哪个容器编排工具更适合你?
当今,容器化技术已成为IT领域的热门话题,而容器编排工具是实现容器自动化部署和管理的关键。本文将比较两种主流的容器编排工具Kubernetes和Docker Swarm,并探讨它们的优缺点,以帮助你选择最适合自己的工具。
|
6月前
|
Kubernetes 调度 C++
Kubernetes vs Docker Swarm:容器编排工具的比较与选择
在当今云计算时代,容器技术的应用越来越广泛。而在众多容器编排工具中,Kubernetes和Docker Swarm是两个备受关注的竞争者。本文将深入比较这两个工具的特点、优势和劣势,帮助读者更好地选择适合自己的容器编排解决方案。
|
1月前
|
Java Docker 索引
Springboot的Container Images,docker加springboot
本文介绍了如何使用Spring Boot的层索引文件和Docker优化Spring Boot应用程序的容器化过程,包括解压缩可执行jar和创建分层Docker映像的方法。
29 9
Springboot的Container Images,docker加springboot
|
2天前
|
应用服务中间件 网络安全 数据安全/隐私保护
【赵渝强老师】使用Docker Machine远程管理Docker
Docker Machine 是 Docker 官方提供的远程管理工具,可帮助开发人员在远程主机或虚拟机上安装和管理 Docker 环境。本文介绍了如何在远程主机上安装 Docker 并配置免密码登录,以及使用 Docker Machine 管理远程 Docker 主机的常用命令。
|
2天前
|
Kubernetes Docker 容器
【赵渝强老师】Docker的Container网络模式
Docker容器在网络环境中彼此隔离,但可通过配置不同网络模式实现容器间通信。其中,container模式使容器共享同一网络命名空间,通过localhost或127.0.0.1互相访问,提高传输效率。本文介绍了container模式的特点及具体示例。
|
6月前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm了解两者特点,助力选取合适容器编排工具
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。
208 1
|
11月前
|
JSON 网络协议 网络安全
|
2月前
|
Unix Shell Linux
5-15|Docker报错OCI runtime exec failed: exec failed: unable to start container process: exec: “/bin/ba
5-15|Docker报错OCI runtime exec failed: exec failed: unable to start container process: exec: “/bin/ba
|
3月前
|
Docker 容器
【Azure 应用服务】App Service for Container 无法拉取Docker Hub中的镜像替代方案
【Azure 应用服务】App Service for Container 无法拉取Docker Hub中的镜像替代方案
下一篇
无影云桌面