白话容器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技术用来进行做进程间的隔 ...
随机推荐
- Python 离线等价类
离线等价类的概念见离线等价类 最近在清洗数据的时候涉及到要将相似度比较高的文件夹合并,特征比对得到是1:1的对,比如: (a,b),(c,d),(a,c)...,那么合并的时候就涉及到将这些等价的对合 ...
- C++ 函数部分(2)
C++函数的递归调用 函数可以直接或间接地调用自身,称为递归调用.所谓直接调用自身,就是指在一个函数的函数体中出现了对自身的调用表达式,例如: void fun1(void) { //do somet ...
- Cg入门23: Fragment shader – UV动画(序列帧)
让动画从1-9循环播放此纹理 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkF ...
- shell脚本常用(记)
1.变量检查,判空 a.直接变量判断 if [ ! $1 ];then ..empty..fi b.变量通过" "引号引起来 if [ ! -n "$1" ...
- android 改变状态栏(StatusBar)颜色
public static void changeColor(Activity paramActivity, int paramInt1) { if (Build.VERSION.SDK_INT &g ...
- 【转】Java并发编程:Synchronized及其实现原理
一.Synchronized的基本使用 Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法.Synchronized的作用主要有三个:(1)确保线程互斥的访问同步 ...
- UITabBarController简单介绍
一.简单介绍 UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例 ...
- Identity 更改密码的几种方式
1.先使用UserManager.RemovePassword(UserID),清空密码,再使用UserMnager.AddPassword(UserId,newPassword)增加新密码. [Ht ...
- 在使用react时的异步问题解决
在时用react时, 常常会出现在创建一个对象后, 对象还没有创建完成就被使用的异步问题, 介于这种问题, 一种解决方法就是使用Promise, 将需要被等待的那一步放到Promise中, Promi ...
- JavaScript 算法与数据结构(转载)
JavaScript 算法与数据结构 https://github.com/trekhleb/javascript-algorithms/blob/master/README.zh-CN.md