命名空间( 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 : ? :: nginx: master process nginx -g daemon off;
: ? :: nginx: worker process
root : pts/ :: grep --color=auto nginx
root 3月05 ? :: nginx: master process nginx -g daemon off;
3月05 ? :: nginx: worker process
root 3月05 ? :: nginx: master process nginx -g daemon off;
3月05 ? :: nginx: worker process
[root@master ~]# ps -ef |grep
root : ? :: 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 : ? :: nginx: master process nginx -g daemon off;
root : pts/ :: grep --color=auto
[root@master ~]# ps -ef |grep
root 2月19 ? :: /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 帐号,但跟宿主主机不在一个命名空间。 通过使 用隔离的用户命名空间, 可以提高安全性,避免容器内的进程获取到额外的权限;同时通过使用不同用户也可以进一步在容器内控制权限.

4.namespace的更多相关文章

  1. 理解Docker(3):Docker 使用 Linux namespace 隔离容器的运行环境

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  2. C++ namespace

    namespace, 命名空间, 用于解决命名冲突的问题. Python中的package/module, Javascript中的object, Java中的package都具有这样的功能. 如何使 ...

  3. C++ 之namespace常见用法

    一.背景 需要使用Visual studio的C++,此篇对namespace的常用用法做个记录. 二.正文 namespace通常用来给类或者函数做个区间定义,以使编译器能准确定位到适合的类或者函数 ...

  4. using namespace std 和 using std::cin

    相较using std::cin使用using namespace std不会使得程序的效率变低,或者稳定性降低,只是这样作会将很多的名字引入程序,使得程序员使用的名字集合变小,容易引起命名冲突. 在 ...

  5. Why Namespace? - 每天5分钟玩转 OpenStack(102)

    上一节我们讨论了 Neutron 将虚拟 router 放置到 namespace 中实现了不同 subnet 之间的路由.今天探讨为什么要用 namespace 封装 router? 回顾一下前面的 ...

  6. struts2中错误There is no Action mapped for namespace [/] and action name [] associated with context path

    1 There is no Action mapped for namespace [/] and action name [] associated with context path [/Stru ...

  7. PHP 命名空间(namespace)

    PHP 命名空间(namespace) PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Java,那命名空间就不算什么新事物. 不过在PHP当中还是有着相当重要的意义 ...

  8. AMD and CMD are dead之Why Namespace?

    缘由 当我看到_Franky兄的微博的时候: 我觉得我有必要出来详细说说KMDjs到底有什么本质上的优势了,连教主_Franky.貘吃馍香都不能理解他的好处,那么可想而知,在前端圈.或是全端圈.或是I ...

  9. 使用mvc时,在视图view中使用强类型视图,在web.config文件中添加命名空间namespace的引用不起作用,解决方法

    这是view中的model代码: @model t_user_info 这是web.config配置文件只的代码: <namespaces> <add namespace=" ...

  10. C、C++: 引用、指针、实例、内存模型、namespace

    // HelloWorld.cpp : Defines the entry point for the console application. // #include "stdafx.h& ...

随机推荐

  1. LNMP环境

    准备工作:1)把所有的软件安装在/usr/local/,源码包放在/package/,数据:自定义,日志文件:自定义 创建www所属组及用户/usr/sbin/groupadd www/usr/sbi ...

  2. Centos7 安装配置mysql5.6

    Centos7下完美安装并配置mysql5.6   Centos7将默认数据库mysql替换成了Mariadb,对于我们这些还想用mysql的人来说并不是一个好消息. 最近我搜罗了网上各种安装教程,各 ...

  3. Linux内存管理 一个进程究竟占用多少空间?-VSS/RSS/PSS/USS

    关键词:VSS.RSS.PSS.USS._mapcount.pte_present.mem_size_stats. 在Linux里面,一个进程占用的内存有不同种说法,可以是VSS/RSS/PSS/US ...

  4. CSS的插入和选择器介绍

    一.认识CSS样式 1.定义 CSS全称:层叠样式表(Cascading Style Sheets) 主要作用:定义HTML内容在浏览器内的显示样式,比如文字大小.颜色.字体加粗等 优点:通过定义某个 ...

  5. Spark性能优化指南——基础篇(转载)

    前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作 ...

  6. 深入理解消息中间件技术之RabbitMQ服务

    什么叫消息队列? 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象. 消息队列(Message Queue)是一种应用间的通信方式, ...

  7. 面试 15:顺时针从外往里打印数字(剑指 Offer 第 20 题)

    面试 15:顺时针从外往里打印数字 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印每一个数字.例如输入: {{1,2,3}, {4,5,6}, {7,8,9}} 则依次打印数字为 1.2.3. ...

  8. linux screen 工具

    一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...

  9. SNMP 获取交换机端口相关信息

    原文地址:https://blog.csdn.net/ysdaniel/article/details/37927541 我们想用snmpwalk查看网络设备的端口,MIB库中相关定义的信息如下: [ ...

  10. iptables的增删改查

    iptables是linux系统自带的防火墙,功能强大,学习起来需要一段时间,下面是一些习iptables的时候的记录.如果iptables不熟悉的话可以用apf,是一款基于iptables的防火墙, ...