社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Boann Shital Shah

Boann Shital Shah 最近创建的主题
Boann Shital Shah 最近回复了
5 年前
回复了 Boann Shital Shah 创建的主题 » VM的Guesto和Docker的Basic Image有什么区别?

了解虚拟化和容器如何在较低级别上工作可能会有所帮助。这会让很多事情变得明朗。

注意:我在下面的描述中做了一些简化。更多信息请参见参考资料。

虚拟化如何在较低级别上工作?

在这种情况下,VM管理器接管CPU环0(或较新CPU中的“根模式”),并拦截来宾操作系统发出的所有特权调用,从而产生来宾操作系统拥有自己硬件的假象。有趣的事实:在1998年之前,人们认为在x86体系结构上实现这一点是不可能的,因为没有办法进行这种拦截。VMware的员工们 were the first 他想出了一个主意,重写内存中的可执行字节,以实现来宾操作系统的特权调用。

其最终效果是,虚拟化允许您在同一硬件上运行两个完全不同的操作系统。每个来宾操作系统都会经历引导、加载内核等所有过程。您可以拥有非常严格的安全性。例如,来宾操作系统无法完全访问主机操作系统或其他来宾操作系统,从而导致事情变得一团糟。

容器如何在低水平下工作?

2006 ,包括谷歌的一些员工在内的人实现了一个新的内核级功能,名为 名称空间 (然而这个想法 long 之前 existed in FreeBSD )操作系统的一个功能是允许进程之间共享网络和磁盘等全局资源。如果这些全局资源被包装在名称空间中,以便它们仅对在同一名称空间中运行的那些进程可见,该怎么办?比方说,你可以得到一块磁盘,把它放在名称空间X中,然后在名称空间Y中运行的进程看不到或访问它。类似地,名称空间X中的进程无法访问分配给名称空间Y的内存中的任何内容。当然,X中的进程无法看到或与名称空间Y中的进程对话。这为全局资源提供了一种虚拟化和隔离。Docker就是这样工作的:每个容器都在自己的名称空间中运行,但使用的正是 相同的 内核和所有其他容器一样。之所以发生隔离,是因为内核知道分配给进程的名称空间,并且在API调用期间,它确保进程只能访问自己名称空间中的资源。

容器和虚拟机的局限性现在应该很明显:不能像虚拟机那样在容器中运行完全不同的操作系统。不管你 可以 运行不同的Linux发行版,因为它们共享同一个内核。隔离级别没有VM中的隔离级别强。事实上,在早期的实现中,有一种方法可以让“来宾”容器接管主机。你还可以看到,当你加载一个新的容器时,操作系统的一个全新副本并不像在虚拟机中那样启动。所有容器 share the same kernel