手写docker:你先玩转namespace再来吧

哈喽,我是子牙老师。今天咱们聊聊Linux namespace

瓦特?你没听过namespace?那有必要科普一下了:namespace是Linux内核提供的一种软件性质的资源隔离机制。容器化技术,比如docker,就是基于这样的机制实现的。namespace,是docker依赖的最核心的技术。如果没有namespace,就没有容器化技术,也就没有云原生
在这里插入图片描述

甚至可以说,如果没有namespace,云计算都将不复存在
在这里插入图片描述

你现在应该知道namespace对今天这个科技世界的重要性了,那你想不想深入了解一下它:

  1. namespace资源隔离,听起来很抽象,有木有?如何具象理解namespace是如何实现资源隔离的?实现了哪些资源的隔离?
  2. 所有的进程有默认的namespace吗?还是不配置就没有?
  3. 如何给进程配置namespace
  4. 如何从用户态查看进程的namespace
  5. 如何从内核态查看进程的namespace
  6. docker exec与namespace的关系

正文开始,enjoy

如果现实中有namespace

比如你爸买了个大house,内部是这样的
在这里插入图片描述

过了N年,你生了好几个娃,娃都长大了,一个厕所、厨房不够用了,开始改造大house
在这里插入图片描述

Linux namespace差不多就是这种感觉,如果你没有给进程创建新的namespace的时候,所有的进程都在默认的namespace中
在这里插入图片描述

如果你给进程100设置了PID namespace,这时候就变成这样了
在这里插入图片描述

默认PID namespace中的进程100(100是进程的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实现了所有namespace:UTC、IPC、PID、USER、NET、FS,进程B只进入其中的一直可不可以?会带来什么问题?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/734212.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

北方银行 - HDFS 现代化快速案例研究

故事很重要,客户故事是最好的。他们提供令人瞠目结舌的统计数据或克服巨大障碍的那些是获得最佳头条新闻的那些。它们也是最难发表的。我们知道,因为我们将与您分享一些我们正在孜孜不倦地努力出版的内容 - 但现在它们将保持匿名。话虽如此,如…

软件工程学系统设计

一、概述 软件设计阶段用比较抽象概括的方式确定目标系统如何完成预定的任务,即确定系统的物理模型。 回答系统 “做什么”。 软件设计是将需求转化为最终产品的唯一途径,是后续开发和维护工作的基础。 1、软件设计过程 从工程管理角度,…

【Research】Model Stealing

What is Model Stealing? Extract an approximation that of the target model that “closely matches” the original Accuracy? Fidelity? Funtional equivalence? Threat Models API Access Model extraction using: Prediction Vectors Labels Only Model Access …

基于SpringBoot+Vue大学生网络教学平台设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

Bootloader -- U-Boot 介绍

Bootloader -- U-Boot 介绍 1 介绍1.1 概述1.2 知名 BootloaderLILO (Linux Loader)GRUB (GNU GRand Unified Bootloader)LoadlinROLO (Rockbox Loader)EtherbootLinuxBIOS (现在叫 coreboot)BLOBU-BootRedBoot 1.3 BootLoader 和 Monitor 区别1.4 U-Boot 的源码结构1.5 U-Boot…

SSRF(2)

Gopher协议的利用 gopher协议是ssrf利用中最强大的协议 gopher协议支持发出GET、POST请求: 可以先截获get请求包和post请求包,再构成符合gopher协议的请求。 默认端口为70,一般需发送到80端口 如果发起post请求,回车换行需要使用%0D%0A&…

Docker:centos79-docker-compose安装记录

1.安装环境:centos7.9 x86 2.安装最新版: [rootlocalhost ~]# curl -fsSL get.docker.com -o get-docker.sh [rootlocalhost ~]# sh get-docker.sh # Executing docker install script, commit: e5543d473431b782227f8908005543bb4389b8desh -c yum in…

PHPMailer发送的中文内容乱码如何解决

一: PHPMailer sdk 文件中有个设置默认编码的位置: vendor/phpmailer/phpmailer/src/PHPMailer.php 二: 实际业务代码中: require /sdk/PHPMailer/vendor/autoload.php;$mail new PHPMailer(true);try {//Server settings$mai…

基于Spring Boot+VUE职称评审管理系统

1管理员功能模块 管理员登录,通过填写注册时输入的用户名、密码、角色进行登录,如图1所示。 图1管理员登录界面图 管理员登录进入职称评审管理系统可以查看首页、个人中心、用户管理、评审员管理、省份管理、评审条件管理、职称申请管理、结果公布管理、…

containerd手动配置容器网络

containerd手动配置容器网络 机器详情nerdctl启动一个不带网络的容器获取容器ID、PID与network namespace路径准备bridge插件的执行配置文件通过下面的命令调用bridge插件准备tuning插件文件执行下面的命令调用tuning插件准备portmap插件文件执行下面的命令调用portmap插件删除…

Android记录9--实现转盘效果

自定义View /2013.10.16_TurnPlate_Demo/src/com/wwj/turnplate/TurnPlateView.java package com.wwj.turnplate; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; im…

日本新入管法通过:2027年起实施[育成就劳]制度,新制度更适合外国劳工在日本工作和生活!

最近,日本新入管法:新的育成就业制度预计将在2027年开始实施,而1993年开始的旧的技能实习制度将被废除。 新制度的主要内容 新制度的目的是解决日本国内的劳动力不足问题,确保有足够的劳动者。表示:“为了让日本成为…

上手微服务框架go-zero

文章目录 微服务框架与web框架的区别点在哪儿?为什么还要有微服务框架微服务框架与web框架的对比小结 为什么选go-zero?框架对比 下载并认识go-zero认识go-zero环境要求组成下载 实践go-zero基础功能案例apirpc服务功能说明准备构建rpc服务构建api服务服…

头歌资源库(14)残缺棋盘

一、 问题描述 二、算法思想 首先,将2^k 2^k的棋盘划分为四个相等大小的子棋盘,定义为左上、左下、右上和右下四个子棋盘。 然后,根据残缺格的坐标,确定其中一个子棋盘是不完整的,即残缺子棋盘。假设残缺子棋盘是左…

导入别人的net文件报红问题

1. 使用cmd命令 dotnet --info 查看自己使用的SDK版本 2.直接找到项目中的 global.json 文件,右键打开,直接修改版本为本机的SDK版本,就可以用了

区块链媒体发布推广秘籍大揭秘-华媒舍

区块链技术迅猛发展,成为全球瞩目的热门领域。随之而来的是区块链媒体的兴起,成为传播和推广区块链知识、项目和应用的重要平台。本文将揭示区块链媒体发布推广的秘籍,为读者深入了解该领域提供详尽科普介绍。 一、什么是区块链媒体&#xff…

Python爬虫学习 | Scrapy框架详解

一.Scrapy框架简介 何为框架,就相当于一个封装了很多功能的结构体,它帮我们把主要的结构给搭建好了,我们只需往骨架里添加内容就行。scrapy框架是一个为了爬取网站数据,提取数据的框架,我们熟知爬虫总共有四大部分&am…

C语言| 数组的折半查找

数组的折半查找 折半查找:在已经排好序的一组数据中快速查找数据。 先排序,再使用折半查找。 【折半查找的运行过程】 1 存储数组下标 low最小的下标,mid中间的下标, high最大的下标 2 key存放查找的值,每一次对比后…

【AI工作流-AI-Agent】FastGPT新建应用并用openai接口调用

FastGPT 简介 FastGPT是一个AI工作流搭建平台,它是一个开源框架,支持聊天,RAG(知识库),工作流编排。 缺点是不支持AI搜索,模型支持需要依赖于第三方部署框架例如oneapi,ollama等。…

关于飞浆文字识别技术的运用

飞桨PaddlePaddle-源于产业实践的开源深度学习平台,有关文章可以在此进行查询 飞桨(PaddlePaddle)是一个由百度开源的深度学习平台,它提供了丰富的机器学习算法库,支持多种深度学习模型的构建、训练和部署。飞桨平台具…