企業容器化如何選型?全方位對比 Heroku 與 Docker

Heroku和Docker都可以讓開發人員能夠在容器內開發、部署和運行應用程序。容器是在單個操作系統內核上運行的虛擬環境,使應用程序能夠使用虛擬機或裸機計算機系統所需資源的一小部分來運行。容器還使我們能夠快速擴展應用程序,並輕鬆地從開發過渡到生產。雖然Heroku和Docker都爲軟件部署和管理提供了一個容器化的解決方案,但是它們在實現和術語方面有很大的不同。每個系統也有着不同的利與弊。

什麼是容器?

容器是使應用程序能夠共享單個操作系統的軟件系統。容器系統通常由容器引擎、主機操作系統和處理器組成。

  • 容器引擎——在這種情況下,Docker或Heroku是一種用於部署容器化應用程序的託管環境。容器引擎管理內核和內存。它還管理各個應用程序的空間隔離和安全性,並允許可伸縮性。
  • 主機操作系統(OS)——主機操作系統(通常是Linux)提供用戶界面,內存等資源的管理,併爲應用程序提供服務。
  • 處理器——也稱爲中央處理器,它基於來自操作系統和應用程序的指令,負責執行所有的任務。

容器的優點

因爲容器允許應用程序共享資源,所以它們提供了以下幾個優點:

  • 降低成本—容器通過允許應用程序共享資源來降低成本。
  • 增加的可靠性和健壯性——容器使我們可以做到快速的故障切換和恢復。
  • 可伸縮性——容器使我們可以快速且容易地伸縮應用程序的數量。
  • 隔離——容器在名稱空間中使用自己的資源隔離每個應用程序。因此,儘管應用程序共享資源,但它們在職能上是相互隔離的。這還意味着一個應用程序中的故障是與其他應用程序隔離的,從而使容器比虛擬機或裸金屬系統更安全。
  • 持續集成——因爲容器很容易被摧毀和部署,所以它們支持迭代過程,比如敏捷。
  • 可移植性——容器非常便攜,允許從開發到生產的輕鬆轉換,在雲環境中效果尤爲顯著。
  • 安全——容器的模塊化設計增加了隔離性,使系統更難被攻擊,並限制了惡意軟件的影響。
    • 容器進程必須只向容器特定的文件系統寫入信息。
    • 容器命名空間必須與私有內部網隔離。
    • 容器特權必須隔離。

Heroku

圖片

Heroku是一個平臺即服務(PaaS)平臺,是2007年創建的第一批雲平臺之一。Heroku最初只支持Ruby,但現在已支持Java、Node.js、Python、 PHP等。Heroku由以下組件組成:

  • BuildPack—Heroku BuildPack是一組用於創建鏡像的腳本。BuildPack確定應用程序可以運行的語言,包括Java、Python、Ruby和其他語言。Heroku爲各種語言提供了默認的BuildPack ,開發人員也可以構建自己的BuildPack。
  • Slug——運行BuildPack時,它會創建應用程序的打包副本,稱爲Slug。Slugs包含運行應用程序所需的所有功能,可以快速輕鬆地部署。
  • 根據Heroku的說法,“Dynos是隔離的、虛擬化的Linux容器,用於根據用戶指定的命令執行代碼”。使用Dynos,可以根據資源需求將應用程序擴展到任何級別。
  • 可爲Heroku購買Add-Ons-Preconfigured構建塊,以構建更復雜的應用程序。
  • 命令行界面(CLI)——用來管理Heroku容器的命令行界面。

有沒有考慮過將DeployPlace作爲Heroku的替代方案以避免被供應商鎖定?

Docker

圖片

Docker是一個開源工具,用於在容器中創建、管理、部署和運行應用程序。與Heroku必須在自己的雲環境中運行不同,Docker可以安裝在筆記本電腦、服務器或如Amazon Web Services (AWS)之類基於雲的環境中。Docker由以下高級組件組成:

  • Dockerfile——Dockerfile是一組用於構建Docker鏡像的命令(參見下文)。Dockerfiles也代表着Docker鏡像的最終配置。
  • Docker鏡像——通過運行Dockerfile創建的Docker鏡像(參見上文)。Docker鏡像是一個多層文件,包含運行應用程序所需的所有資源、依賴項、數據、文件和設置。每次啓動一個Docker鏡像時,它都會創建一個同一個應用程序的容器,從而提供了簡單的可伸縮性。
  • Index——Docker圖像可以上傳到Index分享給Docker社區。這樣可以讓其他用戶基於從Index下載的單個Docker鏡像組件構建複雜的應用程序。
  • 命令行界面(CLI)——與Heroku類似,Docker提供了用於管理容器的CLI。

Docker和Heroku術語


術語 Docker Heroku
構建文件—用於構建鏡像的命令集。 DockerFile BuildPack
鏡像——包含用於運行應用的所有資源鏡像 Docker鏡像 Slug
容器——包含運行隔離進程的可執行代碼的靜態文件。 Docker容器 Dyno
Index——應用程序構建塊的來源。 Docker Index Add-Ons
命令行界面。 CLI CLI

Docker vs Heroku

雖然Docker和Heroku有一個共同的概念,即應用程序的容器化,但是這兩個平臺之間有着一些主要的區別。Heroku提供了運行應用程序的容器和託管應用程序的基礎設施。換句話說,Heroku提供了容器化的所有優點,但是你也必須在Heroku平臺上運行它。這使得Heroku非常容易搭建和運行,但是同時也有一些限制。與Docker不同,Heroku不能在本地服務器或基於私有云的服務上運行。

Heroku

Heroku的優點:

  • Heroku易於搭建、實施和部署。Heroku管理硬件、軟件和其他資源,使開發人員可以幾乎只專注於開發他們的應用程序。
  • Heroku支持多種語言,包括:
    • Ruby
    • Java
    • Node.js
    • Scala
    • Clojure
    • Python
    • PHP
    • Go
  • Heroku是一個通曉多種語言的平臺——通過使用各種構建包,開發人員可以在幾乎任何編程語言中部署應用程序。
  • Heroku Dynos允許簡單的開發和可用性——因爲由Heroku管理和運行應用程序,將開發人員從操作系統和其他系統配置的管理中解放出來。
  • Heroku允許即時的可伸縮性——通過增加或減少Dynos的數量,可以很容易地按比例增加或減少Heroku。

Heroku的缺點:

  • 在Heroku上運行的應用程序只能在Heroku平臺上運行。因此,Heroku不能在內部服務器或私有云上運行。瞭解一下DeployPlace,以避免被供應商鎖定。
  • Heroku應用程序只能使用Linux操作系統運行。
  • 雖然Heroku提供了一個免費的版本,但標準套餐每月25美元起。

Heroku的流言:

  1. Heroku太貴了。許多公司更喜歡尋找、招聘和培訓DevOps工程師來搭建和支持部署基礎設施。招聘、培訓、工資和辦公的成本常常被忽視。在主要關注開發更好的產品的同時,DevOps團隊的招募和管理可能會被忽視。
  2. 有時Heroku被認爲不夠安全。但是Heroku比你自主研發的部署基礎設施安全得多。Heroku有一個單獨的團隊處理安全問題。Heroku的安全特性已經在數千個實際客戶的應用程序上進行了測試。對於大多數不需要額外認證的行業來說,Heroku的安全性絕對沒有問題。

Heroku的陷阱

Heroku的客戶如果想通過免費的途徑省錢,就會使用較低的成本級別,但在系統爲了節省公司資金關閉資源的時候,可能會遭遇“
休眠應用”。 對於不知情的用戶來說,這種意外很是令人不快,這麼度量簡直太不方便了!它根本就是在“故意停機”,你花了錢卻不能掌控它!

服務器和進程(Heroku在多租戶共享服務器中存儲實例的地方)也缺乏所有權。從某種意義上說,客戶實際上沒有選擇服務器部署在何處的權利。

Docker

Docker 的優點:

  • 幾乎可以在任何環境下運行—docker可以在內部服務器、私有云系統甚至是在Heroku PaaS本身上運行。
  • 可定製——因爲Docker幾乎可以在任何平臺上運行,所以可以對它進行定製以滿足你的所有需求。
  • 安全性——因爲Docker可以在內部服務器上運行,所以它的安全性可以讓你滿意。
  • 操作系統——docker可以運行在各種操作系統上,包括Linux、Windows和其他操作系統。
  • 成本——AWS上的Docker相對便宜,大約每月4.75美元起。

Docker 的缺點:

  • 很難配置——與Heroku相比,Docker的靈活性意味着它需要更多的配置才能正確設置。

Docker 的陷阱

開發團隊有時會遇到Docker的問題,其中許多問題與該技術的開源本質有關。在許多不同類型的用例中,覆蓋網絡會導致延遲。這種延遲可能會成爲一個問題,特別是對於那些需要接近裸機地運轉才能實現實時目標的公司來說。

Docker的另一個主要問題是需要將有價值的數據導入Docker容器鏡像,並將其保存在鏡像中。由於容器通常是爲無狀態功能構建的,因此會丟失本要持久保存的數據。當這種情況發生時,就會變得非常麻煩。專家和經驗豐富的開發人員總是警告不要將持久數據放在不應該放的地方,每次都敦促其他人“堅守陣地”。

比較Docker和Heroku


特性 Docker Heroku
靈活性 非常靈活的部署 靈活的部署
易用性 更復雜的配置 簡單的配置
可移植性 非常容易移植 不可移植
價格 便宜的主機 更加昂貴

在Heroku上部署Docker

通過在Heroku的基礎設施上部署Docker,可以同時享受這兩個領域的好處。Heroku的平臺簡化了設置和部署,並且幾乎沒有風險。雖然與AWS這樣的平臺相比,在Heroku上部署的初始費用更昂貴,但是許多公司最終在Heroku上節省了資金,因爲與其他平臺相比,節省了所有在配置上要花費的時間。

在Heroku上部署Docker的優點包括:

  1. 開發環境和生產環境之間的差異更小。

  2. 更好地控制如何構建包。例如,如果你的應用程序使用了一門不使用標準buildpack的語言,那麼你可以在Docker中構建它。

在Heroku平臺上部署Docker的主要缺點是丟棄了一些Heroku的自動配置特性,承擔了更多的責任。如果使用標準的slug編譯器和默認的stack,Heroku將自動檢查安全性更新,更新stack,然後自動遷移應用程序。但是,如果使用Docker容器,Heroku就不能這樣做了,責任就落在了管理應用程序的人的身上。

哪些公司使用Docker和Heroku?

Docker 的客戶

Docker在G2Crowd上的評分是4.4分(滿分5分),共有200名用戶做了評價。許多公司選擇Docker以在容器中快速部署服務器環境,而不需要創建虛擬機。

  • ADP——它使用Docker建立一個安全的軟件供應鏈,爲113個國家的近4000萬活躍用戶服務。
    * ALM. Brand——使用Docker 企業版精簡了它的Oracle WebLogic應用程序,並構建了新的應用程序。
  • ASSA ABLOY——ASSA ABLOY是一家著名的鎖具製造商,利用Docker 企業版來加速其電子接口和鎖具硬件的市場交付。
  • Baker Hughes GE——使用Docker,將部署時間從6個月減少到1個小時。
  • GlaxoSmithKline——使用Docker企業版來加速藥物配送模型和改進研究。
  • Visa——Visa利用Docker對其支付處理應用進行了重構,最終實現了10倍的可擴展性提升。

Heroku的客戶

Heroku經常被初創公司和行業領導者選擇,用於快速構建強大的可以快速發佈的數據驅動應用程序。Docker在G2Crowd上的評分是4.3分(滿分5分),共有76名用戶做出了評價。

  • Altus Assessments——Altus Assessments使用Heroku來運行成千上萬的數據密集型測試。
  • SwimTopia——Heroku幫助SwimTopia在高峯期無縫地伸縮。
  • SHIFT Commerce——使用Heroku電子接口並聚集硬件市場,使SHIFT Commerce的快速增長成爲可能。
  • ClickFunnels——ClickFunnels運用Heroku靈活的數據服務抓住了增長的機會。
  • Moneytree——Moneytree專注於他們的業務,而Heroku負責數據安全和遵從性
  • DrivenData——Heroku爲DrivenData的數據科學應用提供了一個安全的平臺。

總結

Heroku和Docker都是容器化的極佳選擇。它們都可以運行各種語言的應用程序,包括Java、Ruby、PHP和其他語言。它們還提供了簡單的可伸縮性和部署。

Heroku和Docker之間的主要區別在於它們的實現。Heroku和Docker都使用容器進行操作,容器是一個自包含的代碼實例,包含運行應用程序所需的所有內容,包括代碼、資源和工具。但是,Heroku在它自己的Heroku部署流水線中提供容器。這使得Heroku非常容易配置,因爲包、容器和環境整體上都已經爲你配置好了。Heroku非常適合希望無需複雜的配置即可在一個固定的環境中部署應用程序的新開發人員或者小公司。

另一方面,Docker提供了一個容器化模型,它可以運行在各種各樣的平臺上,從內部服務器到私有云、AWS甚至是Heroku環境本身。因此,與Heroku相比,Docker在部署方面要靈活得多。然而,伴隨這種靈活性而來的是更復雜的部署過程。

因此,Docker更適合具有更具體配置要求的公司。例如,如果你的應用程序需要一個非常安全的環境,你可以運行Docker on-premise並根據你的規範配置安全性。更大的靈活性也帶來了一定程度的複雜性。Heroku基本上可以直接運行,而Docker則要根據你的需要進行更多配置。

在某些情況下,開發人員可以通過在Heroku上部署Docker來利用兩個平臺的特性。這減輕了Docker在其他PaaS平臺上帶來的許多部署和實現難題,但是與純Heroku部署相比,它確實將更多的責任分配給了應用程序管理者。另一方面,更大的責任也使你能夠更好地控制應用程序。

原文鏈接:

https://deployplace.com/blog/heroku-vs-docker/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章