docker 实现原理

实现原理

docker虚拟化 的核心是需要解决两个问题,资源隔离与资源限制

  • 虚拟机是通过硬件虚拟化技术,通过一个 hypervisor 层实现对资源的彻底隔离

  • 容器则是通过操作系统级别的虚拟化技术,利用操作系统内核CgroupNamespace 特性,此方法是完全通过软件的方式来实现的

nameSpace 资源隔离

命名空间是全局资源的一种抽象,将不同的资源放在不同的命名空间里,各个命名空间之间是相互隔离的。

CGroup 资源限制

通过 namespace 可以保证容器之间的隔离,但是无法控制每个容器占有多少资源。如果某个容器正在执行 CPU 密集型任务,那么就会影响其他的容器中任务的性能与执行效率,导致多个容器相互影响并抢占资源。如何对多个容器资源的使用进行限制,就成了解决进程虚拟资源
Control Groups 简称(CGroups)就是能够隔离宿主机上的物理资源,如 CPU内存磁盘 IO 等,每个CGroup都是一组被相同的b标准和参数限制的进程。而我们需要做的就是把这个容器加入到指定的 CGroup中。

UnionFS 联合文件系统

docker 借助于 LinuxnameSpacecGroup 分别解决了资源隔离和资源限制的问题,那么这个容器就是很轻量级的,


镜像的结构正如上图所示,是一层层的堆叠起来的,镜像中的这些层都是 只读层当我们运行程序的时候,就是只要添加新的可写层即可(容器层)。对于运行中的容器所做的所有更改(比如写入新文件,修改现有文件,删除文件)都将写入这个容器层。

对于容器的操作,主要是使用了写时复制 (CoW) 技术。只有需要写时才去复制Cow技术可以让所有的容器共享 image 文件系统。所有数据都从 image 中读取。只有对当前文件进行写操作时,才从 images 中把要写的文件复制到自己的文件系统进行更改。无论多少个容器都共享一个 images。

posted @ 2022-06-23 16:42  沧海一声笑rush  阅读(171)  评论(0编辑  收藏  举报