docker底层原理

docker和kvm都是虚拟化技术,docker属于秒级启动的轻量高性能的虚拟化,它们的主要差异:linux

一:docker与VM区别docker

 

VM(VMware)在宿主机器、宿主机器操做系统的基础上建立虚拟层、虚拟化的操做系统、虚拟化的仓库,而后再安装应用;
Container(Docker容器),在宿主机器、宿主机器操做系统上建立Docker引擎,在引擎的基础上再安装应用。那么问题来了,没有操做系统,怎么运行程序?能够在Docker中建立一个ubuntu的镜像文件,这样就能将ubuntu系统集成到Docker中,运行的应用就都是ubuntu的应用。
二:dockers=LXC+AUFSubuntu

 docker最为为LXC+AUFS组合,其中LXC负责资源管理,AUFS负责镜像管理;而LXC包括cgroup,namespace,chroot等组件app

并经过cgroup资源管理,那么,从资源管理的角度来看,Docker,Lxc,Cgroup三者的关系是怎样的呢?工具

cgroup是在底层落实资源管理,LXC在cgroup上面封装了一层,随后,docker有在LXC封装了一层;性能

Cgroup其实就是linux提供的一种限制,记录,隔离进程组所使用的物理资源管理机制;也就是说,Cgroup是LXC为实现虚拟化所使用资源管理手段,咱们能够这样说,底层没有cgroup支持,也就没有lxc,更别说docker的存在了,这是咱们须要掌握和理解的,三者之间的关系概念spa

    咱们在把重心转移到LXC这个至关于中间件上,上述咱们提到LXC是创建在cgroup基础上的,咱们能够粗略的认为LXC=Cgroup+namespace+Chroot+veth+用户控制脚本;LXC利用内核的新特性(cgroup)来提供用户空间的对象,用来保证资源的隔离和对应用系统资源的限制;操作系统

    Docker容器的文件系统最先是创建在Aufs基础上的,Aufs是一种Union FS,简单来讲就是支持将不一样的目录挂载到同一个虚拟文件系统之下中间件

并实现一种laver的概念,对象

  因为Aufs未能加入到linux内核中,考虑到兼容性的问题,便加入了Devicemapper的支持,Docker目前默认是创建在Devicemapper基础上,

devicemapper用户控件相关部分主要负责配置具体的策略和控制逻辑,好比逻辑设备和哪些物理设备创建映射,怎么创建这些映射关系等,而具体过滤和重定向IO请求的工做有内核中相关代码完成,所以整个device mapper机制由两部分组成--内核空间的device mapper驱动,用户控件的device mapper库以及它提供的dmsetup工具;

相关文章
相关标签/搜索