Docker是如何实现隔离的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker是如何实现隔离的相关的知识,希望对你有一定的参考价值。

参考技术A 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

以上是关于Docker是如何实现隔离的的主要内容,如果未能解决你的问题,请参考以下文章

yarn 容器资源隔离和docker容器资源隔离实现原理

overlay 是如何隔离的?- 每天5分钟玩转 Docker 容器技术(53)

Docker 网络之pipework 工具单主机Docker容器VLAN划分

docker核心技术实现

如何在 Go 中使用 CGroup 实现进程内存控制

隔离 docker 容器中的用户