白话容器namespace
进入正题之前是例行装X环节:


过年7天吃的,花了45天又回来了。
近年来容器大火,也正是因为容器,生生灭掉了一个IT岗位!哥也是被生生的逼上了邪路。
那究竟什么是容器呢?
就三个字:它就是个进程!(多了算赠送的)
所以以后再有人问你用docker会不会损耗性能什么的,你就跟他说几乎没有或者就是没有!他要问为什么?你咋那么确定?你就告诉他是波哥说的。但是挨打了啥的别怨我就行,反正到时候我不承认。
正常情况下docker极限情况下是5%左右的损耗,虚拟机极限情况大概15%至30%的损耗,咱们是相对于纯物理机来讲的。当然这个不是绝对值,也要取决于我们创建docker的网络和存储方式,别犟奥!再犟打你。相关性能分析以后我会专门做个试验来阐述。
其实为什么敢这么说呢?因为我们只要剖析一下他的底层实现原理就明白了。这个就是我们今天要聊得话题。
容器的如何被封装的隔离的呢?1分钟就能说明白!
尽量不学术奥,要不太XX枯燥,看着都烦!
这句划重点:linux咋创建的进程,就咋创建的docker。
作为系统它不管你是啥,他都用统一的方式进行管理。
举个栗子:
你就是个单身狗:你去婚介找对象,人家就说了为了方便统计信息,我们都是按规定写上六个条件:身份证号,用户名,现住址,存款,电话,家庭成员。
你要想找对象,那么就得按这个格式写上你的信息。婚介有了这个信息后就可以帮你找你合适的人选啦。
这里操作系统就是个婚介所,身份证对应每个进程的PID(进程编号)号(他的孩子叫PPID),用户名对应UTS(主机名和域名),存款对应IPC(信号量,内存等),现住址对应mount(文件系统挂载点),电话对应network(网络设备),家庭成员对应user(用户和用户组)。
具体名词是这样审的:

一个人就是一个进程,每个人有六项信息,同样每个进程会有六项固定信息。
这每一项信息呢,就是咱们所谓的namespace啦。中介如何判断你俩是否有戏呢?也就是说在系统中如何判断两个进程的某项namespace是否相同呢?
看他们的namespace号,就是这样婶的:
PID为1的namespace:

PID为2的namespace:

看到没,他俩后边那个号有个一样的。那么他俩那个选项就是在同一个namespace中。(我不知道奥,瞎说的,实在没时间细细的截图,反正就类似吧)
所以他们既可以namespace都一样,也可以某项在一起,也可以完全不一样。
如果他们的六个空间号都相同呢?那一定是两口子,要是为了家庭和睦呢就不能起争执,所以他们的特点最好就是不一样,也就是不同的应用,比如一个tomcat,一个mysql。这样样他俩不打架!而且沟通还无障碍!
那么如果都不一样呢?
都不一样就互相看不见对方。老死不相往来的那种,谁也不能影响谁。(一个容器跑一个独立应用,这就是一个宿主机跑100个独立容器,但是他们互不干扰的原理,而且他们在自己的容器中都认为自己是老大哦,所以他们的PID都是1)
我们通常会怎么用namespace呢?
通常我们会遇到两个docker需要相互通信,非常简单,那就让他们管网络namespace相同就好了。他们就能互相看见对方啦。具体操作可以看docker-compose里面的相应参数。
总结来说docker就是一个进程,它们的相关信息被切成了6块,分别存放。如果不想让他们认识,那么就用独立的六个盒子装,反向亦可!
超级简单对不对?就酱~
容器确实被切成6块封印起来了。它肯定是不会乱跑了。但是他会乖乖的接受我们的控制嘛?他要是忽然把一个盒子撑爆可咋办?
那么下次我们再聊聊如果限制这些已经被封印的容器!
神奇的cgroup!~
PS:大家可以关注我的公众号获取更多的项目代码和讲解!
波神与你同行哦,加油!!!

白话容器namespace的更多相关文章
- Linux namespace技术应用实践--调用宿主机命令(tcpdump/ip/ps/top)检查docker容器网络、进程状态
背景 最近偶然听了几堂极客时间的云原生免费公开课程,首次接触到了Linux namespace技术,并了解到这正是现在风头正劲的容器技术基石,引起了自己探究一二的兴趣,结合课程+网络搜索+实践操作,也 ...
- 【Networking】容器网络大观 && SDN 资料汇总
SDNLAB技术分享(十五):容器网络大观 SDNLAB君• 16-06-17 •2957 人围观 编者按:本文系SDNLAB技术分享系列,本次分享来自SDN撕X群(群主:大猫猫)群直播,我们希望 ...
- Docker底层基石namespace与cgroup
Docker底层基石namespace与cgroup 容器本质上是把系统中为同一个业务目标服务的相关进程合成一组,放在一个叫做namespace的空间中,同一个namespace中的进程能够互相通 ...
- [docker]docker的四种网络方式
声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! bridge方式(默认) H ...
- 深入剖析Kubernetes学习笔记:开篇词(00)
一.关于Kubernetes初学的疑惑 就在这场因"容器"而起的技术变革中,kubernetes项目已经成为容器技术的事实标准,重新定义了基础设置领域对应用编排与管理的种种可能 1 ...
- 写在19年初的后端社招面试经历(两年经验): 蚂蚁 头条 PingCAP
去年(18年)年底想出来看看机会,最后很幸运地拿到了 PingCAP,今日头条的 offer 以及蚂蚁金服的口头 offer.想着可以总结一下经验,分享一下自己这一段"骑驴找马"过 ...
- 深入剖析Kubernetes k8s
深入剖析Kubernetes k8s 毫无疑问,Kubernetes 已经成为容器领域当之无愧的事实标准.除了 Google.Microsoft 等技术巨擘们在容器领域里多年的博弈外,国内的 BAT. ...
- 如何掌握 Kubernetes ?系统学习 k8s 的大纲一份
深度剖析 Kubernetes 深度剖析 k8s 如何学习 Kubernetes ?如何入门 Kubernetes? 为了帮帮初学者,2018 年 InfoQ 旗下(就是你知道的那个 InfoQ 哇) ...
- LXC、LXD、Docker的区别与联系(by quqi99)
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 容器 namespace技术用来进行做进程间的隔 ...
随机推荐
- 像感冒一样的contains error
转自 http://blog.csdn.net/zhufuing/article/details/8135270 Android开发中的问题总是多种多样,今天我来总结一个浪费了我一个 ...
- java语法基础(四)
继承 继承概述 继承是面向对象语言的三大基本特性(封装,继承,多态)之一. 一个类可以继承另外一个类,继承的类称为子类(也可以叫派生类),被继承的类称为父类(或者也叫基类,超类). 通过继承,子类可以 ...
- Package vim is not available, but is referred to by another package及我的vim配置
新安装的ubuntu,先安装vim,但是安装出现 Reading package lists... Done Building dependency tree Reading state inform ...
- 安装linux各种桌面环境
1.安装kde ①添加 KDE SC 4.11 库 打开一个终端窗口,在终端窗口中输入如下命令: sudo add-apt-repository ppa:kubuntu-ppa/backports 回 ...
- How to check HTML version of any website
http://howtocheckversion.com/check-html-version-website/ Check HTML version via W3C W3 Consortium ha ...
- Iterator 使用
Configuration cfg = new Configuration().configure(); SessionFactory factory = cfg.buildSessionFactor ...
- Avoiding memory leaks
Android applications are, at least on the T-Mobile G1, limited to 16 MB of heap. It's both a lot of ...
- 服务器mysql授权连接用户
以下是创建到写入到删除,到drop的全部的过程: //1:创建数据库 create database it1110; //2:进入这个数据库 Use it1110; //3:创建一个数据表 Creat ...
- IJ:IntelliJ IDEA安装
ylbtech-IJ:IntelliJ IDEA安装 响应速度快 1.返回顶部 1. 2. 3. 4. 5. 6. 7. 2. 接受协议,激活IJ返回顶部 1. 2. 3. 4. 5. 6.0. 6. ...
- UI:网络请求
JSON 外层是一个数组或者字典 富文本(相对来说比较安全).超文本,https安全超文本协议 NSURL NSURL *url = [[NSURL alloc]initWithString:@&qu ...