docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker底层原理

Docker的底层原理及分析

作者:三傻317

Docker通过命名空间实现进程、网络等隔离,利用Cgroups控制资源,联合文件系统分层存储并支持数据持久化,数据卷技术确保容器数据不受生命周期影响

Docker底层原理

docker实际上类似于一种“进程隔离技术”,利用Linux系统的一些特性功能,将不同容器隔离开来,使其不受外界的影响。

docker使用的Linux特性功能主要有:

1、命名空间(Namespace):把不同容器的进程、网络、文件系统隔离开来

2、控制组(Cgroups):限制容器使用CPU、内存等资源

3、联合文件系统(UnionFS):支持镜像的分层构建

一、命名空间

命名空间可以将全局资源分为若干块,命名空间内部的进程无法看到其他命名空间的进程,利用这一特点,就可以做到容器的隔离。

命名空间有很多类型,docker主要使用的如下:

二、控制组

为了防止被隔离的容器吃光宿主机的资源,docker还利用了Linux提供的Cgroups来进行资源控制,如CPU,内存,磁盘I/O,网络等资源。

Cgroups实际上是一颗资源管理的层级树,每个Cgroup节点都能设置资源限制,进程加入某个Cgroup,就必须遵守对应的限制。

三、联合文件系统

UnionFSUnion File System,联合文件系统)是一种分层的文件系统。

它的特点是:

为了保证docker拉取后镜像干净不被修改,镜像被拉取下来都是只读的层,运行容器时,会在镜像的最上层加上一层可写层,由于上层可以覆盖下层的特性,修改上层文件就能达到修改容器运行逻辑的目的,同时,保证了这个镜像内部不被修改;容器删除后,可写层会消失,镜像层保持不变 。

当需要修改可写层时,将需要修改的对应数据找到并复制到可写层,再进行修改,这就是写时复制。

四、数据卷挂载

通过学习联合文件系统我们知道,容器内部的文件系统是独立的,也是一次性的,每次容器重启后,原有的数据就会消失,对于需要数据持久化的程序,就需要使用数据卷技术。

数据卷实际上是容器与宿主机之间共享的一块目录/文件,它不受容器的生命周期影响,因此可以被用来持久化数据

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文