Docker实现的两个基本理论知识
一、NameSpace:内核的实现技术,隔离机制。
●PID NameSpace:(隔离pid)每一个用户空间都有一个唯一的PID号,彼此之间不会干扰。从Linux2.6.24内核版本开始引入的,是一种最新的技术。
●Network NameSpace:真正起源于Linux2.6.29,实现与网络用户隔离的。(网络设备、网络线、端口资源隔离)
●User NameSpace:实现用户和用户组资源隔离的。Linux3.8
●IPC NameSpace: 进程间通信机制。多个用户之间的通信(信号量、消息队列和共享内存)也是隔离的。Linux 2.6.19
●UTC NameSpace: Linux 2.6.19 主机名和域名的隔离。
●Mount NameSpace: 实现挂载文件系统隔离的。Linux2.4.19
实现容器技术所需的API:
clone()克隆是实现线程的系统调用。
sents() 实现某个进程加入到某个NameSpace的。
unshare()非共享机制。进程脱离某个NameSpace。
二、CGroup: Linux Control Group Linux2.6.24被收入到内核中去的。
内核级别,限制、控制与一个进程组群的资源;NameSpace实现上述6种隔离,CGroup实现在每个用户空间配配比资源。如每个用户空间之间的CPU个数,内存大小,以及硬件网络IO等
资源限制:CPU,内存,IO
功能:
Resouce limitation:资源限制;
Prioritization:优先级控制;
Accounting:审计和统计,主要为计费;
Control:挂起进程,恢复进程;
yum install libcgroup-tools
lssbusys -m
[root@docker-vm ~]# lssubsys -m cpuset /sys/fs/cgroup/cpuset cpu,cpuacct /sys/fs/cgroup/cpu,cpuacct memory /sys/fs/cgroup/memory devices /sys/fs/cgroup/devices freezer /sys/fs/cgroup/freezer net_cls /sys/fs/cgroup/net_cls blkio /sys/fs/cgroup/blkio perf_event /sys/fs/cgroup/perf_event hugetlb /sys/fs/cgroup/hugetlb
CGroup的子系统(subsystem):
blkio:设定块设备的IO限制;(主要是磁盘)
cpu: 设定CPU的限制;
cpuacct: 报告cgroup中所使用的CPU资源;
cpuset:为cgroup中的任务分配CPU和内存资源;
memory:设定内存的使用限制;
device:控制cgroup中的任务对设备的访问;
freezer:挂起或恢复cgroup中的任务;
net_cls:(classid),使用等级级别标识符来标记网络数据包,以实现基于tc完成对不同的cgroup中产生的流量控制;
perf_event:使用后使cgroup中的任务可以进行统一的性能测试;
hugetlb:对HugeTLB系统进行限制;
CGroups中的术语:
task(任务):进程或线程
cgroup:一个独立的资源控制单位,可以包含一个或多个子系统;
subsystem:子系统
hierarchy:层级
三、AUFS: UnionFS 联合文件系统
UnioFS:把不同的物理位置的目录合并到同一个目录中。实现机制是叠加。类似于winpe,LVM
Another UFS.Alternative UFS,Adanced UFS (一个日本人写的)但是没有进入Linux内核中。
Docker是基于AUFS上的,在生产环境中没有AUFS的Docker是不建议使用的。centos不支持AUFS.
Device mapper: 类似于AUFS
Linux2.6内核引入的最重要的技术之一,用于在内核中支持逻辑卷管理的通用设备映射机制;
Mapped Device
Mapping Table
Target Device
不建议在生产环境中应用。
Docker:
2013,GO Apache 2.0,dotCloud
基于C/S架构
DockerClinet
本文出自 “奋斗中的老兵” 博客,请务必保留此出处http://jiaxu201.blog.51cto.com/4569604/1867316
原文:http://jiaxu201.blog.51cto.com/4569604/1867316