docker 容器本质:
-
容器其实就是Linux下一个特殊的进程;
-
Docker容器通过namespace实现进程隔离通过cgroups实现资源限制;
-
Docker镜像(rootfs)是一个操作系统的所有文件和目录而不包括内核,Docker镜像是共享宿主机的内核的;
-
Docker镜像是以只读方式挂载,所有的增删改都只会作用在容器层, 但是相同的文件会覆盖掉下一层,这种方式也被称为"Copy-on-write";
使用Namespace进行容器的隔离有什么缺点呢?
最大的缺点就是隔离不彻底
-
容器知识运行在宿主机上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作系统内核
-
在Linux内核中,有很多资源和对象是不能被Namespace化的,最典型的例子是:时间即如果某个容器修改了时间,那整个宿主机的时间都会随之修改
-
容器给应用暴露出来的攻击面比较大,在生产环境中,没有人敢把运行在物理机上的Linux容器暴露在公网上
linux 内核的namespace机制
- namespace 机制提供一种资源隔离方案。
- PID,IPC,Network 等系统资源不再是全局性的,而是属于某个特定的Namespace。
- 每个 namespace下的资源对于其他的 namespace下的资源是透明的,不可见的