当我们使用Docker时,想要进入容器就会使用下面的命令:
$ docker run -it busybox /bash/sh
- -it参数表示需要Dokcer项目给我们分配一个文本输入/输出的环境;
- /bash/sh即我们需要在Docker容器中要运行的程序。
进入容器后,通过查看进程可以发现
/ # ps
PID USER TIME COMMAND
1 root 0:00 /bin/sh
10 root 0:00 ps
在Docker的容器里面第一个进程就是/bin/sh,而第二个进程也是我们刚刚运行的进程ps,这就像是在Docker容器中有了隔离,,一个完全不同的世界。
原理解释
当我们在宿主机上运行一个/bin/sh程序的时候,操作系统都会给它分配一个进程编号,PID=10.这个编号就是进程的唯一编号。而我们通过Docker把这个程序运行在容器之中的时候,Docker就会将进行隔离,理解为程序自己认为只有自己一个进程,无法查看其他的进程。
这种隔离其实就是对隔离的应用的进程空间做了手脚,使得这些进程只能看到重新计算过的进程编号。这个技术就是Linux里面的Namespace机制。
产生PID 的clone方法:
i