[docker基础二]NameSpace隔离实战

news2025/5/13 16:44:07

目录

一  实战目的

二  基础知识

1)dd 命令详解

2)mkfs命令详解

3)df命令详解

4)mount 命令详解

5)unshare命令详解

三  实战操作一(PID隔离)

四  实战操作二(MOunt隔离)

1)创建 Mount 隔离进程

2)在新进程里边,创建空白文件,把它挂载为一个磁盘,从而完成挂载点的创建

3)在外边看下能否看到挂载,复制ssh渠道再开个窗口即可

4)创建文件等,验证下

5)总结


一  实战目的

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

二  基础知识

1)dd 命令详解

作用:Linux dd 命令用于读取、转换并输出数据。 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=,关键字可以有以下 11 种:

▪ conversion:用指定的参数转换文件。

▪ ascii:转换 ebcdic 为 ascii ▪ ebcdic:转换 ascii 为 ebcdic

▪ ibm:转换 ascii 为 alternate ebcdic

▪ block:把每一行转换为长度为 cbs,不足部分用空格填充

▪ unblock:使每一行的长度都为 cbs,不足部分用空格填充

▪ lcase:把大写字符转换为小写字符

▪ ucase:把小写字符转换为大写字符

▪ swap:交换输入的每对字节

▪ noerror:出错时不停止

▪ notrunc:不截短输出文件

▪ sync:将每个输入块填充到 ibs 个字节,不足部分用空(NUL)字符补齐。

○ --help:显示帮助信息

○ --version:显示版本信息

# 生成 1 个镜像文件
dd if=/dev/zero of=fdimage.img bs=8k count=10240
#将 testfile 文件中的所有英文字母转换为大写,然后转成为 testfile_1 文件
dd if=testfile_2 of=testfile_1 conv=ucase 

2)mkfs命令详解

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

语法:

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

参数:

-t fstype:指定要建立何种文件系统;如 ext3,ext4

filesys :指定要创建的文件系统对应的设备文件名;

blocks:指定文件系统的磁盘块数。

-V : 详细显示模式

fs-options:传递给具体的文件系统的参数

 实例:

#将 sda6 分区格式化为 ext4 格式
mkfs -t ext4 /dev/sda6 
#格式化镜像文件为 ext4
mkfs -t ext4 ./fdimage.img

3)df命令详解

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

语法:

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

常见参数:

○ -a, --all 包含所有的具有 0 Blocks 的文件系统

○ -h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...)

○ -H, --si 很像 -h, 但是用 1000 为单位而不是用 1024

○ -t, --type=TYPE 限制列出文件系统的 TYPE

○ -T, --print-type 显示文件系统的形式

案例:

Shell
#查看磁盘使用情况
df -h
#查看磁盘的系统类型
df -Th

4)mount 命令详解

作用:mount 命令用于加载文件系统到指定的加载点。此命令的也常用于挂载光盘,使我们 可以访问光盘中的数据,因为你将光盘插入光驱中,Linux 并不会自动挂载,必须使用 Linux mount 命令来手动完成挂载。 Linux 系统下不同目录可以挂载不同分区和磁盘设备,它的目录和磁盘分区是分离的, 可以自由组合(通过挂载) 不同的目录数据可以跨越不同的磁盘分区或者不同的磁盘设备。 挂载的实质是为磁盘添加入口(挂载点)。

mount [-l]

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

常见参数:

-l:显示已加载的文件系统列表;

-t: 加载文件系统类型支持常见系统类型的 ext3,ext4,iso9660,tmpfs,xfs 等,大部分情况 可以不指定,mount 可以自己识别

-o options 主要用来描述设备或档案的挂接方式。

        loop:用来把一个文件当成硬盘分区挂接上系统

        ro:采用只读方式挂接设备

        rw:采用读写方式挂接设备

device: 要挂接(mount)的设备。

dir: 挂载点的目录

案例:

#将 /dev/hda1 挂在 /mnt 之下。
mount /dev/hda1 /mnt
#将镜像挂载到/mnt/testext4 下面,需要确保挂载点也就是目录存在
mkdir -p /mnt/testext4
mount ./fdimage.img /mnt/testext4

5)unshare命令详解

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

语法:

unshare [options] program [arguments]

 常用参数及含义:

 案例:

#hostname 隔离
root@139-159-150-152:~# unshare -u /bin/bash
root@139-159-150-152:~# hostname test1
root@139-159-150-152:~# hostname
test1
root@139-159-150-152:~# exit
exit
root@139-159-150-152:~# hostname
139-159-150-152
root@139-159-150-152:

三  实战操作一(PID隔离)

使用 unshare 命令隔离进程pid

 错误原因:父进程是外部的shell,隔离以后,新进程(/bin/bash)看不到外边的PID信息,启动的时候/bin/bash没有自己的父进程就报错

解决方案:添加参数 --fork 创建一个全新的进程,让创建的新进程和外部的shell没有什么关系

然后使用 ps -ef 命令查看shell与新进程的进程列表

发现竟然一样没有变化

原因:

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

 使用如下命令:

root@VM-8-9-ubuntu:/home/dq/docker_code# unshare -p  --fork --mount-proc /bin/bash

 再次使用 ps -ef命令查看发现:我们可以看到此时进程空间内的内容已经变了,而且 启动进程也变成了我们的 bash 进程。说明我们已经看不到主机上的进程空间了,我们的进程空间发生了隔离。

四  实战操作二(MOunt隔离)

1)创建 Mount 隔离进程

使用命令

root@VM-8-9-ubuntu:/home/dq/docker_code# unshare --mount --fork /bin/bash

2)在新进程里边,创建空白文件,把它挂载为一个磁盘,从而完成挂载点的创建

使用 dd 命令创建空白文件

转化为挂载点,要先格式化

完成挂载:

3)在外边看下能否看到挂载,复制ssh渠道再开个窗口即可

发现是看不到这一栏,说明已经发生文件系统隔离

4)创建文件等,验证下

在新进程中

在shell中查看,查看不到

5)总结

借助 mount 隔离把挂载点完成了一个隔离,挂载点一旦隔离,想象一下在每个 mount 出来的目录下放入应用程序需要的所有程序,再放入所需要的操作系统所需要的文件,完成了一个操作系统隔离的最简单的沙箱

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

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

相关文章

Day22打卡-复习

复习日 仔细回顾一下之前21天的内容,没跟上进度的同学补一下进度。 作业: 自行学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码 泰坦尼克号人员生还预测https://www.kaggle.com/competitions/titanic/overview K…

uniapp + vue3 + 京东Nut动作面板组件:实现登录弹框组件(含代码、案例、小程序截图)

uniapp + vue3 + 京东Nut动作面板组件:实现登录弹框组件(含代码、案例、小程序截图) 代码示下,不再赘述。 动作面板组件:https://nutui-uniapp.netlify.app/components/feedback/actionsheet.html 项目背景 业务需求 描述: uniapp + vue3 + 京东Nut框架:实现登录弹框组…

C++类和对象--中阶

C类和对象中阶 01. 类的6个默认成员函数 在 C 中,类有 6 个特殊的默认成员函数(不是 6 个构造函数),它们会在特定情况下由编译器自动生成。包括构造函数,析构函数,拷贝构造和赋值运算符重载,取…

数据签名在区块链中的独特应用与挑战

随着信息技术的飞速发展,分布式系统因其高效、可靠、可扩展等显著优点,在众多领域得到了极为广泛的应用。分布式系统通过网络将多个独立的计算节点连接在一起,协同完成复杂的任务,这种架构使得系统具备了强大的容错能力和负载均衡…

数据可视化大屏——物流大数据服务平台(二)

代码分析: 物流大数据平台代码分析 这是一个基于 Bootstrap 和 ECharts 构建的物流大数据平台前端页面,设计采用了经典的三栏布局,主要展示河南省及全国的物流数据可视化内容。下面从多个维度进行分析: 1. 页面结构分析 整体采…

Maven 处理依赖冲突

Maven处理依赖冲突 什么是依赖冲突?如何解决?Maven自动处理依赖冲突的规则路径优先原则第一声明优先原则注意 子模块覆盖父模块父模块声明dependency子模块覆盖dependency父模块声明dependencyManagement 子模块覆盖dependency父模块声明dependencyManag…

5.12第四次作业

实验要求:完成上图内容,要求五台路由器的环回地址均可以相互访问 AR1 AR2 AR3 AR4 AR5 AS 200 ospf配置 AR2 AR3 AR4 BGP配置 AR1(AS100) AR2(AS200) AR4 AR5(AS300) 结果

【Lattice FPGA 开发】Diamond在线调试Reveal逻辑乱跳的解决

在Vivado中在always块中写逻辑时如果出现always块中的异步复位敏感词在块内部未使用的情况&#xff0c;如下例的rst&#xff1a; always (posedge clk or posedge rst) begin if(~tx_sense_flag)o_rd_adr < d1;else if((o_rd_adr d94) & (bit_cnt d7))o_rd_adr <…

Go语言——kratos微服务框架使用

文章目录 一、安装依赖二、创建项目三、初始化项目四、使用git_bash命令终端运行命令五、创建自己的项目1、修改app.proto3、internal/service/app.go4、修改internal/service/service.go文件5、创建internal/biz/content.go文件6、修改internal/biz/biz.go文件7、创建internal…

hiveserver2与beeline进行远程连接hive配置及遇到的问题

1、hiveserver2 参与用户模拟功能&#xff0c;因为开启后才能保证各用户之间的权限隔离。 1.1、配置 $HADOOP_HOME/etc/hadoop/core-site.xml <!--配置所有节点的root用户都可作为代理用户--> <property><name>hadoop.proxyuser.root.hosts</name>&…

Stable Diffusion进阶之Controlnet插件使用

前面已经对Stable Diffusion的文生图和图生图的操作界面做了详细的介绍&#xff0c;接下来会介绍Stable Diffusion的进阶部分Controlnet插件的使用。往期文章详见&#xff1a; 爆肝整理&#xff01;Stable Diffusion的完全使用手册&#xff08;一&#xff09;爆肝整理&#xff…

Multisim14使用教程详尽版--(2025最新版)

一、Multisim14前言 1.1、主流电路仿真软件 1. Multisim&#xff1a;NI开发的SPICE标准仿真工具&#xff0c;支持模拟/数字电路混合仿真&#xff0c;内置丰富的元件库和虚拟仪器&#xff08;示波器、频谱仪等&#xff09;&#xff0c;适合教学和竞赛设计。官网&#xff1a;艾…

使用Stable Diffusion(SD)中,步数(Steps)指的是什么?该如何使用?

Ⅰ定义&#xff1a; 在Stable Diffusion&#xff08;SD&#xff09;中&#xff0c;步数&#xff08;Steps&#xff09; 指的是采样过程中的迭代次数&#xff0c;也就是模型从纯噪声一步步“清晰化”图像的次数。你可以理解为模型在画这张图时“润色”的轮数。 Ⅱ步数的具体作…

【se-res模块学习】结合CIFAR-10分类任务学习

继CIFAR-10图像分类&#xff1a;【Res残差连接学习】结合CIFAR-10任务学习-CSDN博客 再优化 本次训练结果在测试集上的准确率表现可达到90%以上 1.训练模型&#xff08;MyModel.py&#xff09; import torch import torch.nn as nnclass SENet(nn.Module): # SE-Net模块def…

【C++设计模式之Template Method Pattern】

C设计模式之Template Method Pattern 模式定义核心思想动机(Motivation)结构&#xff08;Structure&#xff09;实现步骤应用场景要点总结 模式定义 模式定义&#xff1a; 定义一个操作中的算法的骨架(稳定)&#xff0c;而将一些步骤延迟(变化)到子类中。Template Method使得子…

英伟达Blackwell架构重构未来:AI算力革命背后的技术逻辑与产业变革

——从芯片暴力美学到分布式智能体网络&#xff0c;解析英伟达如何定义AI基础设施新范式 开篇&#xff1a;当算力成为“新石油”&#xff0c;英伟达的“炼油厂”如何升级&#xff1f; 2025年3月&#xff0c;英伟达GTC大会上&#xff0c;黄仁勋身披标志性皮衣&#xff0c;宣布了…

深度拆解!MES如何重构生产计划与排产调度全流程?

☂引言 在制造业数字化转型浪潮中&#xff0c;生产计划与排产调度的精准性直接决定企业竞争力。深蓝易网MES系统通过智能化调度与全流程管控&#xff0c;帮助企业破解排产难题&#xff0c;实现资源高效协同与生产透明化管理&#xff0c;为制造企业打造柔性化、敏捷化的生产体系…

信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(十八)

个人笔记整理---仅供参考 第十八章项目绩效域 18.1干系人绩效域 18.2团队绩效域 18.3开发方法和生命周期绩效域 18.5项目工作绩效域 18.6交付绩效域 18.7度量绩效域 18.8不确定绩效域

UniDevTools - UniApp(前端app)调试工具使用

使用介绍 | UniDevTools 兼容框架&#xff1a; Vue2jsvuexVue3tsvuex(pinia)√√ 兼容平台&#xff1a; H5APP微信小程序APP-NVUE其他小程序UniAppX√√√√(大部分功能支持)未测试 (待办中) 下载安装 将下载好的源码解压至项目根目录&#xff0c;文件夹命名为 devTools …

spring中的@Lazy注解详解

一、核心功能与作用 Lazy 注解是 Spring 框架中用于延迟 Bean 初始化的核心工具&#xff0c;通过将 Bean 的创建推迟到首次使用时&#xff0c;优化资源利用和启动性能。其核心功能包括&#xff1a; 延迟初始化 默认情况下&#xff0c;Spring 在容器启动时立即初始化所有单例 …