前言
1: 只知道虚拟机会对硬件进行虚拟化,容器使用的硬件资源还是宿主机的
正文
1: 对 Docker 项目来说,它最核心的原理实际上就是为待创建的用户进程: 启用 Linux Namespace 配置; 设置指定的 Cgroups 参数; 切换进程的根目录(Change Root)。
2: 实际上,同一台机器上的所有容器,都共享宿主机操作系统的内核。
这就意味着,如果你的应用程序需要配置内核参数、加载额外的内核模块,以及跟内核进行直接的交互,你就需要注意了:这些操作和依赖的对象,都是宿主机操作系统的内核,它对于该机器上的所有容器来说是一个“全局变量”,牵一发而动全身。
这也是容器相比于虚拟机的主要缺陷之一:毕竟后者不仅有模拟出来的硬件机器充当沙盒,而且每个沙盒里还运行着一个完整系统。
3:容器镜像,也叫作:rootfs。它只是一个操作系统的所有文件和目录,并不包含内核,它和mount namespace协助构建出独立的文件系统。
而这个挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”。它还有一个更为专业的名字,叫作:rootfs(根文件系统)。
所以,一个最常见的 rootfs,或者说容器镜像,会包括如下所示的一些目录和文件,比如 /bin,/etc,/proc 等等:
所以说,rootfs 只包括了操作系统的“躯壳”,并没有包括操作系统的“灵魂”。