话容器虚拟技术
传统虚拟化技术与容器技术对比
1、传统的虚拟化技术
传统的虚拟化技术会在已有主机的基础上创建多个虚拟主机,然后在每个虚拟主机上安装独立的操作系统,并由虚拟主机的内核空间和用户空间来运行应用程序
2、docker容器技术
使用主机的硬件,在硬件之上安装一个操作系统,使用相同的内核。然后将用户空间进行隔离,从而分成多个用户空间,基于一个内核来运行。因为容器使用这种隔离用户空间的方式,使得一样可以提供多个应用程序的环境(而应用程序的环境我们称之为容器),所以可以理解为是用户空间的虚拟化技术
容器拥有更高的资源使用效率,因为其无需为每个应用分配一个独立的操作系统,可以使得应用,资源消耗较小,迁移与创建的速度更小。
区别:kvm,xen隔离的非常好,因为他们有自己的内核空间和用户空间,但是容器技术的话,整个容器只有一个内核,不同的是,各虚拟机之间隔离开的仅仅是用户空间。
容器所用到的核心技术
NameSpace:名称空间(资源隔离机制)
在内核级别:完成环境隔离的方法(类似于chroot机制)
-
PID NameSapce Linux 2.6.24
PID隔离,隔离PID号,能够在每一个隔离出来的容器当中来实现虚拟出各种你所需要的PID,使得每一个用户看到的PID号都是独立的,互不干扰 -
Network NameSpace: Linux 2.6.29
网络设备、网络栈、端口等网络资源隔离,用于网络虚拟容器隔离 -
User NameSpace Linux 3.8
用户和用户组资源隔离,完成用户隔离,每一个用户的名称空间当中都有可能可以存在所谓同样用户名的用户 linux 3.8(所以docker是依赖于linux 3.8以后的版本,或者要求更高,是3.10以后的版本) -
IPC NameSpace Linux 2.6.19
进程间通信资源隔离(信号量、消息队列和共享内存的隔离) -
UTS NameSpace Linux 2.6.1
主机名和域名隔离 -
Mount NameSpace linux 2.4.19
挂载点隔离(真正是实现文件系统给的隔离) 实现已挂载文件系统隔离的,期望在不同的用户空间当中所通过内核看到的挂载的文件系统应该是不一样的。
向NameSpace发起调用所使用的API
我们为了向namespace发起调用,让namespace完成某些操作
-
clone() 克隆 ,实现线程的系统调用,用来创建新线程
-
setns() 设定名称空间属性,将某进程加载到某个NameSpace去
-
unshare() 做成非共享机制,使进程脱离某个NameSpace的关联到你的新NameSpace当中的
CGroup (Linux Control Group) 控制组
一个用户空间可以将整个服务器的CPU耗尽,那么其他用户空间将无法运行,所以仅有名称空间是无法满足,所以有另一个技术,叫CGroup(linux 2.6.24)
CGroup 内核级别的技术,用于限制、控制与分离一个进程组群的资源(用户自己隔离和建立的),用于实现将进程分完组以后,组内的进程能使用多少的系统级的资源,可以在内核级上加以限制
一般用于隔离一个进程集合,为进程分配足够内存带宽然后限制其访问那些设备,从而完成限制机制
CGroup + NameSpace 结合起来就能实现容器功能
CGroup实现的功能
-
Resource limitation:资源限制
-
Prioritization:优先级控制
-
Accounting:审计和统计功能,主要是为了计费(VPS计费)
-
Control:挂起进程,恢复进程
CGroup的子系统(subsystem)
可使用 lssbusys - m 查看资源组当中的子系统
cgroup 是基于单根树状结果进行组织的 ,在 /sys/fs/cgroup
-
blkio:设定块设备的IO限制
-
cpu:使用调度程序对cpu的CGroup的任务访问,设定CPU的限制(限制CPU使用的空间)
-
cpuacct:报告cgroup当中所使用的CPU资源
-
cpuset:为cgroup中的任务制定可用的cpu和内存资源(分配内存和CPU)
-
memory:设定内存的使用限制(限制内存使用的空间),分配是按段来分配,而不是按空间分配
-
device:控制cgroup中的任务对设备的访问能力
-
freezer:实现挂起进程或恢复cgroup中的任务
-
net_cls:(classid),使用等级级别标识符来标记网络数据包,以实现基于TC完成对不同的cgroup中产生的流量控制
-
perf_event:对每一个用户空间当中的任务的运行时的性能本身分别所产生的事件进行归类统计(使用后使cgroup中的任务可以进行统一的性能测试)
-
hugetlb:对HugeTLB系统进行限制,能够实现在内存分配时的减少内存分配的次数。
CGroup中的术语
-
task(任务):指的是进程或线程
-
cgroup:一个独立的资源控制单位,可以包含一个或多个子系统。每个控制组上可以关联一个或多个子系统,一个任务只能属于一个cgroup
-
subsystem:子系统,需要关联到cgroup
-
hierarchy:资源组的层级结构,层级是有一系列cgroup以一个树状结构排列而成,每一个层级通过绑定对应的子系统进行资源控制,层级中的cgroup节点可以包含零个或多个节点,业也就是你地下还可以继续分层,而子集可以继承父级的某些资源。
AUFS: UnionFS 联合文件系统
UnionFS:能够实现把不同的物理位置的目录能够合并到同一目录中
虽然是合并,但是事实上他是一种叠加。可以合并多个,只有最上层的那个才是可写的。
-
对于读
-
如果合并的文件存在重复,只有最后一个合并的可被看到
-
如果文件不重复,可以看到其他层里不重复的文件
-
-
对于写
-
合并多个目录时,只有最后一个合并的可被写
-
在其他层看到的文件想去修改,实际上是在最上层创建一个文件进行写的操作。(他的原理有点类似PE的工作方式,比如你在PE上写,其实写的是在本地磁盘上)
-
docker很依赖AUFS,所以如果没有AUFS的话,不建议docker在生产环境上使用
遗憾的是centos并不支持AUFS,在ubuntu上已经支持AUFS
Device mapper:功能类似AUTFS,LVM用的就是这个技术
Linux 2.6内核引入的最重要技术之一,用于在内核中支持逻辑卷的通用设备映射技术。
-
Mappend Device:被映射出来的设备
-
Mapping Table 映射表,指明了被虚拟出来的设备和真正底层设备有哪些。(相当于从虚拟设备到真正物理设备之间的映射路径)
-
Target Device:源设备
-

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
云服务惠及小企业
云已经无处不在。从云计算、云服务到云存储,国内各个大型企业都在布局云计算,谁掌握了云,就掌握了未来;但对于数以万计的中小企业来说,云就变得“可望可不可及”,中小企业想要使用云服务,存在着诸多难题。 一方面,中小企业虽然多(大概占据全国企业总数的99%,是庞大的长尾力量),但是类型多,产品杂,各行各业都有,市场上缺乏满足中小企业的通用性云服务产品;另一方面,小企业的人力、财力有限,涉足云服务的能力有限。这些问题成为制约中小企业使用云服务、发展云服务的瓶颈。 值得庆幸的是,一些中小企业主和云服务提供商已经看到了中小企业在云服务方面的机会。一些中小企业主已经开始尝试使用云服务,率先把信息化系统融入日常的管理工作中,提高企业运转效率,为企业带来新商机。另外,一些云服务提供商开始改变云服务的方式,降低中小企业使用云服务的投入成本与周期,把云服务这项“奢侈品” 变成了“日用品”。 几天前,在刚刚举办的“2011畅捷通小企业云应用大会”上,畅捷通提出要把云服务带给了中小企业,而且还将提供给更多的“微企业”。早在今年3月,畅捷通就推出了全新的“云+端”服务策略,通过整合云服务的方式,充分发挥畅捷...
- 下一篇
jenkins+git+maven+docker持续集成部署
环境准备: 安装centos7.1系统,最小化安装 设置好网络和防火墙 网络需要能访问外网, ip 192.168.1.7 下面关闭防火墙 setenforce 0 systemctl stop firewalld systemctl disable firewalld sed -i 's/enforcing/disabled/g' /etc/selinux/config 设置yum源 cd /etc/yum.repos.d/ wgethttp://mirrors.aliyun.com/repo/Centos-7.repo wgethttp://mirrors.aliyun.com/repo/epel-7.repo yum -y install epel-release 安装应用:docker+git+maven+jenkins 安装docker yum install docker -y 修改docker配置 vi /etc/sysconfig/docker #OPTIONS='--selinux-enabled --log-driver=journald --signature-v...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8编译安装MySQL8.0.19
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2更换Tomcat为Jetty,小型站点的福音