Docker之Namespace和Cgroup


之前学习了docker的一些原理和文件系统,对于其核心技术namespace和cgroup没有一个很好的认识,下面将记录其知识点

Namespace

概念

namespce资源隔离,又称为命名空间,它主要做访问隔离。其原理是针对一类资源进行抽象,并将其封装在一起提供给一个容器使用,对于这类资源,因为每个容器都有自己的抽象,而他们彼此之间是不可见的,所以就可以做到访问隔离。

docker就是通过这样一种技术,使自己内部进程在不同于外部namespce下进行,以达到独立的隔离的目的

容器6六项隔离

想要实现一个资源隔离的容器,也许第一反应就是chroot命令,隔离文件系统。接着为了在分布式的环境下进行通信和定位,容器必然有独立的IP,端口,路由等,进行网络隔离。同时,容器还需要一个独立的主机名以便在网络中标识自己。有了网络,自然离不开通信,进程间也要隔离。对用户和用户组的隔离实现了用户权限隔离,最后,容器中所运行应用的进程号自然也与宿主机中的PID进行隔离,这样就形成了容器的六项隔离

在这里插入图片描述

用图来表述整个隔离过程

在这里插入图片描述
图中可以看到宿主机和容器之间有相同的UTS,IPC,PID,Network,Mount,User,
通过隔离使其在不同的命名空间下,这就形成相互不干扰

Namespace API实际操作

namespace的API包括clone()、setns()以及unshare(),还有/proc下的部分文件。为了确定隔离的到底是哪种namespace,在使用这些API时,通常需要指定以下六个常数的一个或多个,通过|(位或)操作来实现。你可能已经在上面的表格中注意到,这六个参数分别是CLONE_NEWIPC、CLONE_NEWNS、CLONE_NEWNET、CLONE_NEWPID、CLONE_NEWUSER

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值