Docker涉及的Linux命名空间、CGroups

概述

Linux的NameSpace介绍

  • 很多编程语言都包含了命名空间的概念,我们可以认为命名空间是一种封装,封装本身实现了代码的隔离。
  • 在操作系统中命名空间提供的是系统资源的隔离,其中系统资源包括了:进程、网络、文件系统…
  • 实际上linux系统实现命名空间主要目的之一就是为了实现轻量级虚拟化服务,也就是我们说的容器,在同一个命名空间下的进程可以感知彼此的变化,而对其他命名空间的进程一无所知,这样就可以让容器中的进程产生一个错觉,仿佛它自己置身于一个独立的系统环境中,以此达到独立和隔离的目的。

Linux系统中的NameSpace分类

命名空间描述作用备注
进程命名空间隔离进程IDLinux通过命名空间管理进程号,同一个进程,在不同的命名空间进程号不同进程命名空间是一个父子结构,子空间对父空间可见
网络命名空间隔离网络设备、协议族、端口等通过网络命名空间,实现网络隔离docker采用虚拟网络设备,将不同命名空间的网络设备连接到一起
IPC命名空间隔离进程间通信进程间交互方法PID命名空间和IPC命名空间可以组合起来用,同一个IPC命名空间内的进程可以彼此看见,允许进行交互,不同空间进程无法交互
挂载命名空间隔离挂载点隔离文件目录进程运行时可以将挂载点与系统分离,使用这个功能时,我们可以达到chroot的功能,而在安全性方面比chroot更高
UTS命名空间隔离Hostname和NIS域名让容器拥有独立的主机名和域名,从而让容器看起来像个独立主机目的是独立出主机名和网络信息服务(NIS)
用户命名空间隔离用户和group ID每个容器内上的用户跟宿主机上不在一个命名空间同进程ID一样,用户ID和组ID在命名空间内外是不一样的,并且在不同命名空间内可以存在相同ID

NameSpace应用案例

以net nameSpace为例

  • 在Linux中,网络命名空间可以被认为是隔离的拥有单独网络栈(网卡、路由转发表、iptables)的环境。网络命名空间经常用来隔离网络设备和服务,只是拥有同样网络命名空间的设备,才能看到彼此。
  • 从逻辑上说,网络命名空间是网络栈的副本,拥有自己网络套接字、网络procfs条目、网络sysfs条目和其他网络资源。
  • 从系统的角度看,当通过clone()系统调用创建新进程时,传递标志CLONE_NEWNET将在新进程中创建一个全新的网络命名空间。
  • 从用户的角度来看,我们只需要使用工具ip(package is iproute2)来创建一个新的持久网络命名空间。
    在这里插入图片描述

CGroups

CGroups介绍

  • Control groups(cgroups)控制组
  • linux内核提供的可以限制、记录、隔离进程组所使用的物理资源的机制。为容器而生,没有cgroups就没有今天的容器技术。
    在这里插入图片描述

CGroups功能

  • 资源限制(Resource limitation):cgroups可以对进程组使用的资源总额进行限制。如设定应用运行时使用内存的上限,一旦超过这个配置就发出OOM(Out of Memory)。
  • 优先级分片(Prikoritization):通过分配的CPU时间片数量即硬盘IO带宽大小,实际上就相当于控制了进程运行的优先级。
  • 资源统计(Accounting):cgroups可以统计系统的资源使用量,如CPU使用时长,内存用量等等,这个功能非常适用于计费。
  • 进程控制(Control):cgroups可以对进程组执行挂起、恢复等操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

融极

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值