Docker-namespace

Docker-namespace

  • namespace
    • 基础命令
      • dd 命令
      • mkfs
      • df
      • mount
      • unshare
    • pid 隔离试验
    • mount 隔离

namespace

namespace 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程相关资源指定在同一个 namespace 中。

Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前namespace 里的进程,对其他 namespace 中的进程没有影响。

Linux 提供了多个 API 用来操作 namespace,它们是 clone()、 setns() 和 unshare() 函数,为了确定隔离的到底是哪项 namespace,在使用这些 API 时,通常需要指定一些调用参数:CLONE_NEWIPC、 CLONE_NEWNET、 CLONE_NEWNS、CLONE_NEWPID、 CLONE_NEWUSER、 CLONE_NEWUTS 和 CLONE_NEWCGROUP。如果要同时隔离多个 namespace,可以使用 | (按位或)组合这些参数。

namespace系统调用参数被隔离的全局系统资源
UTSCLONE_NEWUTS主机名和域名
IPCCLONE_NEWIPC信号量、消息队列和共享内存
PIDCLONE_NEWPID进程编号
NetworkCLONE_NEWNET网络设备、网络栈、端口等
MountCLONE_NEWNS文件系统挂载点
UserCLONE_NEWUSER用户和用户组

以上命名空间在容器环境下的隔离效果:
UTS:每个容器能看到自己的 hostname,拥有独立的主机名和域名。
IPC:同一个 IPC namespace 的进程之间能互相通讯,不同的 IPC namespace 之间不能通信。
PID:每个 PID namespace 中的进程可以有其独立的 PID,每个容器可以有其 PID 为 1 的 root 进程。
Network:每个容器用有其独立的网络设备, IP 地址, IP 路由表, /proc/net 目录,端口号。
Mount:每个容器能看到不同的文件系统层次结构。
User:每个 container 可以有不同的 user 和 group id。

基础命令

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)字符补齐

示例:
从 /dev/zero 文件里一次读取8k大小的内容,总共读取1024次,并把每次读取到的数据写入到test1.img文件中。

在这里插入图片描述

mkfs

作用:用于在设备上创建 Linux 文件系统,俗称格式化,比如我们使用 U 盘的时候可以格式化。
语法:
mkfs [-V] [-t fstype] [fs-options] filesys [blocks]

常见参数:

  • -t fstype:指定要建立何种文件系统;如 ext3, ext4
  • filesys :指定要创建的文件系统对应的设备文件名;
  • blocks:指定文件系统的磁盘块数。
  • -V : 详细显示模式
  • fs-options:传递给具体的文件系统的参数。
    示例:
    mkfs -t ext4 test1.img // 格式化镜像文件为 ext4
    mkfs -t ext4 /dev/sda6 // 将sda6分区格式化为 ext4 格式

df

作用:命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
语法:
df [OPTION]... [FILE]...
常见参数:

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

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

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

  • -t, --type=TYPE 添加过滤条件,只列出文件系统是 TYPE

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

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

unshare

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

语法:

unshare [options] program [arguments]

常用参数:

参数含义
-i, --ipc不共享 IPC 空间
-m, --mount不共享 Mount 空间
-n, --net不共享 Net 空间
-p, --pid不共享 PID 空间
-u, --uts不共享 UTS空间
-U, --user不共享用户
-V,–version版本查看
–fork执行 unshare 的进程 fork 一个新的子进程,在子进程里执行unshare 传入的参数
–mount-prot执行子进程前,将 proc 有限挂载过去

示例:

hostname 隔离

[root@VM-0-11-centos ~]# unshare -u /bin/bash
[root@VM-0-11-centos ~]# hostname test
[root@VM-0-11-centos ~]# hostname
test
[root@VM-0-11-centos ~]# exit
exit
[root@VM-0-11-centos ~]# hostname
VM-0-11-centos

在这里插入图片描述

pid 隔离试验

在这里插入图片描述
出错是因为如果不建新进程,新的 namespace 会用执行 unshare 命令的进程 的 PID 作为新的空间的父进程,而这个 unshare 进程并不在新的 namespace 中,所以会报个错 Cannot allocate memory。

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

执行 ps -ef 查看进程信息,我们可以看到此时进程空间内的内容已经变了,而且启动进程也变成了我们的 bash 进程。说明我们已经看不到主机上的进程空间了,我们的进程空间发生了隔离。
在这里插入图片描述
完整pid隔离示例:
unshare --fork --pid --mount-proc /bin/bash

mount 隔离

首先先执行 unshare --mount --fork /bin/bash 或者直接 unshare --mount即可
–fork 选项用于在创建新的命名空间时将新的子进程创建在新的命名空间中。
如果你想要在新的命名空间中执行一些任务,那么使用 --fork 选项可能是有用的。
但是,如果你只是想创建一个新的 mount 命名空间,而不需要在其中运行新的进程,你可以不使用
–fork 选项。
并使用 dd命令创建一个新文件
dd if=/dev/zero of=test.img bs=8k count=10240
并创建一个文件挂载点文件夹
mkdir testmount
最后将镜像挂载到新创建的文件夹下面
mount -t ext4 ./test.img ./testmount
最后通过查看新创建的bash和开启mount中的bash可以发现是存在mount隔离的
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity编辑器扩展】| 顶部菜单栏扩展 MenuItem

前言【Unity编辑器扩展】 | 顶部菜单栏扩展 MenuItem一、创建多级菜单二、创建可使用快捷键的菜单项三、调节菜单显示顺序和可选择性四、创建可被勾选的菜单项五、右键菜单扩展5.1 Hierarchy 右键菜单5.2 Project 右键菜单5.3 Inspector 组件右键菜单六、AddComponentMenu 特性…

MediaBox助力企业一站式获取音视频能力

以一只音视频百宝箱&#xff0c;应对「千行千面」。 洪炳峰、楚佩斯&#xff5c;作者 大家好&#xff0c;今天我分享的主题是MediaBox——行业音视频数字化再加速。 根据权威数据表明&#xff0c;65%的行业数字化信息来自视频&#xff0c;基于此&#xff0c;音视频技术对于行…

群晖NAS教程(二十五)、利用web station安装nextcloud

群晖NAS教程(二十五)、利用web station安装nextcloud 一、下载离线安装包文件 下载地址https://download.nextcloud.com/server/releases/&#xff0c;我们选择zip格式的&#xff0c;下载这个latest-27.zip的最新版的。 把它加压缩到群辉web/hepnextcloud路径下&#xff0c;并…

CSS:隐藏移动端的滚动条的方式

目录 方式一&#xff1a;-webkit-scrollbar方式二&#xff1a;overflow方式三&#xff1a;clip-path方式四&#xff1a;mask 遮罩总结参考 移动端开发中&#xff0c;有一个横向滚动元素&#xff0c;产品告诉我不需要滚动条&#xff0c;我说这个简单&#xff0c;隐藏一下不就行了…

Ubuntu使用命令行界面配置静态IP地址

参考地址&#xff1a;https://www.zhihu.com/tardis/sogou/art/46544606 方法一&#xff1a;配置/etc/network/interfaces文件 首先查看网卡接口名称&#xff1a;ip a 知道网卡接口名称之后&#xff0c;在 /etc/network/interfaces 文件中配置&#xff1a; auto enp0s31f6 …

keep-alive缓存三级及三级以上路由

需求需要缓存这个出入记录&#xff0c;当tab切换时不重新加载&#xff0c;当刷新页面时&#xff0c;或把这个关闭在重新打开时重新加载如图&#xff1a; &#xff08;我这里用的是芋道源码的前端框架) keep-alive 1、include 包含页面组件name的这些组件页面&#xff0c;会被…

【算法与数据结构】236、LeetCode二叉树的最近公共祖先

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a; 根据定义&#xff0c;最近祖先节点需要遍历节点的左右子树&#xff0c;然后才能知道是否为最近祖先节…

Kubernetes 部署发布镜像(cubefile:0.4.0)

目录 实验&#xff1a;部署发布镜像&#xff08;cubefile:0.4.0&#xff09; 需求分析&#xff1a; 1、部署Kubenetes环境&#xff1a; 2、撰写 cubefile-deployment.yaml 文件 代码解释&#xff1a; 遇到的问题&#xff1a; 问题解决 &#xff1a; 3、撰写 cubefile-se…

vue2中实现 TDesign 树形懒加载

之前我有写过Element ui的树形懒加载 其主要是通过load函数来实现 而TDesign也是照虎画猫 他也是主要靠load 我们先来看一个基本的组件 <template><t-tree :data"items" :load"load" /> </template><script lang"jsx">…

开启更高效之路,美创科技暗数据发现和数据分类分级系统全新升级

数字经济时代&#xff0c;数据分类分级作为平衡数据保护和流通利用的基础工作&#xff0c;愈发受到广泛的关注。但面对海量繁杂的数据&#xff0c;如何快速地实现数据梳理与分类分级&#xff0c;对于绝大多数组织而言&#xff0c;并非易事—— ◼︎ 在缺少标准方法和自动化、智…

C++之结构体智能指针shared_ptr实例(一百九十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Redis的基本概念与基础用法(1)

在节假日前12306的访问量就会急剧增加&#xff0c;在这种海量用户高并发的情况下就容易出现网站崩溃的情况&#xff0c;造成网站奔溃的罪魁祸首就是关系型数据库&#xff0c;因为关系型数据库有&#xff1a; 性能瓶颈&#xff1a;磁盘IO性能低下扩展瓶颈&#xff1a;数据关系复…

机器学习(10)---特征选择

文章目录 一、概述二、Filter过滤法2.1 过滤法说明2.2 方差过滤2.3 方差过滤对模型影响 三、相关性过滤3.1 卡方过滤3.2 F检验3.3 互信息法3.4 过滤法总结 四、Embedded嵌入法4.1 嵌入法说明4.2 以随机森林为例的嵌入法 五、Wrapper包装法5.1 包装法说明5.2 以随机森林为例的包…

SpringMVC之文件上传下载以及jrebel的使用

目录 前言 文件上传 导入依赖 配置文件上传解析器 配置存放地址 ​编辑 导入PropertiesUtil工具类 编写resource.properties 添加sql 编写PageController类 编写主页展示界面 编写文件上传方法 搭建一个图片上传的操作页面 文件下载 多文件上传 效果展示​编辑 jre…

web UI自动化介绍

文章目录 一、web UI自动化介绍1.1 执行UI自动化测试前提1.2 Selenium介绍以及知识点梳理 二、Selenium 学习2.1 基础2.1.1 环境安装与基础使用2.1.2 web浏览器控制2.1.3 常见控件的八大定位方式2.1.3.1 八大定位方式介绍2.1.3.2 NAME、ID定位2.1.3.3 css_selector定位2.1.3.4 …

c++qt day2

封装一个结构体&#xff0c;结构体中包含一个私有数组&#xff0c;用来存放学生的成绩&#xff0c;包含一个私有变量&#xff0c;用来记录学生个数&#xff0c; 提供一个公有成员函数&#xff0c;void setNum(int num)用于设置学生个数 提供一个公有成员函数&#xff1a;void…

Cascade-MVSNet CVPR-2020 学习笔记总结 译文 深度学习三维重建

文章目录 4 Cascade-MVSNet CVPR-20204.0 主要特点4.1 背景介绍4.2 代价体构造回顾4.3 Cascade-MVSNet4.4 Loss的设置4.5 Cascade-MVSNet实战操作4.6 总结4 Cascade-MVSNet CVPR-2020 深度学习三维重建 cascade-MVSNet-CVPR-202(源码、原文、译文 )下载 4.0 主要特点 采用特…

Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化...

全文链接&#xff1a;https://tecdat.cn/?p33566 生成对抗网络&#xff08;GAN&#xff09;是一种神经网络&#xff0c;可以生成类似于人类产生的材料&#xff0c;如图像、音乐、语音或文本&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 相关视频 最近我们…

Python之数据库(MYSQL)连接

一&#xff09;数据库SQL语言基础 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database…

C高级day4循环语句

1&#xff0c;思维导图 运行结果为&#xff1a; 运行结果为&#xff1a;