【Docker入门】namespace 空间隔离

🚀 欢迎来到我的CSDN博客:Optimistic _ chen

一名热爱技术与分享的全栈开发者,在这里记录成长,专注分享编程技术与实战经验,助力你的技术成长之路,与你共同进步!


🚀我的专栏推荐

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

🚀我的承诺:

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

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

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


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

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

文章目录

基础命令

  namespace是Linux内核用来隔离内核资源的方法 。通过命名空间可以让一些进程只能看到与自己相关的一部分资源,而另外一些进行也只能看到与它们自己相关的进行资源。

  具体的实现方式是把一个或者多个进程的相关资源指定在同一个namespace中。所以 Linux namespace是对全局资源的一种封装隔离,可以使不同namespace 的进程拥有独立的全局系统资源,不同namespace 的进程无法影响其他进程。

dd

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

powershell 复制代码
# 语法
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文件系统,也就是格式化。

powershell 复制代码
mkfs [V] [-t fstype] [fs-options] filesys [blocks]

参数:

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

df

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

powershell 复制代码
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 命令来手动完成挂载。

powershell 复制代码
mount [-l]
mount [-t vfstype] [-o options] [device] dir

参数:

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

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

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

  • dir:挂载点的目录

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

unshare

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

powershell 复制代码
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隔离

powershell 复制代码
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隔离进程

powershell 复制代码
unshare --mount --fork /bin/bash

创建空白文件

powershell 复制代码
dd if=/dev/zero of=data2.img bs=8k count=10240


把data2.img转换为一个挂载点,先进行格式化mkfs -t

powershell 复制代码
mkfs -t ext4 ./data2.img

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

powershell 复制代码
mkdir -p /data/maxhou/data2mount
mount -t ext4 ./data2.img /data/maxhou/data2mount


隔离成功。

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

完结撒花!🎉

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

想获取更多干货? 欢迎关注我的专栏 → optimistic_chen

📌 收藏本文,下次需要时不迷路!

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


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

相关推荐
skywalk81633 分钟前
在FreeBSD的Uubntu兼容环境下安装Reasonix
linux·运维·freebsd
^yi18 分钟前
【Linux系统编程】对操作系统的理解
linux·运维·服务器·操作系统·系统调用·os
Kina_C34 分钟前
LVS-NAT 负载均衡实验从环境搭建到规则持久化
linux·运维·服务器·负载均衡·lvs
小肝一下1 小时前
7. 库制作与原理
linux·c语言·操作系统·bash·shell·动静态库
Android洋芋1 小时前
PrintFriendly网页文章转PDF插件工具及技术分析
运维·服务器·pdf·网页转pdf
Elastic 中国社区官方博客1 小时前
使用重新设计的 AutoOps 更快地进行 Elasticsearch 问题排查
大数据·运维·前端·人工智能·elasticsearch·搜索引擎·全文检索
RoboWizard1 小时前
金士顿高速闪存盘 单双接口适配多元存储需求
大数据·运维·人工智能·智能手机·云计算
hkj88081 小时前
Ubuntu 20.04 安装 OpenJDK 17
linux·运维·ubuntu
huainingning1 小时前
防火墙重启后ssl登录提示证书过期临时解决方法
linux·服务器·ssl
sulikey2 小时前
服务器安装Docker教程。如何在云服务器安装Docker容器?
运维·服务器·ubuntu·docker·安装教程·云服务器