虚拟机 与 Docker容器




一、Docker 与 Hypervisor


在这里插入图片描述


Docker 并不像 Hypervisor 那样对应用进程的隔离环境负责,也不会创建任何实体的“容器”,
真正对隔离环境负责的还是宿主机操作系统本身。

Docker 项目在这里扮演的角色,更多的是旁路式的辅助和管理工作。




二、Docker 容器明显优势:敏捷 和 高性能


1、使用虚拟化技术作为应用沙盒,就必须要由 Hypervisor 来负责创建一个真实存在的虚拟机,
它里面必须运行一个完整的 Guest OS 才能执行用户的应用进程。

这会带来额外资源消耗:
虚拟机本身占用 100~200 MB 内存;
用户应用运行在虚拟机里面,它对宿主机操作系统的调用要经过虚拟化软件的拦截和处理,存在性能损耗;
对计算资源、网络和磁盘 I/O 的损耗大。


2、容器化后的用户应用依然还是一个宿主机上的普通进程,这意味着因为虚拟化而带来的性能损耗,对容器来说是不存在的;
使用 Namespace 作为隔离手段的容器并不需要单独的 Guest OS,这就使得容器额外的资源占用几乎可以忽略不计。




三、Docker 容器明显劣势: 隔离得不彻底


1、容器只是运行在宿主机上的一种特殊的进程,多个容器共享宿主机的操作系统内核。

共享宿主机内核意味着:
如果要在 Windows 宿主机上运行 Linux 容器,或者在低版本的 Linux 宿主机上运行高版本 Linux 容器,都是行不通的。
而相比之下,拥有硬件虚拟化技术和独立 Guest OS 的虚拟机就要方便得多了。


2、在 Linux 内核中,有很多资源和对象是不能被 Namespace 化的

比如:时间。
如果容器中的某个程序使用 settimeofday(2) 系统调用修改了时间,那么整个宿主机的时间都会被随之修改,




由于上述问题的存在,导致容器给应用暴露出来的攻击面是相当大的。

虽然使用 Seccomp 等技术可以对容器内部发起的所有系统调用进行过滤来进行安全加固,但多的这层对系统调用的过滤对性能是有损的。
而且默认情况下,到底该开启哪些系统调用禁止哪些系统调用,这是个问题。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章