Docker背后的内核技术(一)——Namespace 资源隔离

2024-05-04 08:38

本文主要是介绍Docker背后的内核技术(一)——Namespace 资源隔离,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

注:本文分析基于3.10.0-693.el7内核版本,即CentOS 7.4

背景

容器技术的产生主要依赖于Linux内核的两大技术,Namespace和Cgroup,也就是资源隔离和资源限制。这两种技术都可以单独使用,但是把它们放到一起后,实现的功能更为强大。我们今天就来了解了解Namespace技术。

Namespace种类

目前,内核中实现了6中Namespace:

Namespace作用
UTS隔离主机名和域名
IPC隔离信号量、消息队列
PID隔离进程编号
Network隔离网络设备、协议栈、端口
Mount隔离文件系统
User隔离用户和用户组

体验Namespace

对于Namespace的操作,主要通过clone()、setns()和unshare()这三个系统调用来实现,也就是Namespace的创建、加入和删除操作。

A、创建
由上我们知道有六种Namespace,因此对应到clone上,也有六个标志位与此对应。

Namespaceclone标志
UTSCLONE_NEWUTS
IPCCLONE_NEWIPC
PIDCLONE_NEWPID
NetworkCLONE_NEWNET
MountCLONE_NEWNS
UserCLONE_NEWUSER

在使用clone前我们先了解一下clone函数的入参,

int clone(int (*child_func)(void *), void *child_stack, int flags, void *arg);

其中,
child_func:表示子进程运行的主函数
child_stack:子进程使用的栈空间
flags:表示使用哪些 CLONE标志位
args:可用于传入用户参数

接下来我们以UTS隔离为例,看下效果。创建namespace.c,输入以下代码。

#define _GNU_SOURCE
#include <sys/wait.h>
#include <sys/utsname.h>
#include <sched.h>
#include <stdio.h>#define STACK_SIZE (1024 * 1024)
#define FLAGS SIGCHLD|CLONE_NEWUTS
static char stack[STACK_SIZE];
static char * const child_args[] = {"/bin/bash", NULL };static int child(void *arg)
{execv("/bin/bash", child_args);return 0;
}int main(int argc, char *argv[])
{pid_t pid;pid = clone(child, stack+STACK_SIZE, FLAGS, NULL);waitpid(pid, NULL, 0);return 0;
}

该代码运行后会新创建一个bash交互窗口,类似于在终端输入bash命令。
使用以下命令编译,

gcc namespace.c -o namespace

然后我们运行namespace,并进行修改hostname的操作,

[root@CentOS-7-4 /home/namespace]# ls
.  ..  namespace  namespace.c
[root@CentOS-7-4 /home/namespace]# hostname
CentOS-7-4
[root@CentOS-7-4 /home/namespace]# ./namespace 
[root@CentOS-7-4 /home/namespace]# hostname
CentOS-7-4
[root@CentOS-7-4 /home/namespace]# hostname newname
[root@CentOS-7-4 /home/namespace]# hostname
newname
[root@CentOS-7-4 /home/namespace]# exit
exit
[root@CentOS-7-4 /home/namespace]# hostname
CentOS-7-4

可见,通过UTS隔离后,我们进入新的终端修改主机名成功后,返回原先终端,修改的主机名并没有影响到原先的主机,因此达到了主机名的隔离效果。

我们再看下IPC的隔离效果,在上面代码的基础上,将FLAGS变量定义如下:

#define FLAGS SIGCHLD|CLONE_NEWUTS|CLONE_NEWIPC

同样进行编译,然后执行创建消息队列操作,

[root@CentOS-7-4 /home/namespace]# ./namespace 
[root@CentOS-7-4 /home/namespace]# ipcmk -Q
Message queue id: 0
[root@CentOS-7-4 /home/namespace]# ipcs -q------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    
0x217cc434 0          root       644        0            0           [root@CentOS-7-4 /home/namespace]# exit
exit
[root@CentOS-7-4 /home/namespace]# ipcs -q------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages 

我们在新终端创建一个消息队列,但是在host上却看不到任何消息队列,因此IPC的隔离达到了效果。

其他的隔离也都可以通过相应的标志位由clone创建,就不再一一测试了。

这篇关于Docker背后的内核技术(一)——Namespace 资源隔离的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958785

相关文章

mobarxtem应用与华为设备端口绑定技术

交换机端口绑定 华为交换机的基础配置与MOBAXTERM终端连接 实验步骤: 一、给每个交换机划分vlan并添加端口 1.单个vlan的划分 2.批量划分vlan 在高端交换机CE6800上批量划分连续编号的VLAN,本例中连续的vlan20到vlan25 [~CE6800]vlan b 20 to 25 3.如果有批量VLAN连续的和不连续的编号一次性的配置 [~CE6800]vl

防火墙技术的演进,什么是下一代防火墙(NGFW)?

防火墙技术的演进 防火墙技术的演进经历了不同阶段,从包过滤防火墙到状态检测防火墙,再到集成多种安全功能的UTM(统一威胁管理)设备,最终发展到具备应用识别能力的NGFW(下一代防火墙)。 包过滤防火墙: 早期的防火墙主要是包过滤防火墙,它基于网络包的源地址、目标地址、端口等信息来判断是否允许通过。这种防火墙主要用于实现基本的网络隔离和访问控制。 状态检测防火墙(传统防火墙): 随着

一名Java程序员一定要不断关注学习最前沿的技术

阿里巴巴Dubbo+Zookeeper注册中心、阿里巴巴MyCat分库分表; JVM调优,垃圾收集器与内存分配策略,串行、并行收集器带来的作用 Redis缓存技术(session统一管理案例实现)、引入接口联调过程; Tomcat运行机制及框架,并发优化,内存优化; SpringAOP基石动态代理,拦截与织入原理,Spring相关源码熟悉程度; 并发编程在项目中的实际应用; 高性能NI

IT行业的革新力量:技术进步与未来展望

在当今时代,信息技术(IT)行业无疑是全球经济的重要推动力之一。随着数字化转型的不断深入,IT行业的边界正在扩大,它不仅包括传统的软硬件开发、网络建设和运维服务,还涵盖了云计算、大数据、人工智能(AI)、物联网(IoT)、区块链等前沿科技领域。 现状 云计算:云服务已成为企业IT基础设施的主流选择。公有云、私有云和混合云解决方案为企业提供了灵活、可扩展的资源,降低了成本,提高了运营效率。

发现一个很棒的网站,技术 + 音乐 + 其他一切

http://www.crifan.com/about/me/ 音乐:http://www.crifan.com/category/recommend_music/

Windows内核函数 - ANSI_STRING字符串与UNICODE_STRING字符串

DDK不鼓励程序员使用C语言的字符串,主要是因为:标准C的字符串处理函数容易导致缓冲区溢出等错误。如果程序员不对字符串的长度进行检查,很容易导致这个错误,从而导致整个操作系统的崩溃。DDK鼓励程序员使用DDK自定义的字符串,这种数据格式的定义如下: typedef struct _STRING32 {USHORT   Length;USHORT   MaximumLength;U

技术架构

一、单机架构 简介:应用服务和数据库服务共用一台服务器 出现原因:出现在互联网早期,访问量比较小,单机足以满足 架构工作原理:以电商为例,可以看到通过应用(划分了多个模块)和数据库在单个服务器上协作完成业务运行 技术案例: 优缺点: 优点:部署简单,成本低 缺点:存在严重的性能瓶颈,数据库和应用相互竞争资源 二、应用数据分离架构 简介:应用服务和数据库服务使用不同的服务器

谷歌在演讲中介绍了其最新的AI技术

谷歌发布Gemini系列:AI技术的最新进展与应用 在最近的发布会上,谷歌展示了其最新的AI技术和工具,重点介绍了Gemini系列的进展和应用。以下是此次发布会的要点总结。 Gemini 1.5 Pro:全面提升工作效率 Gemini 1.5 Pro现已在Workspace Labs中上线,应用于谷歌的所有20亿用户产品中。通过这一工具,谷歌旨在提升用户在Gmail和Google Meet等

3D数字化技术如何改变汽车行业?

近年来,新能源汽车行业加速发展,新车型密集发布,汽车保有量和车龄的增加,也同时点燃了汽车后市场的增长引擎。对于车企而言,如何全方面优化汽车从研发、生产、售后到营销的各个环节,以便适应快速变化的市场需求? 在本文中,我们将向您介绍使用3D数字化技术推动整个汽车行业中的主要应用。 01、车辆数字化研发——提升制造效率 从一辆汽车诞生的初始阶段开始,3D数字化技术就有了它的“用武之地”。

从源码解析Linux内核中的kfifo:C++实现单读单写无锁队列

kfifo 简介 kfifo是Linux内核的一个FIFO数据结构,采用环形循环队列的数据结构来实现,提供一个无边界的字节流服务,并且使用并行无锁编程技术,即单生产者单消费者场景下两个线程可以并发操作,不需要任何加锁行为就可以保证kfifo线程安全。 其数据结构如下: struct kfifo{unsigned char *buffer;unsigned int size;unsigned