浅析Docker的资源隔离和限制

来源 :科技尚品 | 被引量 : 0次 | 上传用户:yangsh1967
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:简要介绍了docker容器的核心技术namespace和cgroup,以及实现容器隔离的方法。
  关键词:Docker;namespace;cgroup;虚拟化;linux
  Docker当前的定义是一个开源的容器引擎,可以方便地对容器进行管理,封装整个软件的运行环境,为开发者和系统管理者提供用于开发、设计、构建、测试、发布、运行的应用平台。得益于其轻量级的虚拟化,以及分层镜像应用,Docker在磁盘、性能和效率上比传统虚拟化有明显的优势。
  Docker容器的核心技术就是namespace和cgourp,Docker本身就是软件,其本质就是主机上的进程,它通过linux内核提供的namespace功能实现了资源的隔离,通过cgroup实现了资源的限制。Namespace隔离有6种,分别是UTS(主机名)、IPC(内部进程通信)、PID(进程号)、Network(网咯设备、端口等)、Mount(挂载点)、User(用户)。通过namespace,可是使得不同容器里的进程置于一个独立的系统运行环境里,不能互相感知到,达到了隔离的目的。最常用的namespace的API就是clone(),通过clone()方法,可以在创建新进程的同时创建namespace,代码如下:
  #define _GUN_SOURCE
  #include
  #include
  #include
  #include
  #define STACK_SIZE(1024 * 1024)
  static char stack[STACK_SIZE];
  static char* const child_args[]={"/bin/bash",NULL};
  static int child(void *arg){
  printf("in sub process!\n");
  execv("/bin/bash",child_args);
  return 0;
  }
  int main(){
  printf("start\n");
  pid_t pid;
  pid=clone(child,stack+STACK_SIZE,SIGCHLD|CLONE_NEWUTS,NULL);
  waitpid(pid,NULL,0);
  printf("quit\n");
  return 0;
  编译运行后如下图:
  Hostname已经改成yj了,但是我们在原终端中可以看到如图:
  同时我们退出程序后,结果如图:
  Hostname并没有改变,这就是uts namespace隔离起作用了。
  我们只要在clone函数的flags参数中,加入CLONE_NEWIPC、CLONE_NEWPID、CLONE_NEWNET、CLONE_NEWUSER,就可以创建新的namespace隔离,
  当我们添加了ipc标志位后,执行程序,在子进程中,建立一个ipc消息队列:
  如图:
  在原终端中我们可以看到如图:
  没有任何消息队列,所以也实现了ipc的隔离。
  同理,当我们添加pid标记位后,运行刚才的程序后,在子进程中输入echo $$后,显示的进程号显示为1。如下图:
  Docker的网络隔离,主要提供了网络资源的隔离、包括网卡、ip协议栈、套接字等。容器是通过建立一个veth pair,一端连接在docker容器中,另一端连接在宿主机安装完docker后生成的一块叫做docker0的网卡上面,来实现容器间的通信,docker0相当于一个二层交换机。
  Docker容器的另一个核心技术就是cgroup,它是linux内核提供的一个特性,用于限制和隔离进程对系统资源的使用,包括cpu、内存、block I\O和网络带宽,它包含9子系统,有blkio:负责块设备的输入输出控制,比如硬盘、usb等,cpu:控制cpu的使用,cpuset:分配制定的cpu和内存节点,cpuacct:统计cpu资源的使用情况,device:控制设备的访问权限,memory:设定内存的使用限定,并生成报告。Freezer:可以挂起或恢复cgroup中的进程。perf_event:允许perf工具基于cgroup分组进行统一的性能测试。net_cls:限制网络带宽。Linux中cgroup的实现形式就是通过文件系统提供,是一种虚拟的文件系统,
  如下图:
  通过/sys/fs/cgroup/目录下各个子系统的配置文件,对各种资源来进行管理,对不同的系统资源,cgourp提供提供统一的接口,当容器中的任务运行时使用某些资源的时候,就会触发cgroup各子系统上的检测程序,根据资源类别的不同,使用不同的方法对资源进行控制。
  Docker正是借助于namespace和cgroup这两给linux的内核特性,实现了资源的隔离和限制,docker和容器完美的结合,将带来一次巨大的计算机技术革命。
  参考文献
  [1]高飞,李勇.Docker容器资源管控配置实战[J].程序员,2014,(9):96-101.
  [2]刘思尧,李强,李斌.基于Docker技术的容器隔离性研究[J].软件,2015,36(4):110-113.
  (作者单位:常州开放大学)
其他文献
随着中国经济的快速发展和金融领域改革开放进程的不断推进,国内资本市场尤其是A股市场上的并购交易行为日渐活跃。而2015年起,万科、宝能与华润之间关于控制权争夺持续升级的
本文通过对荣华二采区10
摘 要:宣钢信息化二期建设项目产销铁前系统建设投入运行,加强了生产各工艺的监控,本文主要论述对生产工艺过程原料质检数据的监控,利用当今主流软件FineReport进行报表设计和开发,为生产提供了大量真实有效的数据,为铁前生产管理和推进生产质检流程提供了强有力的数据支持。  关键词:产销系统;生产工艺;原料质检  随着宣钢信息化二期建设项目产销铁前系统投入运行,为宣钢铁前生产提供了大量真实有效的生产
自改革开放国门打开以来,不但有许多的国外企业走进中国,同时也有越来越多的中国企业走出国门。在经济全球化的趋势下、在国家“走出去”战略的号召下,中国的工程公司也在努力开
充分发挥基层党组织的战斗堡垒作用赛希娅娜党的十四届四中全会作出的《中共中央关于加强党的建设几个重大问题的决定》指出,基层党组织建设是党的全部工作和战斗力的基础,担负
全面预算管理不仅对于建立现代企业制度,提高管理控制水平,增强企业竞争力有着重要意义,而且也是改善财务管理水平和提高会计核算质量的重要措施,是实现科学管理的有效工具。
2006年2月财政部发布的新会计准则体系,是对我国会计准则体系的一次较大调整,此次准则调整重点引入公允价值计量,促进了我国会计准则体系同国际会计准则接轨,同时也适应了我
随着中国经济的迅猛发展,人们对于财富的追求越来越强烈,对于投资理财的投资回报率越来越看重,传统的投资方式已经不能满足当前投资者的需求。在这种背景下,量化投资方式应运而生
摘 要:随着我国社会经济的不断发展前景,智能家居电器的发展速度也已经非常迅猛,系统的复杂程度也在逐渐提升,人们对于智能家居的依赖性也比较明显。现在的智能家居系统已经成为日常生活中必备的物品,相对于传统家用电器控制方式来讲,智能家居能够很好的满足人们对于家用电器的控制需求。本文以下针对智能家具电器控制系统进行详细的分析。  关键词:智能家居;电器控制系统;分析;探讨  家庭能源管理系统作为智能家居的
天然气液化后即是液化天然气(LNG),不仅可以大大节约储运空间和成本,而且具有热值大、环境友好等特点,并因此使天然气在近些年成为一种比较成功的全球范围内交易的和运输的能源。