【Docker】Namespace 空间隔离实战

news2024/12/23 22:24:13

一、实战目的

了解隔离能力并不是 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.coloradmin.cn/o/1963212.html

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

相关文章

直流电表常见的应用有哪些

直流电表作为电力系统中不可或缺的计量工具&#xff0c;其应用广泛且多样化。以下是对直流电表常见应用的详细归纳&#xff1a; 一、新能源发电系统 1. 太阳能光伏发电 应用背景&#xff1a;太阳能光伏发电系统通过太阳能电池板将光能转化为直流电能。直流电表在这一系统中扮…

浪潮NF5280M4虚拟磁盘OFFLINE和磁盘状态为“Frn-Bad”与“UB”故障处理

客户托管设备的机房异常断电&#xff0c;导致6台浪潮NF5280M4的系统无法访问&#xff0c;系统所在的RAID组中的2块磁盘全部亮故障灯。 通过设备管理界面检查&#xff0c;发现逻辑磁盘处于Offline状态&#xff1a; 物理磁盘也处于Offline状态&#xff1a; 进入BIOS RAID配置…

介绍几种 iutils.dll丢失的解决办法,iutils.dll文件详细介绍

电脑中经常会出现 iutils.dll文件丢失的情况&#xff0c;所以如果电脑中缺失 iutils.dll文件会让大家很苦恼&#xff0c;那么 iutils.dll丢失有什么解决办法呢&#xff1f;今天就给大家介绍几种 iutils.dll丢失的解决办法。 1. iutils.dll 文件的来源 iutils.dll 是一个动态链…

npm 修改 淘宝源

aliyun ECS npm 源也不顺畅了&#xff0c;哎 &#x1f611; npm config get registrynpm config set registry https://registry.npmmirror.com喜欢或对你有帮助&#xff0c;点个赞吧&#xff0c;自己先点个嘿嘿。 有错误或者疑问还请评论指出。 我的个人网站 点击访问 hongw…

暑假时光的趣味新选择:《米小圈漫画历史》的魅力探秘

当暑假的炎炎夏日来临&#xff0c;许多家长都会面临一个共同的挑战&#xff1a;如何让孩子远离手机屏幕&#xff0c;找到既有趣又有教育意义的活动。作为一名父母&#xff0c;我被这个问题所困扰。看着孩子一整天沉浸在电子设备中&#xff0c;我深知这不仅会影响他们的视力&…

web程序员转大模型岗位,零基础入门到精通非常详细,收藏我这一篇就够了

从Web程序员转型到大模型岗位&#xff0c;需要掌握一系列新技能和知识。以下是一个详细的攻略&#xff1a; 了解大模型基础&#xff1a; 学习大模型的基本概念&#xff0c;如Transformer架构、自注意力机制等。 阅读相关论文&#xff0c;如“Attention is All You Need”等。 …

Debug-019-git reflog的两种使用场景

前情&#xff1a;最近在开发项目中对版本管理有了新的理解&#xff0c;感觉在这方面有了新的收获。同时学习了一个新的git指令&#xff1a;git reflog 实际了解之后&#xff0c;发现这个指令不是很常用&#xff0c;但是对于特定的场景的话它还是非常比较方便 这里我列举两种我…

使用 LangChain 开发 LLM 应用(3):记忆

注: 本文是基于吴恩达《LangChain for LLM Application Development》课程的学习笔记&#xff1b;完整的课程内容以及示例代码/Jupyter笔记见&#xff1a;LangChain-for-LLM-Application-Development&#xff1b; 课程大纲 目前 LLM 基本上都有最大 Token 的限制&#xff0c;即…

IEEE计算智能学会深圳分会线上讲座 22-01期: 金耀初教授的科研经验分享

IEEE计算智能学会深圳分会线上讲座 22-01期: 金耀初教授的科研经验分享_哔哩哔哩_bilibili 非限定性定语从句&#xff0c;使用逗号和which、动名词搭配使用&#xff0c; 尽量避免使用被动语态。 obviously- 使用clearly,apparently感觉上更好。 In this study/work 后面的交…

C++重载左移运算符

通过重载左移运算符&#xff0c;可以实现cout << p;直接输出类对象的各个属性。 其只能使用全局函数重载。 注意cout的定义如下&#xff1a; _EXPORT_STD extern "C" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT ostream cout; 也就是说我们一直用来输出的c…

VirtualFlow案例 | 油箱燃油晃动模拟,高效分析管路及油箱内油面变化

在探索流体行为模拟的领域&#xff0c;CFD技术为油箱燃油晃动模拟带来了革命性的转变。通过高精度的数值模拟&#xff0c;它不仅揭示了燃油在不同工况下的复杂动态&#xff0c;还为油箱设计的优化提供了关键洞察。这一技术在航空航天、汽车制造、船舶与海洋工程等多个行业中展现…

Diffree - AI一键P图,告别P图困扰,只需要输入一段文字就能轻松玩转P图的神器 本地一键整合包下载

在这个AI技术飞速发展的时代&#xff0c;我们见证了许多神奇的创新&#xff0c;比如最近火遍朋友圈的“Diffree”。这可不是一款新推出的手机游戏&#xff0c;而是一项能让设计师和摄影师们欢呼雀跃的AI图像处理技术。 它能够根据你的文字描述&#xff0c;在图片中“无痕迹”地…

1_初识pytorch

之前完全没有了解过深度学习和pytorch&#xff0c;但现在因为某些原因不得不学了。不得不感叹&#xff0c;深度学习是真的火啊。纯小白&#xff0c;有错的欢迎指正~ 参考视频&#xff1a;PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆…

企业官网后台管理|网站后台管理系统PHP源码 开源

效果展示 提交反馈 获得更多开源资料 技术交流

在 Google Cloud 上大规模部署 dbt 项目

使用 Artifact Registry、Cloud Composer、GitHub Actions 和 dbt-airflow 容器化并运行 dbt 项目 欢迎来到雲闪世界。&#xff0c;大规模管理数据模型是使用dbt&#xff08;数据构建工具&#xff09;的数据团队面临的常见挑战。最初&#xff0c;团队通常从易于管理和部署的简单…

【日记】9 个发箍只有 2 个能压住头发……(513 字)

正文 今天下午实在有些受不了&#xff0c;从正大门外走了出去。抬头望着天空&#xff0c;望着那些悠然自在纯白无暇的云&#xff0c;竟然有些眼睛疼&#xff0c;刺激到想要流泪。 我在室内待得太久太久了。似乎很久没有在这种时间段出来过了。 下午快下班的时候&#xff0c;有个…

前端面试宝典【设计模式】【2】

欢迎来到《前端面试宝典》,这里是你通往互联网大厂的专属通道,专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习,无论是一线大厂还是初创企业的面试,都能自信满满地展现你的实力。 核心特色: 独家实战案例:每一期专栏都将深入剖析真实的前端面试案例,从基础知…

二进制部署k8s集群之cni网络插件flannel和calico工作原理

3、部署 CNI 网络组件 在 master01 节点上操作 上传flannel-v0.21.5.zip并解压 unzip flannel-v0.21.5.zipscp flannel*.tar 192.168.80.20:/opt/k8s/ scp flannel*.tar 192.168.80.30:/opt/k8s/ node两个节点操作 cd /opt/k8s/ docker load -i flannel.tar docker load -i …

Vue3开源Tree组件研发:节点勾选支持v-model

自研Tree组件有两个原因&#xff1a;1. 目前开源UI对Tree组件的用户API不太友好&#xff0c;2. 提升Vue3组件自研能力。 目前已实现的功能见上面思维导图。想象Tree组件的一个使用场景&#xff1a;后台管理员通过Tree组件来完成用户角色授权&#xff0c;同时支持对权限进行新增…

自动化测试概念篇

目录 一、自动化 1.1 自动化概念 1.2 自动化分类 1.3 自动化测试金字塔 二、web自动化测试 2.1 驱动 2.2 安装驱动管理 三、selenium 3.1 ⼀个简单的web自动化示例 3.2 selenium驱动浏览器的工作原理 一、自动化 1.1 自动化概念 在生活中&#xff1a; 自动洒水机&am…