docker底层使用linux的四个技术,chroot,namespace,cgroup,OverlayFs
一、chroot
chroot:改变某进程的根目录,使程序不能访问该目录之外的其他目录
二、namespace
Namespace: 是linux系统提供的一种资源隔离机制,使容器中的进程都可以在单独的命名空间中运行,并且只可以访问当前命名空间中的资源。Namespace 可以隔离进程 ID、主机名、用户 ID、文件名、网络访问和进程间通信等相关资源。
Linux Namespace是Linux系统提供的一种资源隔离机制,可实现系统资源隔离的列表如下:
IPC:
用于隔离进程间通信。
MNT:
用于隔离文件系统和提供硬盘挂载点。
NET:
用于隔离网络。
PID:
用于隔离进程ID。
User:
用于隔离用户和用户组。
UTS:
用于隔离HostName和DomianName。
三、cgroup
cgroup是Linux内核的一个功能,用来限制和隔离进程的资源使用情况,比如CPU、内存、磁盘I/O、网络等。
Linux系统中能够控制的资源列表
cpu:
主要限制进程的cpu使用率。
cpuacct:
可以统计cgroups中的进程的cpu使用报告。
cpuset:
可以为cgroups中的进程分配单独的cpu节点或者内存节点。
memory:
可以限制进程的memory使用量。
blkio:
可以限制进程的块设备io。
devices:
可以控制进程能够访问某些设备。
net_cls:
可以标记cgroups中进程的网络数据包,然后可以使用tc模块(traffic control)对数据包进行控制。
net_prio:
这个子系统用来设计网络流量的优先级
freezer:
可以挂起或者恢复cgroups中的进程。
ns:
可以使不同cgroups下面的进程使用不同的namespace
hugetlb:
这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统。
四、OverlayFs
OverlayFs:是一种堆叠文件系统,它依赖并建立在其他文件系统之上(ext4、xfs),并不直接参与磁盘空间结构划分,将原来系统文件中的文件或目录合并在一起,最后向用户展示的文件是在同一级的目录,这就是联合挂载技术。
Linux内核为Docker提供的OverlayFS驱动有两种:Overlay和Overlay2。而Overlay2是相对于Overlay的一种改进,在Inode利用率方面比Overlay更有效。
OverlayFS实现方式:
OverlayFS通过三个目录:lower目录、upper目录、以及work目录实现。
lower:
一般对应的是只读数据。
upper:
可以进行读写操作的目录。
work:
目录为工作基础目录,挂载后会自动创建一个work子目录(实际测试手动卸载后该目录并不会被删除)
该目录主要是存储一些临时存放的结果或中间数据的工作目录。