軟件開發(fā)是一個每年都在發(fā)展的過程,但業(yè)界很少有東西像 Docker 這樣成為標(biāo)準(zhǔn)。自 2013 年公開發(fā)布以來,Docker 一直用于開發(fā)、交付和運行應(yīng)用程序。時至今日,它仍是許多經(jīng)驗豐富的開發(fā)人員使用的軟件開發(fā)的重要組成部分。在本文中,我們將介紹 Docker 到底是什么、使用它的優(yōu)缺點以及它的實際工作原理。
什么是Docker?
Docker是一個開源容器化平臺,可獨立于本地或主機基礎(chǔ)設(shè)施開發(fā)、運送和運行應(yīng)用程序。它是一個創(chuàng)建和管理容器的平臺,這些容器彼此隔離但可以通過定義的通道相互通信。Docker 之所以成為流行的 PaaS,是因為容器的概念,容器使用的資源比 VM 少。
什么是容器,它們解決什么問題?
在詳細(xì)說明 Docker 的功能之前,讓我們先了解它的組件。所有應(yīng)用程序和程序都是為在特定環(huán)境中運行而開發(fā)的。這些環(huán)境要么具有應(yīng)用程序所需的庫或工具,要么運行應(yīng)用程序兼容運行的軟件版本。
容器就是這樣的環(huán)境,包括應(yīng)用程序運行的所有庫和工具。容器的作用是將這些應(yīng)用程序與應(yīng)用程序的庫和工具一起打包在容器中,這樣它就可以在任何地方運行,而不必依賴宿主的環(huán)境。
這是一個簡單的類比:
宜家出售需要自行組裝的家具。但是,他們怎么知道所有客戶都有組裝家具的工具呢?他們沒有。宜家將工具與家具一起運送,因此世界各地的任何客戶都可以在宜家包裹到達(dá)他們家門口的那一刻就開始安裝。
這基本上就是容器的工作方式,使開發(fā)和交付軟件更加容易。通過在容器環(huán)境中包含所有必要的工具,開發(fā)人員不必再擔(dān)心與不同服務(wù)器或主機的不兼容問題。另一個經(jīng)常與容器一起出現(xiàn)的術(shù)語是微服務(wù)。
Docker 做什么?
Docker 只是一個管理這些容器的平臺,因此您可以輕松構(gòu)建不同的特定環(huán)境。Docker 平臺讓開發(fā)人員和程序員可以在整個工作空間中無縫地使用容器。無論您是內(nèi)部團(tuán)隊還是成員遍布世界各地的遠(yuǎn)程團(tuán)隊,使用 Docker 來運送和運行容器都是一種更高效地構(gòu)建軟件的低成本方式。?但是除了方便之外,使用 Docker 還有很多好處。我們將在本文后面詳細(xì)討論容器化如何更快、更安全并且更適合擴(kuò)展。
Docker解決了什么?
Docker 解決了自己創(chuàng)建容器并在整個團(tuán)隊中管理它們的問題。當(dāng)您想要優(yōu)化開發(fā)過程的工作流程時,這一點變得尤為重要。
使用 Docker 的優(yōu)缺點
除了管理方面,Docker 還解決了許多其他復(fù)雜、艱巨的問題。
以下是使用 Docker 的主要優(yōu)勢
- 可靠性。使用 Docker 進(jìn)行容器化可確保您的應(yīng)用幾乎可以在安裝了 Docker 的任何地方運行。您不必?fù)?dān)心版本不兼容或手動安裝依賴項。
- 效率。軟件開發(fā)的一個巨大瓶頸是當(dāng)應(yīng)用程序或軟件在沒有環(huán)境的情況下在計算機中崩潰時。通過使用容器,您可以擺脫這些瓶頸并簡化工作流程以專注于開發(fā)軟件,而不會因安裝依賴項而分心。
- 可擴(kuò)展性。可以選擇快速創(chuàng)建新容器并部署它們可以更快地為您的軟件打補丁或更新。與通常意味著構(gòu)建到現(xiàn)有代碼然后重新啟動它以更新程序的整體式編程不同,容器讓您可以獨立地在彼此之上構(gòu)建。這意味著您可以在不損壞其他容器及其功能的情況下添加和刪除容器,從而更輕松地擴(kuò)展您的軟件。
- 無障礙。使用容器,軟件維護(hù)的例行檢查和優(yōu)化過程也更容易。由于容器彼此獨立工作,您可以配置、更新和部署容器,而無需關(guān)閉或干擾其他容器。這使得容器易于訪問。
- 輕的。容器是需要操作系統(tǒng)才能運行的虛擬機的輕量級替代方案。容器通過共享主機的資源(如 RAM 和 CPU)而不是需要專用資源(即使未使用)的虛擬機來避免這樣做。
- 版本自由。由于容器彼此隔離,您可以使用最新版本的 JavaScript 運行一個容器,而另一個容器運行舊版本。每種語言都沒有完美的版本,程序員對某些版本比其他版本更熟悉。通過容器在不破壞其他代碼行的情況下?lián)碛惺褂萌魏伟姹镜膭?chuàng)造性自由,使您的軟件更加通用。
沒有什么是完美的,Docker 也遠(yuǎn)非萬能的一站式解決方案。該平臺確實有其自身應(yīng)注意的缺點。
使用 Docker 的缺點
- 陡峭的學(xué)習(xí)曲線。盡管 Docker 方便快捷,但不可否認(rèn)要精通該平臺需要一定的學(xué)習(xí)曲線。您不會在一夜之間成為使用 Docker 的高手,您可以預(yù)期您的團(tuán)隊成員也會遇到同樣的困難。如果您需要對 Docker 引擎進(jìn)行維護(hù)或定制,您還必須了解 Linux。
- 平臺到平臺的通信。盡管容器可以無縫地相互對話,但在這個領(lǐng)域工作的公司并不總是意見一致。競爭對手的集裝箱公司并不經(jīng)常相互合作,如果您想擴(kuò)展您正在使用的技術(shù),這可能會破壞交易。
- 臨時容器。一旦容器的使用結(jié)束,例如當(dāng)它完成一個進(jìn)程并且不再使用時,容器將與其處理的所有數(shù)據(jù)一起關(guān)閉。除非您使用卷將數(shù)據(jù)存儲到 Docker 引擎,否則不會保存數(shù)據(jù)。這不一定是壞事,但對于您的軟件開發(fā)過程來說卻是值得注意的事情。Docker 對此還沒有自動化的解決方案。
- 命令行界面。Docker 的界面類似于命令行,這使其成為運行需要圖形界面的應(yīng)用程序的糟糕選擇。它主要針對通過終端上的命令運行的應(yīng)用程序和程序進(jìn)行了優(yōu)化。
最后,新公司在使用 Docker 時面臨的一個常見問題是,他們在不了解如何首先設(shè)計和編排開發(fā)架構(gòu)的情況下嘗試使用它。Docker 并不是一個放之四海而皆準(zhǔn)的平臺,有些程序沒有它會更好。
Docker 是如何工作的
Docker 在客戶端-服務(wù)器的基礎(chǔ)上工作。您所看到的 Docker 客戶端與負(fù)責(zé)執(zhí)行和管理任務(wù)的 Docker 守護(hù)進(jìn)程對話。
Docker的核心組件和架構(gòu)
除此之外,還有更多來自 Docker 的功能,它們可以提供不同的功能。今天,我們只關(guān)注 Docker 的四個核心組件。
Docker客戶端
Docker 客戶端是您與 Docker 守護(hù)進(jìn)程之間的接口。這是您輸入命令、運行程序以及主要與 Docker 交互的地方。
碼頭守護(hù)進(jìn)程
守護(hù)進(jìn)程負(fù)責(zé)管理 Docker 平臺上的所有內(nèi)容,無論是映像、容器、卷還是網(wǎng)絡(luò)。簡單來說,這是您整個 Docker 操作背后的策劃者。您通過客戶端發(fā)送的所有命令都由守護(hù)程序處理并由其管理。守護(hù)進(jìn)程也可以與來自其他服務(wù)器的守護(hù)進(jìn)程連接。
Docker登記處
Docker 注冊表是一個開源系統(tǒng),您可以在其中存儲和下載 Docker 映像。您甚至可以在與同事共享的工作區(qū)中設(shè)置私人注冊表。
Docker圖像
Docker 鏡像是只讀文件,其中包含創(chuàng)建 Docker 容器的說明。簡單來說,它就像一個藍(lán)圖,告訴 Docker 守護(hù)進(jìn)程運行什么環(huán)境。這是使容器創(chuàng)建變得更容易和更快的部分原因。結(jié)合 Docker 注冊表,您可以找到公開可用的圖像預(yù)設(shè),甚至可以為您的同事創(chuàng)建自定義圖像供您的同事使用。
Docker 或 Kubernetes
Docker 和容器化的新手經(jīng)常問的一個問題是“Docker 和 Kubernetes 哪個更好?”答案非常簡單:兩者都有。
什么是 Kubernetes?
Kubernetes是谷歌開發(fā)的用于管理部署自動化和容器化服務(wù)的系統(tǒng)。它旨在處理和管理成百上千的容器,并優(yōu)化這些容器之間的協(xié)作方式。Kubernetes 通過為特殊功能構(gòu)建的節(jié)點來實現(xiàn)這一點。
這些節(jié)點可以分為兩類:主力節(jié)點和頭節(jié)點。主力節(jié)點負(fù)責(zé)任何計算并完成所有繁重的工作。這需要比頭節(jié)點更多的資源。另一方面,頭節(jié)點負(fù)責(zé)分配任務(wù)和接收最終輸出。?簡而言之,Kubernetes 是用來管理和優(yōu)化容器之間的整個工作流程的,這與 Docker 有很大的不同。
Docker 和 Kubernetes 有什么區(qū)別?
Docker 是一個構(gòu)建、運送和運行容器的容器化平臺。它是一個平臺,可讓您像部署容器一樣輕松地構(gòu)建容器。相比之下,Kubernetes 更注重容器管理和效率。它處理大量容器并優(yōu)化它們以通過節(jié)點更快地工作。
行動后報告——你應(yīng)該使用 Docker 嗎?
那么,你應(yīng)該為你的軟件使用 Docker 嗎?這得看情況。如果您需要經(jīng)常移植您的環(huán)境,Docker 通常會對您的開發(fā)過程產(chǎn)生最大的影響。使用 Docker 的下一個最大考慮因素是,如果您正在與必須不斷來回測試您的應(yīng)用程序的大型團(tuán)隊合作。在需要在不同計算機上運行應(yīng)用程序的開發(fā)人員和運營經(jīng)理之間工作的團(tuán)隊會發(fā)現(xiàn) Docker 是救星。