Docker 深入 – 探究docker 与虚拟机的实质区别

Docker 深入 - 探究docker 与虚拟机的实质区别

1、userland

下面是来自于维基百科 userland 的介绍

现代计算机操作系统通常将虚拟内存分离为内核空间和用户空间。[a]这种分离主要用于提供内存保护和硬件保护,以防止恶意或错误的软件行为。

内核空间严格保留用于运行特权操作系统内核,内核扩展和大多数设备驱动程序。相反,用户空间是应用软件和一些驱动程序执行的存储区域。

userland 是什么,是指在操作系统内核之外运行的所有代码

每个用户空间进程通常在其自己的虚拟内存空间中运行,除非明确允许,否则无法访问其他进程的内存。这是当今主流操作系统中内存保护的基础,也是特权分离的基石。单独的用户模式也可用于构建高效的虚拟机 - 请参阅Popek和Goldberg虚拟化要求。有了足够的权限,进程可以请求内核将另一个进程的内存空间的一部分映射到它自己的内存,就像调试器的情况一样。程序还可以请求共享内存具有其他过程的区域,尽管也可以使用其他技术来允许进程间通信。

2、容器内的进程

容器内的进程是直接运行于宿主内核的,这点和宿主进程一致,只是容器的 userland 不同,容器的 userland 由容器镜像提供,也就是说镜像提供了 rootfs。

假设宿主是 Ubuntu,容器是 CentOS。CentOS 容器中的进程会直接向 Ubuntu 宿主内核发送 syscall,而不会直接或间接的使用任何 Ubuntu 的 userland 的库。

3、虚拟机

虚拟机是虚拟环境,在现有系统上虚拟一套物理设备,然后在虚拟环境内运行一个虚拟环境的操作系统内核,在内核之上再跑完整系统,并在里面调用进程。

虚拟机中,CentOS 的进程发送 syscall 内核调用,该请求会被虚拟机内的 CentOS 的内核接到,然后 CentOS 内核访问虚拟硬件时,由虚拟机的服务软件截获,并使用宿主系统,也就是 Ubuntu 的内核及 userland 的库去执行。

4、docker 容器

Docker 容器只是一个进程,只不过利用镜像提供的 rootfs 提供了调用所需的 userland 库支持,使得进程可以在受控环境下运行而已,它并没有虚拟出一个机器出来。这是他和虚拟机最本质的区别
---------------------
作者:简简单单OnlineZuozuo
来源:CSDN
原文:https://wretchant.blog.csdn.net/article/details/96451421
版权声明:本文为博主原创文章,转载请附上博文链接!

版权声明:
作者:王金阁
链接:https://www.nnbbxx.net/post-5859.html
来源:王金阁博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>