docker 与虚拟机 区别

 

 

虚拟机:对硬件虚拟化,不同的llinux内核。

 

docker :只是将容器与操作系统隔开,各个容器之间隔开

 

 

虚拟机的 Hypervisor 创建了一个非常牢固的边界,以防止应用程序突破它,而容器的边界不那么强大。

 

 

==============================================================================

容器通过Linux的NamespaceCgroups技术对应用程序进程进行隔离和资源限制。

Namespace的作用是环境隔离,它让应用程序只看到该Namespace内的世界。而Cgroups 的作用是限制分配给进程的宿主机资源。不过,对于宿主机来说,这些被“隔离”了的进程跟其他进程并没有太大区别。

对于Namespace技术,这里做一个稍微深入一点的解读。通过Mount Namespace,容器可以修改进程对自己的文件系统“挂载点”的认知。在容器进程启动之前重新挂载它的整个根目录"/",这个挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”。它还有一个更为专业的名字,叫作:rootfs(根文件系统)。rootfs只是一个操作系统所包含的文件、配置和目录,并不包括操作系统内核。同一台机器上的所有容器,都共享宿主机操作系统的内核[3]

Linux CGroup全称Linux Control Group,是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。Cgroup可让您为系统中所运行任务(进程)的用户定义组群分配资源—比如CPU时间、系统内存、网络带宽或者这些资源的组合。您可以监控您配置的Cgroup,拒绝Cgroup访问某些资源,甚至在运行的系统中动态配置您的Cgroup[4]

回过头来谈谈操作系统内核,由于同一台宿主机上的所有容器都共享宿主机的操作系统内核,那么如果有一个容器里的应用程序需要配置内核参数,跟内核进行直接交互,则这些参数对所有容器来说就像一个“全局变量”,牵一发而动全身。

这也是容器劣势的主要原因,正是因为容器共享宿主机操作系统内核,因此不能像虚拟机一样模拟出完整的硬件机器充当沙盒,从而实现完全隔离。也就是说,容器是进程级的隔离,它可以通过影响宿主机操作系统内核来影响其他容器。

但容器还是有很多优势。首先,容器的空间占用比虚拟机小很多,甚至可以小到10MB,和虚拟机动则数GB相比十分小巧;其次,容器能轻松限制内存和CPU使用率,相比虚拟机采用hypervisor来实现虚拟化更加轻量;同时,正是由于容器体积小、采用的技术(Containerzation Engine)更轻量,使得它启动十分迅速,这十分有利于快速扩展。

 

 

参考:

https://www.cnblogs.com/JasonCeng/p/14814888.html

posted @   redrobot  阅读(329)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示