【Docker】Namespace 空间隔离实战

一、实战目的

了解隔离能力并不是 Docker 提供的,而是操作系统内核提供基本能力


二、基础知识

1、dd 命令详解

Linux dd 命令用于读取、转换并输出数据

dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

语法:

dd OPTION

参数:

  • if=文件名:输入文件名,默认为标准输入,即指定源文件。
  • of=文件名:输出文件名,默认为标准输出,即指定目的文件。
  1. ibs=bytes:一次读入 bytes 个字节,即指定一个块大小为 bytes 个字节。
  2. obs=bytes:一次输出 bytes 个字节,即指定一个块大小为 bytes 个字节。
  3. bs=bytes:同时设置读入 / 输出的块大小为 bytes 个字节。
  • cbs=bytes一次转换 bytes 个字节,即指定转换缓冲区大小。
  • skip=blocks从输入文件开头跳过 blocks 个块后再开始复制。
  • seek=blocks从输出文件开头跳过 blocks 个块后再开始复制。
  • count=blocks:仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
  • conv=<关键字>,关键字可以有以下 12 种:
  1. conversion:用指定的参数转换文件。
  2. ascii:转换 ebcdic ascii。
  3. ebcdic:转换 ascii ebcdic。
  4. ibm:转换 ascii alternate ebcdic。
  5. block:把每一行转换为长度为 cbs,不足部分用空格填充。
  6. unblock:使每一行的长度都为 cbs,不足部分用空格填充
  7. lcase:把大写字符转换为小写字符。
  8. ucase:把小写字符转换为大写字符。
  9. swap:交换输入的每对字节。
  10. noerror:出错时不停止。
  11. notrunc:不截短输出文件。
  12. sync:将每个输入块填充到 ibs 个字节,不足部分用空(NUL)字符补齐。
  • --help:显示帮助信息
  • --version:显示版本信息

生成 test.img 和 test2.img 两个镜像文件: 

将 in.txt 文件中的所有英文字母转换为大写,然后转成为 out.txt 文件:


2、mkfs 命令详解

用于在设备上创建 Linux 文件系统,俗称格式化。比如我们使用 U 盘的时候可以进行格式化。

语法:

mkfs [-V] [-t fstype] [fs-options] filesys [blocks]

参数:

  • -t fstype:指定要建立何种文件系统,如 ext3ext4。
  • filesys:指定要创建的文件系统对应的设备文件名
  • blocks:指定文件系统的磁盘块数
  • -V详细显示模式。
  • fs-options:传递给具体的文件系统的参数。

test.img 分区格式化为 ext4 格式:


3、df 命令详解

Linux dfdisk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计

语法:

df [OPTION]... [FILE]...

常见参数:

  • -a,--all:包含所有的具有 0 Blocks 的文件系统
  • -h,--human-readable:使用人类可读的格式预设值是不加这个选项的...)。
  • -H,--si:很像 -h,但是用 1000 为单位而不是用 1024。
  • -t,--type=TYPE:限制列出文件系统的 TYPE。
  • -T,--print-type:显示文件系统的形式


查看磁盘使用情况:



查看磁盘的系统类型:


4、mount 命令详解

mount 命令用于加载文件系统到指定的加载点。此命令的也常用于挂载光盘,使我们可以访问光盘中的数据,因为你将光盘插入光驱中,Linux 并不会自动挂载,必须使用 Linux mount 命令来手动完成挂载。

Linux 系统下不同目录可以挂载不同分区和磁盘设备,它的目录和磁盘分区是分离的,可以自由组合(通过挂载)。

不同的目录数据可以跨越不同的磁盘分区或者不同的磁盘设备。

挂载的实质是为磁盘添加入口(挂载点)。

mount 常见用法:

mount [-l]
mount [-t vfstype] [-o options] device dir

常见参数:

  • -l显示已加载的文件系统列表
  • -t加载文件系统类型支持常见系统类型的 ext3、ext4、iso9660、tmpfs、xfs 等,大部分情况可以不指定,mount 可以自己识别。
  • -o options 主要用来描述设备或档案的挂接方式。
  1. loop:用来把一个文件当成硬盘分区挂接上系统。
  2. ro:采用只读方式挂接设备。
  3. rw:采用读写方式挂接设备。
  • device要挂接(mount)设备
  • dir:挂载点的目录

/test.img 挂在 ~/testmymount 之下:


5、unshare 命令详解

unshare 主要能力是使用与父程序不共享的名称空间运行程序

语法:

unshare [options] program [arguments]

常用参数:

 

退出子进程,回到宿主机的命名空间:


三、实战操作一(PID 隔离)

1、在主机上执行 ps -ef,可以看到进程列表如下,其中启动进程 PID 1 init 进程

父进程是外层的 share,用 -p 指定了隔离之后,内部启动的 bash 的看不见外部的 pid 信息,因为 pid 已经发生了隔离,所以 /bin/bash 启动时没有父进程就发生了报错。

所以,需要用 --fork 来创建一个全新的进程:

用 ps -ef 来观察启动的新进程和宿主机上的进程是否一致:


2、打开另外一个 shell ,执行下面命令创建一个 bash 进程,并且新建一个 PID Namespace

--fork 新建了一个 bash 进程,是因为如果不建新进程,新的 namespace 会用 unshare 的 PID 作为新的空间的父进程,而这个 unshare 进程并不在新的 namespace 中,所以会报个错 Cannot allocate memory。

--pid 表示我们的进程隔离的是 pid,而其他命名空间没有隔离。

mount-proc 是因为 Linux 下的每个进程都有一个对应的 /proc/PID 目录,该目录包含了大量的有关当前进程的信息。 对一个 PID namespace 而言,/proc 目录只包含当前 namespace 和它所有子孙后代 namespace 里的进程的信息。创建一个新的 PID namespace 后,如果想让子进程中的 topps 等依赖 /proc 文件系统的命令工作,还需要挂载 /proc 文件系统。而文件系统隔离是 mount namespace 管理的,所以 linux 特意提供了一个选项--mount-proc 来解决这个问题。如果不带这个,那么看到的进程还是系统的进程信息。


3、执行 ps -ef 查看进程信息

可以看到此时进程空间内的内容已经变了,而且启动进程也变成了我们的 bash 进程。说明我们已经看不到主机上的进程空间了,我们的进程空间发生了隔离。


4、执行 exit 退出进程


四、实战操作二(Mount 隔离)

1、打开第一个 shell 窗口 A,执行命令:df -h,查看主机默认命名空间的磁盘挂载情况


2、打开一个新的 shell 窗口 B,执行 Mount 隔离命令

  • --mount 表示要隔离 Mount 命名空间
  • --fork 表示新建进程


3、在窗口 B 中添加新的磁盘挂载


4、在窗口 B 挂载的磁盘中添加文件


5、查看窗口 B 中的磁盘挂载信息


6、查看窗口 A 中的文件信息,可以看到窗口 B 中新建的文件和磁盘挂载在主机的窗口中并没有,说明我们实现了文件系统隔离。

 data2mount 已经发生了 mount 隔离:


9、窗口 B 执行 exit,退出

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3----扩展 element Plug card

扩展 element Plug card 增加全屏&#xff0c;折叠操作项 核心代码 <template><div class"cc-card-component"><el-card v-if"state.isShow" :class"state.class" :bodyStyle"bodyStyle" :shadow"props.shadow…

Vmwar保姆级安装与配置

文章目录 一、官方下载1.访问VMware官方网站&#xff1a;2.选择产品&#xff1a;3.下载安装包&#xff1a; 二、VMware的安装1.运行安装程序2.选择安装位置3.选择安装选项4.完成安装 三、启动VMware Workstation Pro并配置虚拟机1.创建新的虚拟机&#xff1a;2.配置虚拟机硬件 …

【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据

欢迎来到《小5讲堂》 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景读取并保存NPOI信息NPOI 插件介绍基本功能示例代码写入 Excel 文件…

前端JavaScript处理小数精度问题(最佳实践)

前言&#xff1a; 针对于小数精度问题&#xff0c;本次我们主要推荐两种方式&#xff0c;一种是简单的函数封装&#xff0c;一种是使用第三方库big.js。 方法一&#xff1a; 自封装函数搭配parseFloat和toFixed解决小数精度问题&#xff0c;仅适用于解决一般性小数精度问题&…

【云原生】Kubernetes----k8s免密使用harbor私有仓库

目录 引言 一、搭建Harbor仓库 &#xff08;一&#xff09;关闭防护 &#xff08;二&#xff09;安装docker &#xff08;三&#xff09;安装docker-compose &#xff08;四&#xff09;安装harbor-offline 1.获取安装包 2.修改配置文件 3.启动服务 4.登录仓库验证 二…

营销人看巴黎奥运会,看到了什么?

不同的人眼中的巴黎奥运会是不一样的&#xff1a;环保人士关注奥运场馆的绿色设计&#xff0c;以及赛事期间对可再生能源的利用&#xff1b;旅游博主用镜头捕捉巴黎奥运会每一个精彩瞬间&#xff1b;社会学家在巴黎奥运会看到多元文化的交流与融合…… 那么营销人在巴黎奥运会…

聚观早报 | OPPO Find X8系列电池曝光;小米15 Pro更多影像细节

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 7月30日消息 OPPO Find X8系列电池曝光 小米15 Pro更多影像细节 KeeTa平台已开放便利店入驻 比亚迪方程豹将扩大…

大模型面试之LoRA

LoRA的解释&#xff1a;一种高效微调预训练神经网络的方法 LoRA 解决的问题&#xff1a; &#x1f538; 2021年初&#xff0c;微软与OpenAI合作探索GPT-3的商业可行性。 &#x1f538; 发现仅仅通过提示&#xff08;prompting&#xff09;不足以完成生产任务&#xff0c;例如…

EfficientNet-v2-s图像分类训练(简洁版)

使用torchvision集成的efficientnet-v2-s模型&#xff0c;调用torchvision库中的Oxford IIIT Pet数据集&#xff0c;对模型进行训练。 若有修改要求&#xff0c;可以修改以下部分&#xff1a; train_dataset OxfordIIITPet(root./data, splittrainval, downloadTrue, transfo…

loguru日志模块:简化Python自动化测试的日志管理!

引言 日志是软件开发中的关键组成部分&#xff0c;为开发和测试人员提供了调试和监控应用程序的重要手段。loguru 是一个第三方的 Python 日志库&#xff0c;以其简洁的 API 和自动化的功能脱颖而出。本文将探讨为什么项目中需要日志&#xff0c;loguru 为何受到青睐&#xff…

【Python机器学习】决策树的构造——递归构建决策树

我们可以采用递归的原则处理数据集&#xff0c;递归结束的条件是&#xff1a;程序遍历完所有划分数据集的属性&#xff0c;或者每个分支下的所有实例都具有相同的分类。如果所有实例具有相同的分类&#xff0c;则得到一个叶子节点或者终止块。任何到达叶子节点的数据必然属于叶…

年化27.9%,最大回撤-13.6%的可转债因子策略,结合机器学习特征筛选(附python代码)

原创文章第603篇&#xff0c;专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 我们重新更新了可转债的全量数据&#xff0c;包含全量已经退市的转债。 ——这是与股票市场不一样的地方&#xff0c;股票退市相对少&#xff0c;而转债本身就有退出周期。 因此&…

x264 环路滤波原理系列:x264_frame_deblock_row 函数

x264_frame_deblock_row 函数 功能:该函数对视频帧中的一行宏块(Macroblock)进行去块滤波处理。去块滤波是视频编码中常用的一种技术,用于减少宏块之间的边界不连续性,从而提高视频质量。 函数关系与原理图: 函数原理流程梳理: 局部变量初始化;for 循环处理每个宏块:…

如何借助低代码 + BI 实现国央企数智化转型?

概要 在当前的软件开发时代&#xff0c;许多企业面临着核心技术缺失、专业人才短缺以及产品能力单一等问题&#xff0c;迫切需要加强技术实力&#xff0c;补充和扩展原有的业务和行业能力。将技术与业务需求深度结合&#xff0c;构建适应时代需求的技术业务模式&#xff0c;成…

容易发表的医学SCI期刊推荐,附投稿经验

常笑医学整理了适合医学生、医务工作者进行论文投稿的医学SCI期刊&#xff0c;附期刊详细参数与真实投稿经验&#xff0c;供大家参考。 1、ULTRASOUND IN MEDICINE AND BIOLOGY&#xff08;超声医学和生物学&#xff09; &#xff08;详细投稿信息请点击刊物名称查看&#xff…

MATLAB被360误杀的解决方案

前面被误杀&#xff0c;今天又被误杀。 前面误杀结果是缺少文件&#xff0c;重装MATLAB也不行。 结果重装了操作系统。 这次&#xff0c;看到了提示额外小心。 当时备份了“病毒”文件&#xff0c;结果备份的也被杀了。 解铃还须系铃人 在360安全卫士里面恢复&#xff0c;步骤…

数据库管理-第225期 Oracle DB 23.5新特性一览(20240730)

数据库管理225期 2024-07-30 数据库管理-第225期 Oracle DB 23.5新特性一览&#xff08;20240730&#xff09;1 二进制向量维度格式2 RAC上的复制HNSW向量索引3 JSON集合4 JSON_ID SQL函数5 优化的通过网络对NVMe设备的Oracle的原生访问6 DBCA支持PMEM存储7 DBCA支持标准版高可…

PPT图表制作

一、表格的底纹 插入→表格→绘制表格→表设计→选择单元格→底纹 二、把一张图片做成九宫格 1. 把一张图片画成九宫格&#xff08;处理过后还是一张图片&#xff0c;但是有框线&#xff09; 绘制33表格→插入图片→全选表格单元格→右键设置形状格式→填充→图片或纹理填充…

前后端分离开发遵循接口规范-YAPI

目前&#xff0c;网站主流开发方式是前后端分离。因此前后端必须遵循一套统一的规范&#xff0c;才能保证前后端进行正常的数据&#xff08;JSON数据格式&#xff09;请求、影响&#xff0c;这套规范即是 YAPI. 产品经理撰写原型&#xff1b; 前端或后端撰写接口文档。 YAPI…

一座山城如何打造教育“一张网”

教育新基建作为国家新基建的重要组成部分,是实现教育高质量发展的基础支撑。2021年,教育部等六部门印发相关部署意见时明确提出:到2025年,基本形成结构优化、集约高效、安全可靠的教育新型基础设施体系。 在此宏观导向下,山城重庆积极响应,立足本地情况,开启了其特色化的探索之…