进入正题之前是例行装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的更多相关文章

  1. Linux namespace技术应用实践--调用宿主机命令(tcpdump/ip/ps/top)检查docker容器网络、进程状态

    背景 最近偶然听了几堂极客时间的云原生免费公开课程,首次接触到了Linux namespace技术,并了解到这正是现在风头正劲的容器技术基石,引起了自己探究一二的兴趣,结合课程+网络搜索+实践操作,也 ...

  2. 【Networking】容器网络大观 && SDN 资料汇总

    SDNLAB技术分享(十五):容器网络大观   SDNLAB君• 16-06-17 •2957 人围观 编者按:本文系SDNLAB技术分享系列,本次分享来自SDN撕X群(群主:大猫猫)群直播,我们希望 ...

  3. Docker底层基石namespace与cgroup

    Docker底层基石namespace与cgroup   容器本质上是把系统中为同一个业务目标服务的相关进程合成一组,放在一个叫做namespace的空间中,同一个namespace中的进程能够互相通 ...

  4. [docker]docker的四种网络方式

    声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! bridge方式(默认) H ...

  5. 深入剖析Kubernetes学习笔记:开篇词(00)

    一.关于Kubernetes初学的疑惑 就在这场因"容器"而起的技术变革中,kubernetes项目已经成为容器技术的事实标准,重新定义了基础设置领域对应用编排与管理的种种可能 1 ...

  6. 写在19年初的后端社招面试经历(两年经验): 蚂蚁 头条 PingCAP

    去年(18年)年底想出来看看机会,最后很幸运地拿到了 PingCAP,今日头条的 offer 以及蚂蚁金服的口头 offer.想着可以总结一下经验,分享一下自己这一段"骑驴找马"过 ...

  7. 深入剖析Kubernetes k8s

    深入剖析Kubernetes k8s 毫无疑问,Kubernetes 已经成为容器领域当之无愧的事实标准.除了 Google.Microsoft 等技术巨擘们在容器领域里多年的博弈外,国内的 BAT. ...

  8. 如何掌握 Kubernetes ?系统学习 k8s 的大纲一份

    深度剖析 Kubernetes 深度剖析 k8s 如何学习 Kubernetes ?如何入门 Kubernetes? 为了帮帮初学者,2018 年 InfoQ 旗下(就是你知道的那个 InfoQ 哇) ...

  9. LXC、LXD、Docker的区别与联系(by quqi99)

    版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 容器 namespace技术用来进行做进程间的隔 ...

随机推荐

  1. 有关java构造器的笔记

    当程序中首次出现使用一个类A时, 无论是使用A的静态成员还是创建一个对象(声明一个A类对象不算), 那么类加载器就会首先对A进行加载, 在对A进行加载的过程中, 如果A有一个extends的父类B, ...

  2. 【HDOJ 3652】B-number

    [HDOJ 3652]B-number 给一整数n 找<=n的整数中能被13整除且含有13的 数位dp 记忆化! . 一入记忆化深似海. ..再也不想用递推了...发现真的非常好想 仅仅要保证满 ...

  3. vue入门教程 (vueJS2.X)

    vue入门教程vueJS2.X 写在前面 看完此教程可以达到:能看懂并能修改简单的vue项目. 看的过程中,请把所有例子都放到html文件中跑一遍. Vue.js 是什么 Vue.js(读音 /vju ...

  4. 请说出作用域public,private,protected,以及不写时的区别

    这四个作用域的可见范围如下表所示. 说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly. 作用域    当前类 同一package 子孙类 其他package public    ...

  5. c# 字节高低位

    byte n = br.ReadByte(); ; // 高位 var l = n & 0x0f; // 低位

  6. YTU 2556: 空洞

    2556: 空洞 时间限制: 1 Sec  内存限制: 128 MB 提交: 24  解决: 17 题目描述 春天来了,单身的霞姐越发地空虚寂寞,于是她想到一个办法,她认 为只要把英文字母上的洞都涂满 ...

  7. silverlight DataGrid 显示篇

    silverlight DataGrid 显示篇 分类: Silverlight2012-05-12 21:55 693人阅读 评论(0) 收藏 举报 datagridsilverlightbindi ...

  8. 深入探析c# Socket

    最近浏览了几篇有关Socket发送消息的文章,发现大家对Socket Send方法理解有所偏差,现将自己在开发过程中对Socket的领悟写出来,以供大家参考. (一)架构 基于TCP协议的Socket ...

  9. Recovery启动流程(1)--- 应用层到开机进入recovery详解

    转载请注明来源:cuixiaolei的技术博客 进入recovery有两种方式,一种是通过组合键进入recovery,另一种是上层应用设置中执行安装/重置/清除缓存等操作进行recovery.这篇文档 ...

  10. openfire重新配置数据库oracle、mysql

    1.openfire重新配置设置: 删除target/openfire/conf/openfire.xml中的 <setup>true</setup> 2.删除浏览器之前访问过 ...