了解輕量級的、可移植的、自包含的Docker容器是如何改進軟件開發、應用程序部署和業務敏捷性的。
1981年出版的一本名為《將果凍釘在樹上》的書將軟件描述為是一種“模糊不清且難以把控的東西”。其實,不僅在1981年的時候是如此,近40年來也一直是如此。軟件,無論是你購買的應用程序還是你自己構建的應用程序,都很難部署、管理和運行。
現在,Docker容器提供了一種新的控制軟件的方法。您可以使用Docker來包裝應用程序,以便處理應用程序的部署和運行時問題——包括如何在網絡上公開應用程序,如何管理應用程序對存儲和內存以及I/O的使用,如何控制應用程序對外的訪問權限,以及如何讓所有在容器中的應用程序保持一致。您可以在安裝了Docker runtime的任何兼容主機(Linux或Windows)上運行Docker容器。
除了這種方便的封裝,隔離,可移植性和控制之外,Docker還提供了許多其他好處。 Docker容器很小(兆字節),并且啟動迅速。它們有自己內置的版本控制和組件重用的機制。它們可以輕松的通過公共Docker Hub或私有存儲庫進行共享。
在本文中,我將探討Docker容器是如何使軟件的構建和部署變得更加容易的——包括容器可以解決的問題,它們是如何解決這些問題的,以及何時才是使用容器的最佳時機。
在Docker容器出現之前
多年來,企業軟件通常部署在“裸機”(即安裝在對底層硬件具有完全控制權的操作系統上)或虛擬機(即安裝在與其他客戶機操作系統共享底層硬件的操作系統上)上。顯然,在裸機上安裝會讓軟件很難移動,也很難更新——這兩個限制使得傳統IT很難靈活應對業務需求的變化。
后來出現了虛擬化。虛擬化平臺(也稱為“虛擬機管理程序”)允許多個虛擬機共享一個物理系統,每個虛擬機以獨立的方式模擬整個系統的行為,包括自己的操作系統、存儲和I/O。這樣,IT可以更有效地響應業務需求的變化,因為可以克隆,復制,遷移虛擬機以及快速的增減資源以滿足需求或節省資源。
虛擬機也有助于降低成本,因為更多虛擬機可以整合到更少的物理機器上。運行舊應用程序的遺留系統可以轉換為虛擬機并在物理上退役,以節省更多資金。
但是虛擬機仍然存在一些問題。虛擬機是本身就很巨大(千兆字節),每一個虛擬機都包含一個完整的操作系統。因而能夠整合到單個系統中的虛擬化應用程序非常有限。另外,調配虛擬機仍然需要相當長的時間。所以,虛擬機的可移植性依然有限。到達一定程度以后,虛擬機便無法再滿足快速發展的企業所需求的速度、靈活性和低成本了。
Docker容器的好處
容器的工作方式有點像虛擬機,但更具體和精細。它們將單個應用程序及其依賴項(應用程序需要運行的所有外部軟件庫)從底層操作系統和其他容器中隔離開來。所有容器化的應用程序都共享一個單一的通用操作系統(Linux或Windows),但它們彼此之間以及整個系統之間是分開的。
Docker容器的好處在很多地方都有體現。以下是Docker和容器的一些主要優點:
Docker可以更有效地使用系統資源
容器化應用程序的實例使用的內存比虛擬機少得多,它們啟動和停止的速度更快,可以在主機硬件上更密集地進行打包。所有的這些都意味著它能夠極大的減少IT開支。
節省的成本將取決于應用程序的使用情況以及它們對資源使用的密集程度,但容器總是能夠比虛擬機更高效。相應的,這也節省了軟件許可證的成本,因為運行相同的工作負載需要更少的操作系統實例。
Docker支持更快的軟件交付周期
企業軟件必須對不斷變化的環境做出快速反應。這意味著需要一個既易于擴展以滿足需求,又易于更新以根據業務需要添加新功能的運行環境。
Docker容器使將具有新業務特性的新版本軟件快速投入生產——如果需要,也可以快速回滾到以前的版本。它們還使得實施藍/綠部署等戰略變得更加容易。
Docker支持應用程序的可移植性
有時選擇在哪里運行企業應用程序是至關重要的——在防火墻后面,可以讓應用變得更加可靠和安全;在公共云中,可以提高應用的可訪問性和資源彈性。而Docker容器封裝了應用程序運行所需要的所有東西,所以它們能夠允許應用程序在不同的環境之間輕松穿梭。所有安裝了Docker runtime的主機——無論是開發人員的筆記本電腦還是公共云實例——都可以運行Docker容器。
Docker讓微服務架構更加閃耀
輕量級的、可移植的、獨立的Docker容器使得構建前瞻性軟件架構變得更加容易,因此您不需要試圖使用昨天的開發方法來解決明天的問題。
其中的一種受益于此的軟件開發模式就是微服務,它需要由許多松散耦合的組件來共同組成一個應用程序。通過將傳統的“單一的”應用程序分解成許多獨立的服務,微服務允許業務線應用程序的不同部分由獨立的團隊和獨立的時間軸被獨立地擴展、修改和服務——只要它能夠滿足業務需求。
容器不需要實現微服務,但是它非常適合微服務方法和敏捷開發。
Docker容器無法解決的問題
關于容器,首先要記住的是:它也并不是萬能的。Docker容器本身并不能解決所有問題。特別是:
Docker無法解決您的安全問題
在默認情況下,容器中的軟件確實比在裸機上運行的軟件更安全,但這就好比說,鎖著門的房子比不鎖著門的房子更安全。但這也需要視情況而定。容器可以為應用程序添加一層保護層,但也是僅作為在上下文中保護應用程序的一般程序的一部分而已。
Docker不會將應用程序神奇地轉變為微服務
如果您將現有應用程序容器化,的確可以減少其資源消耗并使其更易于部署。但它不會自動更改應用程序的設計,也不會自動更改其與其他應用程序的交互方式。這些東西只能通過開發人員的時間和努力來實現,而不是通過將所有內容都轉移到容器中。
將一個老式的獨立的或SOA風格的應用程序放在容器中,你最終會得到也只是一個容器中的舊應用程序。這對你的工作沒有任何幫助;如果說有什么區別的話,那就是它可能會讓它變得不那么有用。
Docker不是虛擬機的替代品
關于容器的一個持久的話題是,它們最終將淘汰虛擬機。許多以前在虛擬機中運行的應用程序都可以被移動到容器中,但這并不意味著所有的應用程序都可以或應該被移動到容器中。例如,如果您所在的行業具有嚴格的監管要求,那么您可能無法將虛擬機替換為容器,因為虛擬機提供的隔離性比容器更強。
Docker容器的使用
傳統企業的開發工作常常因其保守的文化和對變化的麻木遲鈍而聲名狼藉。企業開發人員也一直對這些限制感到惱火——包括IT強加給他們的限制,以及整個企業對他們的要求。然而,Docker和容器為開發人員提供了更多他們所渴望的自由,同時提供了新的構建業務應用程序的方法,讓他們能夠快速響應不斷變化的業務條件。