进入docker容器查看cpuinfo为什么显示的是宿主机的信息呢?
在容器内使用top命令为什么也显示宿主机的信息?
docker本质是在进程的基础上引入namespace做隔离,引入unionfs做虚拟文件系统,引入资源配额做资源限制。
当你在Docker容器内查看/proc/cpuinfo时,显示的是宿主机的信息,这是因为Docker容器共享宿主机的内核,而/proc/cpuinfo文件是内核提供的信息。
Docker使用Linux的命名空间(namespaces)来实现容器的隔离,但它并不虚拟化整个操作系统。相反,容器与宿主机共享同一个内核,这样可以避免运行多个相同内核的副本,提高了效率。因此,在容器中查看/proc/cpuinfo会显示宿主机的信息,因为该文件反映的是宿主机上的CPU信息。
同样地,当你在容器内使用top命令时,它也会显示宿主机的信息。top命令通过读取/proc目录下的各种信息来获取系统状态,包括CPU、内存、进程等。由于容器与宿主机共享/proc文件系统,所以top命令在容器中显示的是宿主机上的信息。
需要注意的是,虽然Docker提供了资源配额和限制的功能,但容器内的进程仍然可以观察到宿主机上的整体资源使用情况。这是因为容器的隔离是基于命名空间和控制组(cgroups)等机制实现的,而不是完全虚拟化。
收起进入Docker容器查看cpuinfo显示的是宿主机的信息,是因为Docker容器并不是一个完整的虚拟机,它与宿主机共享同一个内核,因此在容器内查看cpuinfo时,会显示宿主机的信息。
同样地,使用top命令在容器内显示宿主机的信息,也是因为top命令是在容器内运行的,但是它获取的信息是从宿主机的/proc目录下获取的,因此会显示宿主机的信息。
Docker本质上是一个轻量级的虚拟化技术,它通过引入namespace实现了进程、网络、文件系统等方面的隔离,通过引入unionfs实现了虚拟文件系统,通过资源配额实现了资源限制。但是,Docker并不是一个完整的虚拟机,它与宿主机共享同一个内核,因此在某些情况下,容器内会显示宿主机的信息。