Linux

在 VM 中執行 docker 容器與在裸機上執行 docker 容器有什麼好處?

  • August 19, 2018

在虛擬機中執行 docker 容器與在裸機上(直接在主機上)執行 docker 容器有什麼好處?

我聽說過一些公司在 VM 中執行 docker 容器,特別是在 docker 會議中提到一些組織正在這樣做。為什麼?

(比較在主機上執行的 Docker 容器與在主機上的 KVM 內執行的 Docker 容器)

  • Docker 和 KVM 都有保存目前狀態的方法,這裡沒有額外的好處
  • 可以為 Docker 和 KVM 提供單獨的 IP 以供網路使用
  • Docker 和 KVM 都將正在執行的程序和安裝與主機執行程序分開
  • Docker 和 KVM 都提供了隨企業增長而擴展的簡單方法
  • 兩者都提供將實例移動到不同主機的簡單方法

那麼為什麼有人會在 KVM 中執行 Docker?他們不會從 KVM 中受到不必要的性能影響嗎?

關於你的主要觀點:

Docker 和 KVM 都有保存目前狀態的方法,這裡沒有額外的好處

除了它們儲存狀態的方式不同之外,一種方法或另一種方法可能更有效。此外,您無法可靠地保存 100% 的容器狀態。

可以為 Docker 和 KVM 提供單獨的 IP 以供網路使用

根據您使用的 VM 和容器系統,為 VM 設置這可能比為容器設置更容易。如果您想要一個用於 VM/容器的專用第 2 層介面,則尤其如此,這幾乎總是更容易使用 VM 完成。

Docker 和 KVM 都將正在執行的程序和安裝與主機執行程序分開

VM 比容器做得更好。容器仍在對主機作業系統進行本機系統呼叫。這意味著他們可以直接利用這些系統呼叫中的任何錯誤。虛擬機有自己的作業系統,因此它們更好地隔離。

Docker 和 KVM 都提供了隨企業增長而擴展的簡單方法

這是差不多的,儘管我個人發現 VM 的正確擴展比正確的容器好一點(很可能是因為 VM 正確地將權限問題轉移到了硬體,而容器需要軟體來處理它)。

兩者都提供將實例移動到不同主機的簡單方法

不,不完全是。兩者都可以進行離線遷移,但是很多容器系統不能進行實時遷移(即將正在執行的容器從一台主機移動到另一台主機)。如果您以任何合理的規模執行(需要在主機上執行更新?將所有內容遷移到另一個系統,重新啟動主機,將第二個主機的所有內容遷移到第一個主機,重新啟動它,那麼實時遷移對於可管理性非常重要,重新平衡。)。

一些額外的點:

  • VM 通常更容易使用高可用性選項。這並不是說容器沒有這樣的選項,只是它們通常更容易使用並適應 VM 的應用程式碼。
  • VM 更容易直接遷移到雲託管和從雲託管遷移(您不必非常關心底層託管環境是什麼樣的)。
  • VM 允許您執行與主機作業系統不同的平台。即使是不同的 Linux 發行版在它們的核心配置上也有足夠的差異,因此為一個發行版編寫的東西並不能完全保證在另一個發行版上工作。
  • VM 讓您更好地控制潛在的攻擊面。使用容器,您無法擺脫主機作業系統的程式碼仍在記憶體中的事實,因此是潛在的攻擊媒介。使用虛擬機,您正在執行一個隔離的作業系統,因此您可以將其精簡到您實際需要的絕對最低限度。
  • 在 VM 中一起執行一組相關的容器為您提供了一種簡單、萬無一失的方法來一起啟動和停止該組容器。

引用自:https://unix.stackexchange.com/questions/462757