第1篇:Docker的 “隔离“ PK 虚拟机的“隔离“

问题1:Docker (敏捷+高性能)比 虚拟机受欢迎的原因:

linux用来实现容器隔离的手段是 NameSpace NameSpace实际上修改了应用进程看待宿主机的视图
应用进程的视线被操作系统 做了限制
应用进程仅仅能看到某些指定的内容
对于宿主机来说,被隔离的进程和其他的进程并没有区别

受欢迎主要的原因:

(1)虚拟化技术作为应用的沙盒,必须要由Hypervisor来负责创建虚拟机,这个虚拟机是真实存在的 这个虚拟机必须运行一个完整的操作系统才能执行用户的应用进程,这就不可避免了额外的资源的消耗和占用 ,一般 一个虚拟机启动后虚拟机自己就要占用100~200的内存 (一层损耗

用户运行在虚拟机里面,用户对操作系统的调用会不可避免的经过虚拟化软件的拦截和处理,又是一层损耗 (计算资源、网络、磁盘io 的损耗巨大) (二层损耗

(2)容器作为 应用的沙盒,依然是宿主机上的一个普通的进程
上述的两层损耗在容器技术上不存在
使用NameSpace作为隔离手段的容器并不需要单独的操作系统 使用容器额外的资源的占用几乎是可以忽略不计的

问题2:有些地方不能用Docker,必须用虚拟机

1)Docker相较于虚拟机的不足之处:隔离的不彻底
既然容器只是运行在宿主机上面的一种特殊(NameSpace)进程 多个容器之间使用的是一个宿主机的操作系统内核
虽然我们可以在容器里面通过 Mount NameSpace 单独挂载其他不同版本的操作系统文件 ,但是依旧不能改变共享主机内核的事实 

意味着一个问题
如果想在windows宿主机上运行linux容器,行不通
低版本的linux宿主机上运行高版本的linux容器,行不通
这个时候,硬件虚拟化技术的优势就显现出来了

(2)Docker相较于虚拟机的不足之处:Docker不能随便折腾,自由度低
         没有人敢把linux容器直接暴露在公网

 linux内核中,很多的资源和对象不能被NameSpace化  
 栗子:时间 
 如果你在容器的程序中使用settimeofday(2)系统调用修改了时间,整个的宿主机的时间也会随之的更改 
 容器不像虚拟机一样能 “随便折腾”
 在用Docker部署应用的时候,用户需要考虑 “什么能做,什么不能做”

 {Seccomp技术能在容器的内部发起  所有系统调用的过滤和甄别 来进行安全加固,但是从而带来了一系列的问题
 问题1:因为多了一层系统调用的过滤,容器性能会受拖累 
 问题2:程序的管理员并不清楚哪些系统调用应该开启 哪些应该禁用}

注释:文章为学习笔记,如有侵权行为,请及时联系原创

你可能感兴趣的:(Docker&K8S,docker,容器)