rootfs

任何程序运行时都会有依赖,无论是开发语言层的依赖库,还是各种系统 lib、操作系统等,不同的系统对库的要求不一样,为了让容器运行时一致,容器技术将依赖的操作系统、各种 lib 依赖整合打包在一起, 然后容器启动时,作为它的根目录(根文件系统 rootfs),使得容器进程的各种依赖调用都在这个根目录里,这样就做到了环境的一致性。

也就是说 rootfs 代表一个容器运行阶段内部可见的文件系统视角,该文件系统下含有容器所需要的系统文件、工具、容器文件等。

传统的 Linux 操作系统内核启动时,内核会挂载一个只读的 rootfs,当系统检测其完整性之后,决定是否将其切换为读写模式。

在容器架构中,沿用了 Linux 中这种 rootfs 思想.

Docker Daemon 为容器挂载 rootfs 时,与传统的 Linux 内核相似,将其设定为只读模式。

但在 rootfs 挂载完毕之后, Docker Daemon 利用 Union Mount 技术,在这个只读的 rootfs 之上,再挂载了一个读写的文件系统。在这里我们可以把 Docker 文件系统理解为:含有一个只读的 rootfs 和一个可读写的文件系统。容器中的进程对 rootfs 中的内容拥有只读权限,对于读写文件系统内容拥有读写权限。

通过上图发现,容器虽然只有一个文件系统,但该文件系统由两层构成,分别为读写文件系统和只读文件系统,文件系统即有了层级 “layer”的概念。

Docker 利用在前面提到的 Union Mount 技术将这两个两层挂载。

Last Updated:
Contributors: isno