docker 通过namespace实现资源隔离
docker 通过namespace实现资源隔离
Docker主要就是借助 Linux 内核技术Namespace来做到隔离的,Linux Namespaces机制提供一种资源隔离方案。
PID,IPC,Network等系统资源不再是全局性的,而是属于某个特定的Namespace。每个namespace下的资源对于其他namespace下的资源都是透明,不可见的。因此在操作系统层面上看,就会出现多个相同pid的进程。系统中可以同时存在两个进程号为0,1,2的进程,由于属于不同的namespace,所以它们之间并不冲突。而在用户层面上只能看到属于用户自己namespace下的资源,例如使用ps命令只能列出自己namespace下的进程。这样每个namespace看上去就像一个单独的Linux系统。
1.1 进程隔离
启动一个redis容器,启动后我们在宿主机看到的pid是62769
然后进入容器执行top,可以发现pid是1
docker exec -it dockcer-compose_redis_1 /bin/sh
由此,我们可以知道docker run命令启动的只是一个进程,它的pid是4677。而对于容器程序本身来说,它被隔离了,在容器内部都只能看到自己内部的进程。Docker是借助了Linux内核的Namespace技术来实现的。