科普类网站怎么做,如何成为一个电商,无锡自助网站,番禺做网站哈喽#xff0c;我是子牙老师。今天咱们聊聊Linux namespace
瓦特#xff1f;你没听过namespace#xff1f;那有必要科普一下了#xff1a;namespace是Linux内核提供的一种软件性质的资源隔离机制。容器化技术#xff0c;比如docker#xff0c;就是基于这样的机制实现的…哈喽我是子牙老师。今天咱们聊聊Linux namespace
瓦特你没听过namespace那有必要科普一下了namespace是Linux内核提供的一种软件性质的资源隔离机制。容器化技术比如docker就是基于这样的机制实现的。namespace是docker依赖的最核心的技术。如果没有namespace就没有容器化技术也就没有云原生
甚至可以说如果没有namespace云计算都将不复存在
你现在应该知道namespace对今天这个科技世界的重要性了那你想不想深入了解一下它
namespace资源隔离听起来很抽象有木有如何具象理解namespace是如何实现资源隔离的实现了哪些资源的隔离所有的进程有默认的namespace吗还是不配置就没有如何给进程配置namespace如何从用户态查看进程的namespace如何从内核态查看进程的namespacedocker exec与namespace的关系
正文开始enjoy
如果现实中有namespace
比如你爸买了个大house内部是这样的
过了N年你生了好几个娃娃都长大了一个厕所、厨房不够用了开始改造大house
Linux namespace差不多就是这种感觉如果你没有给进程创建新的namespace的时候所有的进程都在默认的namespace中
如果你给进程100设置了PID namespace这时候就变成这样了
默认PID namespace中的进程100100是进程的PID哦在新的PID namespace中就变成了PID为1的进程
你以为namespace的功能就只是这样了吗那你就
它还支持套娃啥意思呢如图
什么意思呢就是容器是可以嵌套的就问你牛不牛
你是不是想问那能嵌套多少层呢答案是无限层
嗯写这玩意的哥们一定是个渣男吧不够专一如果我来写我肯定不支持嵌套这样我肯定是万千女程序员的理想型
进程默认namespace
现在我们已经知道进程有默认的namespace如何查看呢我们先从用户态查看
后面的数字是啥inode number。底层是通过vfs inode将文件与namespace相关联的
再从内核态查看每个进程的namespace。了解Linux的都知道Linux中的所有进程都是1号进程的子孙进程言外之意就是所有进程都会继承1号进程的namespace来看看是不是这么回事
先看1号进程的namespace信息
再看2号进程的namespace你会发现是一样的
这时候再看我写的docker进程因为它底层实现了namespace隔离所以是不一样的 进程默认的namespace是怎么来的init_task是0号进程俗称Linux的始祖进程
对了你是不是想问如何从Linux内核态查看namespace这个你得写内核驱动。这是我准备做的另外一件事我在研究Linux内核的过程中写了很多针对查看Linux内核、控制Linux内核的功能等写到一定程度我会分享给大家使用。
进程定制不一样的namespace
那如何为进程设置namespace呢两种方式 1、可以通过使用函数clone创建进程实现 2、如果是通过fork创建的子进程通过使用函数unshare为进程配置新的namespace
这两种方式在docker实现中都会用到
docker exec底层本质
看到这里你应该知道答案了吧你进入对应进程的namespace就相当于进入了进程
给你个没有答案的问题如果进程A实现了所有namespaceUTC、IPC、PID、USER、NET、FS进程B只进入其中的一直可不可以会带来什么问题