区别:1、传统虚拟化的创建速度很慢,而容器虚拟化创建速度很快;2、传统虚拟化增加了系统调节链的环节有性能损耗,而容器虚拟化共性内核,几乎没有性能损耗;3、传统虚拟化支持多种操作系统,而容器虚拟化仅支持内核所支持的操作系统。
本教程操作环境:linux7.3系统、docker-1.13.1版、Dell G3电脑。
传统的虚拟化技术
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
随着硬件厂商的不断发展,很多在虚拟机里面的指令不需要通过虚拟的硬件层走到真正的硬件层.硬件厂商是支持直接在虚拟机里面实用指令操作硬件,这个技术我们就称为是硬件辅助的虚拟化.这种硬件的辅助虚拟化比起软件虚拟的硬件层来说,他不需要模拟所有的硬件.有些指令是直接运行在虚拟机上来操作硬件的.性能和效率比传统的虚拟化高更高些.
系统级别的虚拟化
特点:
不需要模拟硬件层.
共享同一个宿主机的内核
传统虚拟化和容器虚拟化的区别
Container的核心技术
1.CGroup限制容器的资源使用
2.Namespace机制,实现容器间的隔离
3.chroot,文件系统的隔离.
CGroup:
Linux内核提供的限制,记录和隔离进程组所使用的资源.由Google的工程师提出,后台被整合到内核中.通过不同的子系统来实现对不同资源使用的控制和记录.
/sys/fs/cgroup
Namespace:
pid:容器有自己独立的进程表和1号线程.
net:容器有自己独立的network info
ipc:在ipc通信的时候,需要加入额外信息来标示进程
mnt:每个容器都有自己唯一的目录挂载
utc:每个容器都有独立的hostname和domain
chroot:
在宿主机中的某个目录就是容器中的根目录.
所有的应用程序都有自己的依赖关系,其中包括软件和硬件资源。 Docker是开发者的开放平台,通过将每个应用程序打包到容器中来隔离依赖关系。容器就像是轻量级的虚拟机,可以扩展到成千上万的节点,通过在不同虚拟环境中运行相同应用程序来帮助提升云的可移植性。虚拟机广泛用于云计算,通过使用虚拟机来实现隔离和资源控制。 虚拟机使用自己的内存管理加载完整的操作系统,使应用程序更加高效和安全,同时确保其高可用性。
Docker容器与虚拟机有什么不同?
虚拟机具有完整的操作系统,其自身的内存管理通过相关的虚拟设备进行支持。 在虚拟机中,为用户操作系统和虚拟机管理程序分配有效的资源,从而可以在单台计算机(或主机)上并行运行一个或多个操作系统的多个实例。 每个客户操作系统都作为主机系统中的单个实体运行。
另一方面,Docker容器是使用Docker引擎而不是管理程序来执行的。 因此容器比虚拟机小,并且由于主机内核的共享,可以更快地启动,具有更好的性能,更少的隔离和更好的兼容性。 Docker容器能够共享一个内核并共享应用程序库,因此容器比虚拟机具有更低的系统开销,只要用户愿意使用单一平台来提供共享的操作系统,容器可以更快,更少资源。虚拟机可能需要几分钟才能创建并启动,而只需几秒钟即可创建并启动一个容器。与在虚拟机中运行应用程序相比,容器中包含的应用程序提供了卓越的性能。
Docker容器比虚拟机弱的一个关键指标就是“隔离”。英特尔的VT-d和VT-x技术为虚拟机提供了ring-1硬件隔离技术,因此虚拟机可以充分利用它的优势。它可以帮助虚拟机器高效使用资源和防止相互干扰。 Docker容器还没有任何形式的硬件隔离,因此它们容易受到攻击。
如何进行进行选择?
选择容器还是虚拟机依赖于应用程序如何设计。 如果应用程序旨在提供可伸缩性和高可用性,那么容器是最好的选择,否则应用程序可以放置在虚拟机中。对于高I/O要求的业务,例如数据库服务,建议部署Docker+物理机,因为在虚拟机中部署Docker,I/O性能将受到虚拟机的限制。对于虚拟桌面服务等强调租户权限和安全的业务,建议采用虚拟机方式,虚拟机的多租户强隔离特性,保证租户在拥有虚机root权限的同时,其他租户和主机的安全。
或者更好的选择是混合方案,运行在虚拟机中的容器。 Docker容器可以在虚拟机内部运行,虚拟机并为它们提供经过验证的隔离,安全属性,移动性,动态虚拟网络等。为实现安全隔离和资源的高利用率,基本应该遵循:不同租户的业务运行采用虚拟机隔离,相似类型的业务部署在同一组容器上的思路。
结论
Docker容器正在成为DevOps环境中的一个重要工具。 DevOps领域内的Docker Containers的用例非常多。在Docker容器上运行应用程序,然后在任何地方部署(Cloud或内部部署或任何Linux的风格)现在都已成为现实。
在异构环境中工作,虚拟机提供了高度的灵活性,而Docker容器主要关注应用程序及其依赖关系。Docker Containers允许通过使用每个云的虚拟机环境来处理云,从而轻松移植跨云的应用程序堆栈。这代表了一个有用的功能,在没有Docker Containers的情况下,必须以更加复杂和乏味的方式来实现。这里阐述的并不是关于放弃虚拟机,而是在必要时除了虚拟机之外,根据实际情况使用Docker容器,不认为Docker容器可以完全清除虚拟机。
推荐学习:《docker视频教程》
以上是docker容器与传统虚拟化的区别是什么的详细内容。更多信息请关注PHP中文网其他相关文章!