一般来说,容器技术主要包括Cgroup和Namespace这两个内核特性。
Cgroup

Cgroup是control group,又称为控制组,它主要是做资源控制。原理是将一组进程放在放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的。

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

对于Linux容器的最小组成,除了上面两个抽象的技术概念还不够,完整的容器可以用以下公示描述:
容器=Cgroup+Namespace+rootfs+容器引擎(用户态工具)。
其中各项功能分别为:
Cgroup:资源控制;
Namespace:访问隔离;
rootfs:文件系统隔离;
容器引擎:生命周期控制;
简单代码示例
接下来用一个简单的代码抽象来展示下容器创建原理。
代码段一:

pid = clone(fun,stack,flags,clone_arg);
(flags:CLONE_NEWPID | CLONE_NEWNS |
CLONE_NEWUSER | CLONE_NEWNUT |
CLONE_NEWIPC | CLONE_NEWUTS |
...)
1
2
3
4
5
代码段二:

echo $pid> /sys/fs/cgroup/cpu/tasks
echo $pid> /sys/fs/cgroup/cpuset/tasks
echo $pid> /sys/fs/cgroup/blkio/tasks
echo $pid> /sys/fs/cgroup/memory/tasks
echo $pid> /sys/fs/cgroup/devices/tasks
echo $pid> /sys/fs/cgroup/freezer/tasks
1
2
3
4
5
6
代码段三:

func()
{
...
pivot_root("path_of_rootfs/",path);
...
exec("/bin/bash");
...
}
1
2
3
4
5
6
7
8
对于代码段一,通过clone系统调用,传入各个Namespace对应的clone flag,创建了一个新的子进程,该进程拥有自己的Namespace。根据以上代码可知,该进程拥有自己的pid,mount,user,net,ipc和uts namespace。
对于代码段二,将代码段一中产生的进程pid写入各个Cgroup子系统中,这样该进程就受到相应Cgroup子系统的控制。
对于代码段三,该func函数由上面生成的新进程执行,在func()函数中,通过pivlot_root系统调用,使进程进入一个新的rootfs,之后通过exec系统调用,在新的Namespace,Cgroup,rootfs中执行“bin/bash”程序。
通过以上操作,成功在一个“微型容器”中运行了一个bash程序。
————————————————
版权声明:本文为CSDN博主「nudt_qxx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiangxianghehe/java/article/details/70569920

容器Cgroup和Namespace特性简介的更多相关文章

  1. docker容器技术基础之linux cgroup、namespace

    一.开头 接触过docker的同学多多少少听过这样一句话"docker容器通过linux namespace.cgroup特性实现资源的隔离与限制".今天我们来尝试学习一下这两个东 ...

  2. centos7下安装docker(10容器底层--cgroup和namespace)

    cgroup和namespace是实现容器底层的重要技术 cgroup:实现资源限制 namespace:实现资源隔离 1.cgroup:control group Linux操作系统通过cgroup ...

  3. 精《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #7 Cgroup、Namespace、Linux容器

    HACK #7 Cgroup.Namespace.Linux容器 本节将介绍Cgroup与Namespace以及通过这两个功能实现的容器功能.CgroupCgroup(control group)是将 ...

  4. [转帖]sql server版本特性简介、版本介绍简介

    sql server版本特性简介.版本介绍简介 https://www.cnblogs.com/gered/p/10986240.html 目录 1.1.sql server的版本信息 1.2.版本重 ...

  5. ES6新特性简介

    ES6新特性简介 环境安装 npm install -g babel npm install -g babel-node //提供基于node的REPL环境 //创建 .babelrc 文件 {&qu ...

  6. SpartanBrowser产品和安全特性简介

    v:* { } o:* { } w:* { } .shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-botto ...

  7. AsyncLocal 与 ThreadLocal ThreadStatic特性简介

    AsyncLocal 与 ThreadLocal [.NET深呼吸]基于异步上下文的本地变量(AsyncLocal) https://www.cnblogs.com/tcjiaan/p/5007737 ...

  8. sql server版本特性简介、版本介绍简介

    1.SQL Server 版本简介 1.1.sql server的版本信息 年    代 版    本 大版本号 1993年 SQL Server for Windows NT 4.21 1994年 ...

  9. Docker 容器资源隔离 namespace(十)

    目录 一.简介 Linux Namespace的6大类型 二.Mount Namespace 三.IPC Namespace 四.Network Namespace 五.UTS Namespace 六 ...

  10. PHP7 新特性 简介

    整理了一些常用的新特性,欢迎点赞!!! 新增操作符 1.?? $username = $_GET['user'] ?? ''; $username = isset($_GET['user']) ? $ ...

随机推荐

  1. 用 perfcollect 洞察 Linux 上.NET程序 CPU爆高

    一:背景 1. 讲故事 如果要分析 Linux上的 .NET程序 CPU 爆高,按以往的个性我肯定是抓个 dump 下来做事后分析,这种分析模式虽然不重但也不轻,还需要一定的底层知识,那有没有傻瓜式的 ...

  2. 2023ccpc大学生程序设计竞赛-zx

    这次ccpc整体来说做题做的比较卡,第一个签到都wa了,后面几道中档题全都是至少wa一次才能过,这导致我们不仅罚时增加也导致需要大量时间修改代码,还有一个G题很可惜,当时只注意到B过题多所以有点被带歪 ...

  3. C语言基础--逻辑判断和循环

    目录 一.储存标识符 1.auto 2.register 3.static 4.const 二.运算符 1.逻辑运算符 2.位运算符 3.运算符 4.三元运算符 三.选择结构 1.if判断 1.1 i ...

  4. DDD架构为什么应该首选六边形架构?

    一.传统分层架构 分层架构的一个重要原则是:每层只能与位于其下方的层发生耦合. 分层架构分两种:一种是严格分层架构,规定某层只能与直接位于其下方的层发生耦合:另一种是松散分层架构,允许任意上方层与任意 ...

  5. 《敏捷无敌之DevOps时代》读后感

    背景: 2020年基于我司业务形态,我开始实行敏捷项目管理.以敏捷为道,Scrum为法,迭代为术,禅道作器,大张旗鼓的搞了2年敏捷开发.随着时间推移,问题出现在2022年,当时我们已经完全按照Scru ...

  6. 部署 rsyslog 日志服务

    ubuntu 服务端 + Centos 客户端 参考文档: ubuntu 20.04 搭建 rsyslog 服务器 CentOS7下搭建Rsyslog Server记录远程主机系统日志

  7. 渗透-02:HTTPS主干-分支和HTTPS传输过程

    一.HTTPS主干-分支 第一层 第一层,是主干的主干,加密通信就是双方都持有一个对称加密的秘钥,然后就可以安全通信了. 问题就是,无论这个最初的秘钥是由客户端传给服务端,还是服务端传给客户端,都是明 ...

  8. 八万乌云漏洞库——Ubuntu本地Docker搭建环境

    环境准备 ubuntu16.04虚拟机 换国内源 vi /etc/apt/sources.list 阿里源 deb http://mirrors.aliyun.com/ubuntu/ xenial m ...

  9. 语音合成技术3:HierVST: Hierarchical Adaptive Zero-shot Voice Style Transfer

    HierVST: 分层自适应零样本语音风格转换 摘要: 尽管语音风格转换(VST)领域取得了快速进展,但最近的零样本VST系统仍然缺乏将新的说话者的语音风格进行转换的能力.在本文中,我们提出了Hier ...

  10. 【go笔记】标准库-strconv

    前言 标准库strconv提供了字符串类型与其他常用数据类型之间的转换. strconv.FormatX()用于X类型转字符串,如strconv.FormatFloat()用于浮点型转字符串. str ...