一、关于docker的隔离,有很多文章都有介绍。但docker没有隔离什么呢?

           SELinux、 Cgroups以及/sys、/proc/sys、/dev/sd*等目录下的资源是与宿主机共用的,而且多个container与宿主机共用同一个内核。所以说docker是弱隔离,他没有隔离的那么彻底,但如果要隔离的彻底那就是VM了,而且如果dockers要想实现这些隔离就必然要牺牲一下现在轻量级的特性。


二、以下是我对docker的隔离性的理解

       docker 通过什么实现隔离呢?通过内核的namespace,包括进程、网络、进程间通信信号、文件系统、用户等,不同的docker使用不同的namespace.

     1、进程的namespace, docker container里运行的进程的父进程是这个docker container的进程。这样不同的container 之间进程就被隔离开了。

     2、网络的namespace ,每个container 都有自己的虚拟网络设备,IP地址,路由。

     3、进程间交互的namespace,每个container 内的进程可以实现进程进的信号、共享内存、消息队列的交互

     4、mnt的namespace ,不同的namespacer进程看到的文件结构是不同的

     5、UTS 的namespace ,不同的container 可以有自己的hostname和domainame

     6、用户的namespae,每个container可以有自己的用户和用户分组