【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,一经查实,立即删除!

相关文章

淘宝商家电话采集 淘宝店铺爬虫软件使用教程

淘宝商家电话采集&#xff1a;淘宝店铺爬虫软件使用教程 淘宝作为中国最大的电子商务平台之一&#xff0c;拥有众多的商家和店铺。有时候我们需要获取特定店铺的联系电话&#xff0c;以便进行合作洽谈或者其他目的。本文将介绍如何使用Python编写一个淘宝店铺爬虫软件来采集商…

有效组织离散变量:指针数组在C语言中的应用

把离散变量组织起来&#xff0c;访问起来更加方便&#xff0c;无需一个个变量单独赋值。 如modbus读写reg&#xff0c; 把a\b\c\d实时变化分散的变量组织成一个数组reg&#xff0c;方便获取 相当于变量的内存地址池 int main() {int a 10, b 20, c 30, d 40;int i;int *re…

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…

英语:四、冠词

1、冠词的概述 &#xff08;1&#xff09;冠词的分类 根据冠词的用法&#xff0c;它可以分为定冠词、不定冠词和零冠词。 定冠词 the 不定冠词 a an 零冠词 名词前面没有冠词 &#xff08;2&#xff09;冠词的位置 a、放在名词之前 一般情况下&#xff0c;冠词置于…

Vmwar保姆级安装与配置

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

中间件 - 使用Eureka进行微服务注册与发现

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有疑问和建议&#xff0c;请私信或评论留言&#xff01; 前言 在微服务架构中…

【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;仅适用于解决一般性小数精度问题&…

Linux脚本:自动检测的bash脚本,用于检查linux的系统安全性

目录 一、要求 二、脚本介绍 1、脚本内容 2、脚本解释 &#xff08;1&#xff09;函数定义 &#xff08;2&#xff09;防火墙状态检查 &#xff08;3&#xff09;SELinux/AppArmor状态检查 &#xff08;4&#xff09;SSH配置检查 &#xff08;5&#xff09;用户账户数…

android 设备,启用 adb 调试

1 开启开发者选项 如果在android user版本&#xff0c;通过 USB 连接设备上使用 adb&#xff0c;需要在设备启用 USB 调试。通常开发者选项默认&#xff0c;处于隐藏状态。 1.1 开启开发者选项 在设备上&#xff0c;找到build信息选项&#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写UI自动化--playwright(点击操作)

本篇介绍playwright点击操作&#xff0c;click()方法的常用参数 目录 0. selector (必需) 1. modifiers(可选) 2. position(可选) 3. button(可选) 4. click_count(可选) 5. delay 6. timeout(可选) 7. forceTrue(可选) 8. trialTrue(可选) 9. no_wait_after(可选) …

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

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

YOLOv8改进 | 主干网络 | ⭐重写星辰Rewrite the Stars⭐【CVPR2024】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有70+篇内容,内含各种Head检测头、损失函数Loss、…

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

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