Docker是如何实现隔离的
1、进程隔离
在容器内部都只能看到自己内部的进程,那 Docker 是如何做到的呢?它其实是借助了Linux内核的Namespace技术来实现的
CLONE_NEWPID会让执行的程序内部重新编号PID,也就是从1号进程开始
CLONE_NEWNS 会克隆新的挂载环境出来,通过在子进程内部重新挂载 proc文件夹,可以屏蔽父进程的进程信息。
在容器内部都只能看到自己内部的进程
这就是容器隔离进程的基本原理了,Docker主要就是借助 Linux 内核技术Namespace来做到隔离的,其实包括文件的隔离,资源的隔离都是在新的命名空间下通过mount挂载的方式来隔离的。
Docker 技术 完全是依赖 Linux 内核特性 Namespace 和Cgroup 技术来实现的,本质来说:你运行在容器的应用在宿主机来说还是一个普通的进程,还是直接由宿主机来调度的,相对来说,性能的损耗 就很少,这也是 Docker 技术的重要优势。
Docker容器是共用宿主机操作系统的,docker image里没有内核,只有shell。
/proc/[pid]/ns 目录下包含进程所属的 namespace 信息,使用以下命令可查看当前进程所属的 namespace 信息:
$ ll /proc/$$/ns
网友评论