命名空间:
我看到的命名空间是,每个容器都可以拥有自己单独的命名空间,运行在其中的应用都像是在独立的
操作系统中运行一样。命名空间保证了容器之间互不影响。
命名空间分为:
1,进程命名空间
2,网络命名空间
3,IPC命名空间
4,挂载命名空间
5,UTS命名空间
6,用户命名空间
说那么多都是书上的东西,只是自己看到的,上面的六个命名空间,我想弄明白进程命名空间,想了解
网络命名空间和用户命名空间,其他的几个就算了,所以下面主要记一下进程命名空间(还好linux学过了进
程那一章,嘿嘿)。
进程命名空间:
linux通过命名空间管理进程号,对于同一进程(task_struct),在不同的命名空间中,看到的进程号是
不同的,每个进程命名空间有一套自己的进程号管理方法。进程命名空间是一个父子关系的结构,子空间中
的进程对于父空间是可见的。新fork出的进程在父命名空间和子命名空间将分别有一个进程号来对应。
-------------------------------------------------------------------
让我来自己理解一下上面的那段话。
学过linux知道,linux里面其实并没有着重线程的概念,换句话说,把线程当作进程来对待。然后呢,还
知道linux中管理进程的方法是用一个进程控制块,叫做PCB。每个进程对应自己的一个PCB。
明确了上面的这个概念,就可以知道,docker再怎么虚拟化,总该还是一个进程就是一个PCB吧,这一
点应该是不变的。
然后一句句的理解一下上面的那几句话,以前学的linux进程中,每一个进程有自己独有的一个pid,也就
是进程号,这个号是独有的。然而上面关于进程命名空间的那段话说的是,一个进程可以有很多个pid,在不
同的命名空间中,看到的同一进程的pid是不同的。嗯,就是这么个意思。【对于同一进程(task_struct),
在不同的命名空间中,看到的进程号是不同的。】
那么第一句话呢,【linux通过命名空间来管理进程号】,这句话怎么理解呢。暂时先放着。
【进程命名空间是一个父子关系的结构,子空间中的进程对于父空间是可见的。】这句话的意思就比较明
显了,说的就是进程命名空间是一个父子关系结构,父子关系结构就是说,一个父进程命名空间可以有很多个
子进程命名空间,而一个子进程命名空间只能有一个父进程命名空间。而且,父进程命名空间可以看到自己所
有子进程命名空间中的所有进程。相反,子空间看不到父空间中的进程,这个就像我爸知道我有多钱,而我并
不知道我爸有多前。(注:这里JAVA中的继承是不同的,不同的,不同的。)
【新fock出来的进程在父命名空间和子命名空间将分别有一个进程号来对应。】这句话没啥好说的。
-------------------------------------------------------------------
关说不练假把式,程序猿就是要去实践,毛主席说的好,实践才是检验真理唯一的标准。(并不确定是不
是毛主席说的。 = =)
下面是我关于进程命名空间实践的截图和解说:
1、进入root下,第一行启动docker服务,命令是:service docker start
2、第二行显示docker已经启动,进程号是2937
3、第三行是查看docker服务中的镜像们,命令是docker images,我只截图了三个镜像,分别是:含有
apache服务的Ubuntu,含有sshd的Ubuntu,含有mysql的Ubuntu,并没有截图出来它是多大。
1、eixt退出docker服务。
2、退出后用ps命令查看docker进程,,可以看到第一个docker进程的进程号是2937,跟上面的一样。
3、下面的一行是上面的那个ps命令,因为那个命令里面有个docker字符,所以也就grep出来了。
1、启动一个docker容器,所用的镜像名字是62,62就是那个含有apache的Ubuntu镜像,-d的意思是以守护态运行。
2、启动Ubuntu中bin目录下的sh命令,参数是-c ,程序是, while条件为真时,输出hello world ,睡眠一秒,结束。
3、新建的容器名字是018e9bc...
4、之后再查看进程 ,会发现第一行就是新建的那个容器,它的进程号是3873,他的父进程是2937,就是之前的docker主进程。
关于进程命名空间就先看这么多,说真的,看完真不知道这个有啥意思,感觉不到意义。知其然不知其所以然。
暂时这样吧,至于其他的几个命名空间就先不看了。累的很。
================================================
写这篇笔记的过程中悟到了这么几个东西:
根本没有进程这个东西,这个东西是抽象出来给人来想象的。真正跑在系统中的是PCB这个东西,这个东
西才是进程的实体,这个东西才是真正的进程。