命名空间( namespace)是 Linux 内核的一个强大特性,为容器虚拟化的实现带来极大便 利。 利用这一特性,每个容器都可以拥有自己单独的命名空间,运行在其中的应用都像是在 独立的操作系统环境中一样。 命名空间机制保证了容器之间彼此互不影响。 在操作系统中,包括内核、文件系统、网络、进程号( Process ID, PID)、用户号( User ID, UID)、 进程间通信( Inter Process Communication, IPC)等资源,所有的资源都是应用进 程直接共享的。 要想实现虚拟化,除了要实现对内存、 CPU、网络 IO、硬盘 IO、存储空间 等的限制外,还要实现文件系统、网络、 PID、 UID、 IPC 等的相互隔离。 前者相对容易实现一些,后者则需要宿主主机系统的深入支持。 随着 Linux 系统对于命名空间功能的逐步完善,现在已经可以实现这些需求,让进 程在彼此隔离的命名空间中运行。 虽然这些进程仍在共用同一个内核和某些运行时环境 (runtime,例如一些系统命令和系统库),但是彼此是不可见的,并且认为自己是独占系统的。

1.进程命名空间

[root@master ~]# ps -ef |grep nginx
root      6574  6557  0 21:26 ?        00:00:00 nginx: master process nginx -g daemon off;
100       6609  6574  0 21:26 ?        00:00:00 nginx: worker process
root      9474   601  0 21:30 pts/0    00:00:00 grep --color=auto nginx
root     27434 27417  0 3月05 ?       00:00:00 nginx: master process nginx -g daemon off;
100      27469 27434  0 3月05 ?       00:00:00 nginx: worker process
root     27638 27619  0 3月05 ?       00:00:00 nginx: master process nginx -g daemon off;
100      27691 27638  0 3月05 ?       00:00:00 nginx: worker process
[root@master ~]# ps -ef |grep 6557
root      6557  3628  0 21:26 ?        00:00:00 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/cdac05a904db952bca89c487ea12f9f58ce4599428e769e6faeaaf1091d8610c -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
root      6574  6557  0 21:26 ?        00:00:00 nginx: master process nginx -g daemon off;
root      9640   601  0 21:30 pts/0    00:00:00 grep --color=auto 6557
[root@master ~]# ps -ef |grep 3628
root      3628     1  0 2月19 ?       00:29:48 /usr/bin/containerd

2.IPC命名空间

容器中的进程交互还是采用了 Linux 常见的 进程间交互方法( Interprocess Communication, IPC),包括信号量、消息队列和共享内存等方式。 PID 命名空间和 IPC 命名空间可以组合起来一起 使用,同一个 IPC 命名空间内的进程可以彼此可 见,允许进行交互;不同空间的进程则无法交互。

3.网络命名空间

有了进程命名空间后,不同命名空间中的进程号可以相互隔离,但是网络端口还是共享本地 系统的端口 。 通过网络命名空间,可以实现网络隔离。一个网 络命名空间为进程提供了一个完全独立的网络协议校 的视图。 包括网络设备接口 、 IPv4 和 IPv6 协议、 IP 路由表、 防火墙规则、 sockets 等, 这样每个容器的网 络就能隔离开来。 Docker 采用虚拟网络设备(Virtual Network Device, VND)的方式,将不同命名空间的网络设备连接到一 起。 默认情况下, Docker 在宿主机上创建多个虚机网 桥(如默认的网桥 dockerO ),容器中的虚拟网卡通过网 桥进行连接。

4.挂载命名空间
类似于 chroot, 挂载 ( Mount, MNT) 命名空间可以将一个进程的根文件系统限制到一 个特定的目录下。 挂载命名空间允许不同命名空间的进程看到的本地文件位于宿主机中不同路径下,每 个命名空间中的进程所看到的文件目 录彼此是隔离的。 例如, 不同命名空间中的进程, 都认 为自己独占了一个完整的根文件系统( rootfs), 但实际上,不同命名空间中的文件彼此隔离, 不会造成相互影响 ,同时也无法影响宿主机文件系统中的其他路径。

5. UTS 命名空间 UTS (UNIX Tim e-sharing System) 命名空间允许每个容器拥有独立的主机名和域名 ,从 而可以虚拟出一个有独立主机名和网络空间的环境, 就跟网络上一台独立的主机一样。 如果没有于动指定主机名称, Docker 容器的主机名就是返回的容器 ID 的前 6 字节前缀, 否则为指定的用户名:

6. 用户命名空间 每个容器可以有不同的用户和组 id, 也就是说, 可以在容器内使用特定的内部用户执行 程序,而非本地系统上存在的用户 。 每个容器内部都可以有最高权限的 root 帐号,但跟宿主主机不在一个命名空间。 通过使 用隔离的用户命名空间, 可以提高安全性,避免容器内的进程获取到额外的权限;同时通过使用不同用户也可以进一步在容器内控制权限.

转载于:https://www.cnblogs.com/leleyao/p/10498356.html

4.namespace相关推荐

  1. C++ namespace 的作用以及使用

    namespace 是什么: 命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一个任务中的所有类声明放在同一个命名空间中.标准C++库(不包括标准C库)中所包含的 ...

  2. javascript之namespace模式

    JavaScript 的命名空间并不是真正的命名空间, 只是在脚本内部创建一个封闭的小空间, 必须通过特定的空间名称才能对空间内部的代码进行访问, 这样可以防止同名函数和变量发生冲突, 也可以更方便地 ...

  3. 关于命名空间namespace

    虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits).接口.函数和常量. 在声明命名空间之前唯一合法的代码是用于定义源文件编码方 ...

  4. Namespace(命名空间)的使用

    作者:飞刀 关于Namespace(命名空间)的使用常用<% @ Import Namespace="System.Data" %>,这是在引用M$为我们提供的Name ...

  5. C++中的命名空间namespace

    1.Cpp中的命名空间 假设这样一种情况,当一个班上有两个名叫Zara的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等.同样的情况, ...

  6. Unable to locate Spring NamespaceHandler for XML schema namespace [http://cxf.apache.org/jaxws]

    利用cxf调试webservice接口的时候出现下面的错误 error:Unable to locate Spring NamespaceHandler for XML schema namespac ...

  7. Kubernetes学习笔记二:Namespace,Cgroups 的隔离与应用

    Kubernetes学习系列文章:Kubernetes-博客专栏 今天在学习极客时间专栏:<深入剖析Kubernetes> 第五讲05 | 白话容器基础(一):从进程说开去和第六讲06 | ...

  8. C++_static,类模板、函数模板、namespace

    C++_static,类模板.函数模板.namespace 1.static 2.类模板 3.函数模板 4.namespace 5.深入,更多细节 参考:侯捷<C++面向对象高级编程>

  9. linux网络命名空间详解,Linux Network Namespace (netns) 详解

    Linux Network Namespace (netns) 详解 Network Namespace (以下简称netns)是Linux内核提供的一项实现网络隔离的功能,它能隔离多个不同的网络空间 ...

  10. Vue教程5【vuex】getters,mapState,mapGetters,mapActions,mapMutations,模块化namespace

    vuex 什么时候需要使用? 状态(数据)共享! vuex工作原理 搭建vuex环境 创建文件 src/store/index.js//全局安装[--save生产环境] npm install -g ...

最新文章

  1. [学习笔记]矩形面积并
  2. c++ ado 程序终止时崩溃
  3. oracle分页置顶,[置顶]       ibatis查询oracle分页
  4. 三个表格居中纵向html,前端技巧集:图与表三步垂直居中
  5. EF Code First 学习笔记:关系
  6. linux message日志只有4k,linux命令查看日志
  7. linux sed用法
  8. 整理:国内主流云计算方案比较
  9. 内存条hyperx_HyperX是什么牌子内存条
  10. 设置win7一直以管理员身份运行
  11. CZ1206计算机在线,若按CZ-1206科学计算器的键后,再依次按键,则显示的结果是()...
  12. ibm邮件怎么撤回_请问LotusNotes具备发出邮件后撤回 – 手机爱问
  13. Excel表格中,删除列或行的快捷键是什么
  14. P3387 【模板】缩点 Tarjan强连通分量/树上dp
  15. win10系统sqlserver2000数据库问题
  16. C# Math.Abs()取“绝对值”方法使用过程中需要注意的地方
  17. 重力感应G-Sensor 方向介绍
  18. A. Arena of Greed(博弈+贪心)2020 ICPC, COMPFEST 12, Indonesia Multi-Provincial Contest
  19. mysql实现按照自定义(指定顺序)排序
  20. 初入职场SVN使用教程,保姆级

热门文章

  1. Ubuntu 20.04 LTS(Focal Fossa)发布
  2. Visual Studio Code 11 月 Python 扩展更新
  3. 电脑怎么设计java环境_java环境变量配置,详细教您win7怎么配置java环境变量。
  4. 返回一个不确定的对象_我有一个Android必备知识点,你确定不了解一下?
  5. qt判断读入的字符串是否含有英文_重复的子字符串
  6. redis 消息队列 过段时间不能下发_以Redis来谈消息队列
  7. git解决冲突 删除本地_Git冲突:git pull时和本地改动冲突
  8. 香港理工计算机qs排名,香港理工大学专业排名一览及最强专业推荐(QS世界大学排名)...
  9. 在linux环境下com.aspose.words将word文件转为pdf后乱码,window环境下不会
  10. php sql判断l列的存在,thinkphp 模块不存在:404