白话Docker(rootfs)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了白话Docker(rootfs)相关的知识,希望对你有一定的参考价值。

参考技术A

前文说到要深入到操作系统级别的运行环境一致性,还是需要 深化 Mount Namespace 这项技术。

Docker在镜像的设计中引入了层(layer)的概念。也就是说,用户制作镜像的每一步操作,都会生成一个层,也就是一个增量 rootfs。
为了实现这种想法,就用到了 联合文件系统 (Union File System) 的能力。

最主要的功能是将多个不同的目录联合挂载到同一个目录下。

执行 挂载命令

A 和 B 目录将被合并。

在docker中,其目录就被放置在 /var/lib/docker 路径下。最新的已经被overlay技术所取代,其实和aufs差不多。

当我拉取一个容器镜像时,所谓的镜像就是一个Ubuntu操作系统的rootfs。他的内容是Ubuntu操作系统的所有文件和目录。不过与普通的rootfs相较而言,这里往往是由多个层组成的。

可以看到,这个镜像实际是有4个层组成,每一层实际上是ubuntu操作系统文件与目录的一部分。而在使用镜像时,需要将这些联合层,挂载到一个统一的挂载点上。

查看overlay 的挂载信息。

rootfs 由 底层的 只读层 init层(ro+wh) ,可读写层(rw)组成。overlay 改成了 upper层,lower层,merge层。
只读层 时只读的,但还有wh,wh是删除时,底层将删除文件遮住。
init层 夹在只读层与读写层之间,init 层是docker项目单独生成的一个内部层。专门用来放 /etc/hosts/ , /etc/resove.conf 等信息。
需要这样一个层的原因是,这些文件本来只属于只读的一部分,但是需要启动容器是由一些改变。
读写层 就是可以读写的了,挂载方式为rw。修改的是以增量的方式递增。

Docker学习总结(66)—— Docker 的三大基石:NamespaceCgroup 和 rootfs

前言:

云计算领域最火的莫过于“容器”,而提到容器,就不得不提 Docker,可以说 Docker 已经是容器的代名词。容器其实是一种沙盒技术,顾名思义,沙盒就是能够像集装箱一样,把应用“装”起来的技术。这样,应用和应用之间就有了边界,不互相干扰。Docker 运行的三大基石:Namespace、Cgroup和 rootfs。了解这些内容就能够清晰地明白 docker 和虚拟机的区别了,也就是说运行在 Docker 里的进程仍然需要宿主机的支持,比如内核版本等。而我们通常会把容器技术和虚拟化技术做对比,应该会常常看到这样一张图。

左边的图,画出了虚拟机的工作原理。其中,Hypervisor 是虚拟机的重要组成部分,通过硬件虚拟化功能,模拟出了运行一个操作系统需要的各种硬件,比如 CPU、内存、I/O 设备等,然后,它在这些虚拟的硬件上安装了一个新的操作系统,即 Guest OS。而容器是进程级隔离,依靠 Namespace 机制实现进程间隔离,Cgroups 实现进程资源限制。

一、Linux Namespace

Linux Namespace 是 Kernel 的一个功能,可以隔离一系列的系统资源,比如 PID(Process ID)、User ID、Network 等。命名空间建立系统不同的视图,从用户的角度来看,

以上是关于白话Docker(rootfs)的主要内容,如果未能解决你的问题,请参考以下文章

Docker镜像的管理和创建

大白话Docker入门

Docker镜像

Docker | 大白话带你快速安装Docker,不懂你捶我

Docker 容器管理

docker基础