首頁 >運維 >Docker >docker容器與傳統虛擬化的差異是什麼

docker容器與傳統虛擬化的差異是什麼

WBOY
WBOY原創
2022-01-28 10:36:3011296瀏覽

区别:1、传统虚拟化的创建速度很慢,而容器虚拟化创建速度很快;2、传统虚拟化增加了系统调节链的环节有性能损耗,而容器虚拟化共性内核,几乎没有性能损耗;3、传统虚拟化支持多种操作系统,而容器虚拟化仅支持内核所支持的操作系统。

docker容器與傳統虛擬化的差異是什麼

本教程操作环境:linux7.3系统、docker-1.13.1版、Dell G3电脑。

docker容器与传统虚拟化的区别是什么

传统的虚拟化技术

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

随着硬件厂商的不断发展,很多在虚拟机里面的指令不需要通过虚拟的硬件层走到真正的硬件层.硬件厂商是支持直接在虚拟机里面实用指令操作硬件,这个技术我们就称为是硬件辅助的虚拟化.这种硬件的辅助虚拟化比起软件虚拟的硬件层来说,他不需要模拟所有的硬件.有些指令是直接运行在虚拟机上来操作硬件的.性能和效率比传统的虚拟化高更高些.

系统级别的虚拟化

特点:

不需要模拟硬件层.

共享同一个宿主机的内核

传统虚拟化和容器虚拟化的区别

docker容器與傳統虛擬化的差異是什麼

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn