欢迎光临
我们一直在努力

【Docker入门】namespace 空间隔离

🚀 欢迎来到我的CSDN博客:Optimistic _ chen ✨ 一名热爱技术与分享的全栈开发者,在这里记录成长,专注分享编程技术与实战经验,助力你的技术成长之路,与你共同进步!


🚀我的专栏推荐:

专栏内容特色适合人群
🔥C语言从入门到精通 系统讲解基础语法、指针、内存管理、项目实战 零基础新手、考研党、复习
🔥Java基础语法 系统解释了基础语法、类与对象、继承 Java初学者
🔥Java核心技术 面向对象、集合框架、多线程、网络编程、新特性解析 有一定语法基础的开发者
🔥Java EE 进阶实战 Servlet、JSP、SpringBoot、MyBatis、项目案例拆解 想快速入门Java Web开发的同学
🔥Java数据结构与算法 图解数据结构、LeetCode刷题解析、大厂面试算法题 面试备战、算法爱好者、计算机专业学生
🔥Redis系列 从数据类型到核心特性解析 项目必备

🚀我的承诺: ✅ 文章配套代码:每篇技术文章都提供完整的可运行代码示例

✅ 持续更新:专栏内容定期更新,紧跟技术趋势

✅ 答疑交流:欢迎在文章评论区留言讨论,我会及时回复(支持互粉)


🚀 关注我,解锁更多技术干货! ⏳ 每天进步一点点,未来惊艳所有人!✍️ 持续更新中,记得⭐收藏关注⭐不迷路 ✨

📌 标签:#技术博客  #编程学习  #Java  #C语言  #算法  #程序员

文章目录

  • 基础命令
    • dd
    • mkfs
    • df
    • mount
    • unshare
  • PID隔离
  • Mount隔离
  • 完结撒花!🎉

基础命令

  namespace是Linux内核用来隔离内核资源的方法。通过命名空间可以让一些进程只能看到与自己相关的一部分资源,而另外一些进行也只能看到与它们自己相关的进行资源。   具体的实现方式是把一个或者多个进程的相关资源指定在同一个namespace中。所以 Linux namespace是对全局资源的一种封装隔离,可以使不同namespace 的进程拥有独立的全局系统资源,不同namespace 的进程无法影响其他进程。

dd

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

# 语法
dd option

选项参数:

  • if=文件名:输入文件名,默认为标准输入,指定源文件

  • of=文件名:输出文件名,默认为标准输出,指定目的文件

  • ibs=bytes:一次读入bytes个字节,指定一个块大小为bytes个字节    obs=bytes:输出 bytes个字节,指定一个块大小为bytes个字节    bs=bytes:同时设置读入/输出的块大小为 bytes 个字节

  • cbs=bytes:一次转换bytes个字节,指定转换缓冲区大小

  • skip=blocks:从输入文件开头跳过blocks个块后再开始复制

  • seek=blocks:从输出文件开头跳过blocks个块后再开始复制

  • count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数

  • 在这里插入图片描述

  • conv=<关键字>,具体的关键字可以前往官网查看,此处不一一展示 在这里插入图片描述

  • –help :显示帮助信息

  • –version:显示版本信息

mkfs

作用:用于在设备上创建Linux文件系统,也就是格式化。

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

参数:

  • -t fstype:指定要建立何种文件系统(管理磁盘上文件存储和检索的机制)
  • filesys:指定要创建的文件系统对应的设备文件名
  • blocks:指定文件系统的磁盘块数
  • -V:详细显示模式
  • fs-options:传递给具体的文件系统的参数

在这里插入图片描述

df

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

df [option]... [file]...

参数:

  • -a( – – all):包含所有的具有0 blocks 的文件系统 在这里插入图片描述

  • -h( – – human-readable):使用人类可读格式(KB、GB) 在这里插入图片描述

  • -H( – – si):使用1000为单位,而不是1024

  • -t( – – type=TYPE):限制列出文件系统的TYPE 在这里插入图片描述

  • -T( – – print-type):显示文件系统的形式 在这里插入图片描述

不使用任何参数:显示所有已挂载文件系统的磁盘使用情况 在这里插入图片描述

mount

作用:用于加载文件系统到指定的挂载点(指定一个入口)。 挂载:把U盘插入到电脑上,文件资源管理器中弹出来一个新的磁盘E: 。如果没有这个E: ,我们就无法访问这个U盘。本质上挂载是为磁盘添加一个入口(挂载点)

在windows系统上,会自动完成挂载;但是Linux系统不会自动挂载,需要Linux mount 命令来手动完成挂载。

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

参数:

  • -l:显示已加载的文件系统列表(遍历)

  • -t:指定加载文件系统类型,支持常见系统类型,可以不指定,mount可以自己识别 *-o options:主要用来描述设备或档案的挂载方式     loop:用来把一个文件当成硬盘分区挂载到系统     ro:采用只读方式挂接设备     rw:采用读写方式挂接设备

  • device:要挂载(mount)的设备(U盘)

  • dir:挂载点的目录 在这里插入图片描述

整个过程就是:mkfs创建一个文件系统,mount挂载成一个磁盘,现在可以正常在这个”磁盘“中进行读写

在这里插入图片描述

unshare

作用:使用与父程序不共享的名称空间运行程序(隔离命名空间)

unshare [options] program [arguments]

参数:

  • -i( – -ipc):不共享IPC空间

  • -m( – -mount):不共享Mount空间

  • -n( – -net):不共享Net空间

  • -p( – -pid):不共享PID空间

  • -u( – -user):不共享UTS空间 在这里插入图片描述

  • -v(- -version):查看版本

  • –fork:执行unshare的进程fork一个新的子进程,在子进程里执行unshare传入的参数

  • — mount-proc:执行子线程前,将proc优先挂载过去

PID隔离

unshare p /bin/bash

在这里插入图片描述 要解决这个报错也很简单,使用- – fork参数,unshare先 fork一个子进程,然后在这个子进程中执行指定的程序。不使用参数则是在unshare的进程下执行指定程序。

打开另一个shell,查看进程,发现两个shell的进程完全一样,显然我们的-p 进程隔离失败了。 在这里插入图片描述 -pid表示我们的进程隔离的是PID,其他命名空间没有隔离;而mount-proc 是因为Linux下的每个进程都有一个对应的 /proc/PID 目录,该目录包含了大量有关当前进程的信息。 为了实现PID隔离,要先把 /proc 挂载过去,新的 /proc 只包含当前PID命名空间的进程信息,否则 /proc 还是父进程的进程信息。

在这里插入图片描述

Mount隔离

创建mount隔离进程

unshare mount fork /bin/bash

创建空白文件

dd if=/dev/zero of=data2.img bs=8k count=10240

在这里插入图片描述 把data2.img转换为一个挂载点,先进行格式化mkfs -t

mkfs t ext4 ./data2.img

在这里插入图片描述

执行df -h命令,查看主机默认命名空间的磁盘挂载情况。要进行挂载先要创建一个目录,挂载到目录。

mkdir p /data/maxhou/data2mount
mount t ext4 ./data2.img /data/maxhou/data2mount

在这里插入图片描述 隔离成功。 在这里插入图片描述

创建一个mount沙箱,挂载只在沙箱内部能看到,在沙箱外面肯定是看不到的。退出沙箱,说明沙箱被销毁,里面的挂载自然也被销毁。

完结撒花!🎉

如果这篇博客对你有帮助,不妨点个赞支持一下吧!👍 你的鼓励是我创作的最大动力~

✨ 想获取更多干货? 欢迎关注我的专栏 → optimistic_chen 📌 收藏本文,下次需要时不迷路!

我们下期再见!💫 持续更新中……


悄悄说:点击主页有更多精彩内容哦~ 😊

在这里插入图片描述

赞(0)
未经允许不得转载:171主机测评 » 【Docker入门】namespace 空间隔离
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址