Vagrant vs Docker:哪一個更合適您?

Vagrant vs Docker:哪一個更合適您?

DevOps團隊面臨著越來越大的壓力,需要快速向客戶提供更多的功能。雲供應商通過具有出色的CLI和API整合的可擴充套件平臺提供了一個解決方案。不幸的是,雲供應商暴露的介面可能是不相容的。但一些雲原生工具可以幫助DevOps團隊為任何雲供應商建立定製的解決方案。

兩個這樣的工具是VagrantDocker。瞭解它們的作用以及它們如何一起工作是獲得雲環境最大效益的關鍵。

Vagrant是一個在單一工作流程中構建和管理虛擬機器(VM)環境的工具。無論你是建立本地虛擬機器與管理程式一起執行,還是僅僅建立雲虛擬機器,Vagrant都提供了一個一致的配置格式、單一的CLI和共享的配置器來安裝軟體和改變配置。

Docker提供了將軟體和支援性配置打包成映象的能力,可以在多個平臺上一致執行。Docker使DevOps團隊有信心,軟體在本地工作站上的執行方式與在管理雲平臺上的執行方式基本相同。

儘管Vagrant和Docker的共同目標是建立可重複的環境,但它們以不同但互補的方式進行。本文探討了Vagrant和Docker如何實現它們的目標。

  1. 什麼是Docker?
  2. 什麼是Vagrant?
  3. Vagrant與Docker:近距離觀察

什麼是Docker?

Docker是一個開發、運輸和執行應用程式的開放平臺。它允許DevOps團隊將定製的軟體、支援的應用程式和庫,以及配置、網路、檔案掛載、健康檢查和啟動指令碼的指示打包成一個獨立的工件,稱為映象。

然後,映象在一個被稱為容器的輕量級、隔離的環境中執行。與通常保留固定數量的記憶體和嚴格限制CPU使用的虛擬機器不同,容器的彈性更大,只消耗它們需要的記憶體和CPU。

這使得許多容器可以有效地並排執行,降低成本並提高規模。然而,容器並不像虛擬機器那樣被認為是安全的,這意味著容器並不是執行不受信任的程式碼的理想解決方案。

Docker

Docker

為什麼使用Docker(對比Vagrant來說)?

DevOps團隊通常使用Docker來交付和執行網路應用,包括雲原生應用,這些應用要麼與訊息佇列整合,要麼託管在函式即服務(FaaS)平臺上,響應基於雲的觸發器和事件。

像Kubernetes這樣的平臺建立在Docker的基礎上,允許容器被大規模地協調。此外,每個雲提供商都支援在其平臺即服務(PaaS)產品中執行Docker容器的能力。現在很少能找到不支援Docker的PaaS了。

Docker還可以分發和執行基於CLI的工具,所有流行的雲原生工具都提供嵌入其CLI的Docker映象。

Docker的好處是什麼?

Docker解決了傳統軟體部署過程中面臨的一個共同問題,即定製的應用程式在開發人員的本地工作站和生產環境中執行時可能會表現出不同的結果。這些差異往往是由於開發人員執行不同版本的程式語言,對支援Web伺服器等應用程式的配置不同,或者執行與生產環境完全不同的作業系統。這些差異導致支援問題在團隊之間來回跳動,評論是:”它在我的機器上可以工作”。

由於Docker映象包括自定義應用程式的程式碼、所有支援的應用程式和庫,映象在容器中執行,無論在哪裡執行都能提供更一致的結果。

Docker映象很容易使用Docker Hub這樣的登錄檔進行分發,使DevOps團隊能夠在他們之間快速分享映象,並使用各種託管平臺部署映象。

在需要更復雜的應用堆疊的地方,比如在後端應用旁邊部署資料庫,或者相關微服務的集合,Docker Compose提供了用一個命令建立和連線多個Docker容器的能力。所有容器、相關設定和網路配置都在一個YAML檔案中定義。然後,Docker Compose讀取該檔案,將多個容器作為一個整體來建立和管理。

Docker還在主要的雲供應商中享有近乎普遍的支援,這意味著DevOps團隊在雲中執行他們的Docker映象時有很多選擇。

什麼是Vagrant?

幾十年來,虛擬機器已被證明是一種可靠和安全的計算資源分割槽和配置的解決方案。虛擬機器仍然是雲供應商暴露的最受歡迎的服務,許多商業和開源解決方案的團隊都希望在企業內部執行虛擬機器。

然而,這種多樣性給DevOps團隊帶來了挑戰。每個解決方案都暴露了不同的CLI和API來建立和管理虛擬機器,使得本地開發環境和基於雲的平臺之間難以保持一致。

Vagrant提供了一個解決方案,它抽象了虛擬機器平臺之間的基本差異,允許DevOps團隊用一個CLI和一致的配置語法來配置新的虛擬機器。採用Vagrant的團隊可以建立一致的虛擬機器,無論它們是在企業內部還是在雲環境中執行,並且可以在不同的環境中輕鬆切換。Vagrant有許多不同的用途,包括作為MAMP的替代品(macOS、Apache、MySQL/MariaDB、和PHP、Perl或Python)。

Vagrant

Vagrant

為什麼使用Vagrant(相對於Docker來說)?

有可能通過手動安裝軟體和編輯配置檔案來啟動虛擬機器並手動配置作業系統。這並不理想,因為這個過程是不可重複的,這意味著必須為不同的作業系統和供應商手動重新建立虛擬機器。這也使得以後幾乎不可能瞭解一個虛擬機器是如何配置的。

一個更好的做法是將配置虛擬機器的過程自動化。Vagrant提供了一個單一的工具,用於自動為許多供應商構建虛擬機器的過程。Vagrant還在Vagrant雲上提供了大量高質量的虛擬機器選擇,DevOps團隊可以用它來開始他們自己的虛擬機器。

Vagrant的好處是什麼?

利用Vagrant的DevOps團隊有一個單一的工具可以學習,無論他們是為企業內部平臺、雲平臺或兩者構建虛擬機器。你可以輕鬆地調整Vagrant的配置檔案,並在以後重新執行或審查這些檔案,以瞭解虛擬機器是如何構建的。

Vagrant還允許DevOps團隊遷移到雲端或在供應商之間遷移,而不需要重新設計他們用來構建虛擬機器的過程。

Vagrant建立的虛擬機器提供了高水平的隔離,通常利用現代CPU內建的專業虛擬化支援。這使得虛擬機器和建立它們的工具,如Vagrant,成為安全和隔離是高度優先的最佳選擇。

許多Linux發行版,如UbuntuFedora,也提供官方的Vagrant盒子,DevOps團隊可以在上面構建。這減少了構建自定義虛擬機器的時間。

Vagrant與Docker:近距離觀察

Vagrant和Docker都通過自動構建、分發和執行軟體應用程式,使DevOps團隊更加高效。

Docker通過映象形式的自定義打包格式和通過容器的輕量級執行環境實現了這一目標。容器在不同的平臺之間執行一致,使DevOps團隊對他們的軟體按預期執行更有信心。Docker得到了PaaS和FaaS雲平臺的良好支援,使DevOps團隊可以根據自己的需要選擇最佳平臺。

許多容器可以在一臺主機上共存,主要是–但不是完全–相互隔離,同時共享同一個資源池。這使得容器能夠有效地擴充套件。

Vagrant通過提供一個一致的方法來構建現有供應商的虛擬機器來實現這一目標。對於已經在虛擬機器上投資的團隊來說,這是一個理想的選擇,因為他們依靠的是高度的隔離、安全、控制和定製。

在執行可信的程式碼時,Docker也提供了最好的解決方案,同時最大限度地降低了計算成本。容器之間是合理隔離的,但產生的開銷卻非常小。這意味著許多容器可以在一個共享的作業系統上同時執行。當團隊需要高水平的隔離和安全,或者需要並排執行許多不同的作業系統時,虛擬機器提供了最好的解決方案,Vagrant為以自動化和可重複的方式構建虛擬機器提供了一個方便的解決方案。

Vagrant和Docker並不是相互排斥的技術,兩種工具可以並肩使用。例如,DevOps團隊可以使用Docker來開發和執行應用程式,同時使用Vagrant來重新建立專門的環境來再現問題。Docker甚至可以在Vagrant建立的虛擬機器內執行,也許是為了測試Docker的新版本,或者在一個隔離的環境中測試作為Docker映象分發的工具。

小結

DevOps團隊在構建、分發和執行應用程式時有很多選擇。

Docker提供了一個定製的映象格式和容器執行環境,允許大規模和有效地使用資源,並支援跨PaaS和FaaS平臺。

虛擬機器提供了來自許多雲和企業內部虛擬機器供應商的安全和隔離的執行環境,Vagrant抽象了許多差異,提供了一個單一的CLI和一致的配置語法來跨供應商例項化虛擬機器。

評論留言