首頁  >  文章  >  運維  >  docker運行在實體機器還是虛擬機器上

docker運行在實體機器還是虛擬機器上

WBOY
WBOY原創
2022-06-27 11:12:046183瀏覽

docker既可以運作在實體機上也可以運作在虛擬機上;無論是虛擬機還是實體機,都是硬體和基礎設施的一種交付方式,本質上是一個層次的,而容器主要用於解決以軟體為中心的系列問題,在虛擬機器和實體機運行容器都是可行的。

docker運行在實體機器還是虛擬機器上

本教學操作環境:linux7.3系統、docker19.03版、Dell G3電腦。

docker運行在實體機或虛擬機器上

docker容器在虛擬機器或實體機上運行都可以

##無論是虛擬機器還是物理機,都是硬體/基礎設施的一種交付方式,本質上是一個層次的;而容器主要要解決以軟體為中心的系列問題

嚴格來講,容器和虛擬機並不是一個層次的東西,它就是軟體環境的打包集合。

在虛擬機器中運行容器,已經成為一種實踐中的慣例,例如,AWS的container服務就是只運行在虛擬機器中的。

Docker守護程式可以直接與主作業系統進行通信,為各個Docker容器分配資源;它還可以將容器與主作業系統隔離,並將各個容器互相隔離。 Docker通常用於隔離不同的應用,例如前端,後端以及資料庫。

擴充知識:

Docker守護程式可以直接與主作業系統進行通信,為各個Docker容器分配資源;它還可以將容器與主作業系統隔離,並將各個容器互相隔離。 Docker通常用於隔離不同的應用,例如前端,後端以及資料庫。

Docker有著小巧、遷移部署快速、運行高效等特點,但隔離性比伺服器虛擬化差:不同的貨櫃屬於不同的運單(Docker上運行不同的應用實例),相互獨立(隔離) 。但由同一個庫管人員管理(主機作業系統內核),因此透過庫管人員可以看到所有貨櫃的相關資訊(因為共享作業系統內核,因此相關資訊會共用)。

虛擬機器更擅長徹底隔離整個運作環境。例如,雲端服務商通常會採用虛擬機器技術隔離不同的使用者。虛擬機器啟動需要數分鐘,而Docker容器可以在數毫秒內啟動。由於沒有臃腫的作業系統,Docker可以節省大量的磁碟空間以及其他系統資源。

伺服器虛擬化就好比在碼頭上(實體主機及虛擬化層),建立了多個獨立的「小碼頭」—倉庫(虛擬機器)。其擁有完全獨立(隔離)的空間,屬於不同的客戶(虛擬機器所有者)。每個倉庫有各自的庫管人員(目前虛擬機器的作業系統核心),無法管理其它倉庫。不存在資訊共享的情況。

因此,我們需要根據不同的應用場景和需求採用不同的方式,使用Docker技術或使用伺服器虛擬化技術。

docker與虛擬機器實作原理比較

如下圖分別是虛擬機器與docker的實作框架。

docker運行在實體機器還是虛擬機器上

比較兩圖的差異,左圖虛擬機的Guest OS層和Hypervisor層在docker中被Docker Engine層所取代。虛擬機器的Guest OS即為虛擬機器安裝的作業系統,它是一個完整作業系統核心;虛擬機器的Hypervisor層可以簡單理解為一個硬體虛擬化平台,它在Host OS是以核心態的驅動存在的。

虛擬機器實現資源隔離的方法是利用獨立的OS,並利用Hypervisor虛擬化CPU、記憶體、IO設備等實現的。例如,為了虛擬CPU,Hypervisor會為每個虛擬的CPU建立一個資料結構,模擬CPU的全部暫存器的值,在適當的時候追蹤並修改這些值。需要指出的是在大多數情況下,虛擬機器軟體程式碼是直接跑在硬體上的,而不需要Hypervisor介入。只有在一些權限高的請求下,Guest OS需要執行內核態修改CPU的暫存器數據,Hypervisor會介入,修改並維護虛擬的CPU狀態。

Hypervisor虛擬化記憶體的方法是建立一個shadow page table。在正常的情況下,一個page table可以用來實現從虛擬記憶體到實體記憶體的翻譯。在虛擬化的情況下,由於所謂的實體記憶體仍然是虛擬的,因此shadow page table就要做到:虛擬記憶體->虛擬的實體記憶體->真正的實體記憶體。

對於IO設備虛擬化,當Hypervisor接到page fault,並發現實際上虛擬的物理內存地址對應的是一個I/O設備,Hypervisor就用軟體模擬這個設備的工作情況,並返回。例如當CPU想要寫磁碟時,Hypervisor就把對應的資料寫到一個host OS的檔案上,這個檔案其實模擬了虛擬的磁碟。

比較虛擬機器實現資源和環境隔離的方案,docker就顯得簡練很多。 docker Engine可以簡單看成Linux的NameSpace、Cgroup、映像管理檔案系統操作的封裝。 docker並沒有像虛擬機器一樣利用一個完全獨立的Guest OS實現環境隔離,它利用的是目前linux核心本身支援的容器方式來實現資源和環境隔離。簡單的說,docker利用namespace實現系統環境的隔離;利用Cgroup實現資源限制;利用映像實現根目錄環境的隔離。

推薦學習:《docker影片教學

以上是docker運行在實體機器還是虛擬機器上的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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