前言

  命名空间是 Linux 内核一个强大的特性。每个容器都有自己单独的命名空间,运行在其中的 应用都像是在独立的操作系统中运行一样。命名空间保证了容器之间彼此互不影响。相应的命名空间功能如下:

pid 命名空间

不同用户的进程就是通过 pid 命名空间隔离开的,且不同命名空间中可以有相同 pid。所有的 LXC 进程在 Docker 中的父进程为Docker进程,每个 LXC 进程具有不同的命名空间。同时由 于允许嵌套,因此可以很方便的实现嵌套的 Docker 容器。

net 命名空间

有了 pid 命名空间, 每个命名空间中的 pid 能够相互隔离,但是网络端口还是共享 host 的端 口。网络隔离是通过 net 命名空间实现的, 每个 net 命名空间有独立的 网络设备, IP 地址, 路 由表, /proc/net 目录。这样每个容器的网络就能隔离开来。Docker 默认采用 veth 的方式,将 容器中的虚拟网卡同 host 上的一 个Docker 网桥 docker0 连接在一起。

ipc 命名空间

容器中进程交互还是采用了 Linux 常见的进程间交互方法(interprocess communication - IPC), 包括信号量、消息队列和共享内存等。然而同 VM 不同的是,容器的进程间交互实际上还是 host 上具有相同 pid 命名空间中的进程间交互,因此需要在 IPC 资源申请时加入命名空间信 息,每个 IPC 资源有一个唯一的 32 位 id。

mnt 命名空间

类似 chroot,将一个进程放到一个特定的目录执行。mnt 命名空间允许不同命名空间的进程 看到的文件结构不同,这样每个命名空间 中的进程所看到的文件目录就被隔离开了。同 chroot 不同,每个命名空间中的容器在 /proc/mounts 的信息只包含所在命名空间的 mount point。

uts 命名空间

UTS(“UNIX Time-sharing System”) 命名空间允许每个容器拥有独立的 hostname 和 domain name, 使其在网络上可以被视作一个独立的节点而非 主机上的一个进程。

user 命名空间

每个容器可以有不同的用户和组 id, 也就是说可以在容器内用容器内部的用户执行程序而非主 机上的用户

最新文章

  1. .NET core for docker
  2. Maven学习随笔一——Maven安装报错处理(mvn -v, 提示不是内部命令的问题)
  3. AutoCompleteTextView自动补全文本框
  4. 小实例窥探dotnet垃圾回收
  5. Compiler Theory(编译原理)、词法/语法/AST/中间代码优化在Webshell检测上的应用
  6. android 下的技巧
  7. 通过继承nsoperation的方法--处理复杂任务
  8. jQuery live与bind的区别
  9. js清空前后空格
  10. html基本基础
  11. Android 平滑图片加载和缓存库 Glide 使用详解
  12. oralce set
  13. win10 UWP 应用设置
  14. .Net小白的大学四年,内含面经
  15. offsetLeft、offsetX等
  16. Docker生态会重蹈Hadoop的覆辙吗?
  17. 爬了招聘网站之后,总结Python学习的几点建议
  18. [20190329]探究sql语句相关mutexes补充2.txt
  19. 字符编码ASCII,Unicode 和 UTF-8
  20. 【COGS2652】秘术「天文密葬法」(长链剖分,分数规划)

热门文章

  1. git之github推送篇
  2. 软件包查询-rpm查询常用命令
  3. 记一次买4K显示器的心酸历程
  4. $[NOIp2017]$ 宝藏 状压$dp$
  5. 「BZOJ1722」「Usaco2006 Mar」Milk Team Select产奶比赛 解题报告
  6. 调试排错 - Java问题排查:Linux命令
  7. SqlBulkCopy批量插入和索引的关系
  8. 单用户登陆demo-后者挤到前者,类似QQ
  9. C#反射与特性(七):自定义特性以及应用
  10. 【Java基础总结】网络编程