目錄
docker運行在實體機或虛擬機器上
首頁 運維 Docker docker運行在實體機器還是虛擬機器上

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

Jun 27, 2022 am 11:12 AM
docker

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP 分散式系統架構與實務 PHP 分散式系統架構與實務 May 04, 2024 am 10:33 AM

PHP分散式系統架構透過將不同元件分佈在網路互聯的機器上實現可擴充性、效能和容錯性。該架構包括應用程式伺服器、訊息佇列、資料庫、快取和負載平衡器。將PHP應用程式遷移到分散式架構的步驟包括:識別服務邊界選擇訊息佇列系統採用微服務框架部署到容器管理服務發現

Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node? Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node? Mar 05, 2025 pm 05:57 PM

PiNetwork節點詳解及安裝指南本文將詳細介紹PiNetwork生態系統中的關鍵角色——Pi節點,並提供安裝和配置的完整步驟。 Pi節點在PiNetwork區塊鏈測試網推出後,成為眾多先鋒積極參與測試的重要環節,為即將到來的主網發布做準備。如果您還不了解PiNetwork,請參考Pi幣是什麼?上市價格多少? Pi用途、挖礦及安全性分析。什麼是PiNetwork? PiNetwork項目始於2019年,擁有其專屬加密貨幣Pi幣。該項目旨在創建一個人人可參與

PHP 微服務容器化的敏捷開發與維 PHP 微服務容器化的敏捷開發與維 May 08, 2024 pm 02:21 PM

答案:PHP微服務採用HelmCharts部署進行敏捷開發,並使用DockerContainer容器化以實現隔離和可擴展性。詳細描述:使用HelmCharts自動​​部署PHP微服務,實現敏捷開發。 Docker映像允許對微服務進行快速迭代和版本控制。 DockerContainer標準隔離微服務,而Kubernetes負責管理容器的可用性和可擴充性。利用Prometheus和Grafana監控微服務效能和健康狀況,並創建警告和自動修復機制。

deepseek怎麼安裝 deepseek怎麼安裝 Feb 19, 2025 pm 05:48 PM

DeepSeek的安裝方法有多種,包括:從源碼編譯(適用於經驗豐富的開發者)使用預編譯包(適用於Windows用戶)使用Docker容器(最便捷,無需擔心兼容性)無論選擇哪種方法,請仔細閱讀官方文檔並充分準備,避免不必要的麻煩。

如何透過容器化來優化 Java 函數的效能? 如何透過容器化來優化 Java 函數的效能? Apr 29, 2024 pm 03:09 PM

容器化透過以下方式提升Java函數效能:資源隔離-確保隔離的運算環境,避免資源爭用。輕量級-佔用較少系統資源,提高運行時效能。快速啟動-減少函數執行延遲。一致性-解耦應用程式和基礎設施,保證跨環境一致的行為。

如何使用 PHP CI/CD 實現快速迭代? 如何使用 PHP CI/CD 實現快速迭代? May 08, 2024 pm 10:15 PM

答:利用PHPCI/CD實現快速迭代,包括設定CI/CD管道、自動化測試和部署流程。設定CI/CD管道:選擇CI/CD工具,配置程式碼儲存庫,定義建置管道。自動化測試:編寫單元和整合測試,使用測試框架簡化測試。實戰案例:使用TravisCI:安裝TravisCI,定義管道,啟用管道,查看結果。實現持續交付:選擇部署工具,定義部署管道,自動化部署。效益:提高開發效率、減少錯誤、縮短交貨時間。

使用Docker Container部署JavaEE應用程式 使用Docker Container部署JavaEE應用程式 Jun 05, 2024 pm 08:29 PM

使用Docker容器部署JavaEE應用程式:建立Dockerfile定義映像、建置映像、運行容器並映射端口,然後在瀏覽器中存取應用程式。範例JavaEE應用程式:RESTAPI與資料庫交互,透過Docker部署後可在localhost存取。

PHP 企業級應用微服務架構設計問答 PHP 企業級應用微服務架構設計問答 May 07, 2024 am 09:36 AM

微服務架構使用PHP框架(如Symfony和Laravel)來實現微服務,並遵循RESTful原則和標準資料格式來設計API。微服務透過訊息佇列、HTTP請求或gRPC進行通信,並使用工具(如Prometheus和ELKStack)進行監控和故障排除。

See all articles