Docker 是一種流行的容器化平臺(tái),開(kāi)發(fā)人員和團(tuán)隊(duì)已使用它來(lái)構(gòu)建和擴(kuò)展容器化應(yīng)用程序。然而,許多非技術(shù)專業(yè)人士并不知道它的功能,也不知道為什么 Docker 如此受歡迎。在下面的文章中,我們將深入探討 Docker,并解釋它為何如此受歡迎。
就其核心而言,Docker 只是一個(gè)開(kāi)源的容器化平臺(tái)。對(duì)于那些不知道的人,容器化只是指使用操作系統(tǒng)的庫(kù)和運(yùn)行代碼所需的依賴項(xiàng)來(lái)打包軟件代碼。
它全部打包在一個(gè)輕量級(jí)的“容器”中,允許在任何類型的基礎(chǔ)架構(gòu)上一致地執(zhí)行。容器比虛擬機(jī) (VM) 更受開(kāi)發(fā)人員青睞,因?yàn)樗鼈兏銛y,可用于運(yùn)行現(xiàn)代基于云的應(yīng)用程序。
Docker 使開(kāi)發(fā)人員可以輕松創(chuàng)建容器,從而使構(gòu)建、管理和部署容器的過(guò)程非常簡(jiǎn)單。將其視為一個(gè)工具包,讓您可以使用一個(gè)簡(jiǎn)單的 API 來(lái)管理容器。
以下是 Docker 如此受歡迎的其他一些原因:
例如,當(dāng)您使用 Java 編寫(xiě)代碼并使用 JVM 運(yùn)行它時(shí),您可以創(chuàng)建一個(gè) Dockerfile 并將其部署在 Docker 服務(wù)器上。而且,與 Git 一樣,Docker 做出了同樣的承諾,只是您可以跟蹤系統(tǒng)中的更改,而不是代碼中的更改。Docker 讓您可以跟蹤整個(gè)系統(tǒng)的變化,讓您可以提取歷史記錄以查看所有最近的更新。我們已經(jīng)發(fā)表了一篇關(guān)于 Docker 是什么的完整文章,所以如果您想了解更多詳細(xì)信息,請(qǐng)務(wù)必在此處查看我們的文章。
因此,既然您了解了基礎(chǔ)知識(shí),那么讓我們來(lái)談?wù)劄槭裁催@么多開(kāi)發(fā)團(tuán)隊(duì)和技術(shù)專業(yè)人員更喜歡 Docker 而不是其他選項(xiàng)(例如 Kubernetes 或 Microsoft Azure 容器注冊(cè)表)的眾多原因。
1. 安全
Docker 成為開(kāi)發(fā)團(tuán)隊(duì)首選的主要原因之一是因?yàn)樗黾恿艘粚影踩裕绻_(kāi)發(fā)人員在 Docker 之外進(jìn)行構(gòu)建,則無(wú)法獲得這種安全性。對(duì)于初學(xué)者,您可以選擇將較大應(yīng)用程序的各個(gè)組件分離到單獨(dú)的容器中。這樣,如果單個(gè)容器受到威脅,您就不必?fù)?dān)心影響會(huì)滲透到應(yīng)用程序的其余部分。對(duì)于在不同組件上工作的分布式團(tuán)隊(duì),額外的安全性總是好的。
2. 版本與環(huán)境控制
Docker 能夠跟蹤容器鏡像的離散版本。這為您提供了前所未有的版本控制,讓您可以回滾到之前的迭代,查看過(guò)去構(gòu)建的版本,包括處理這些版本的開(kāi)發(fā)人員以及工作的完成方式。更重要的是,您還可以決定只上傳容器現(xiàn)有版本和新版本之間突出顯示的更改。
如果您的軟件在不同的環(huán)境中運(yùn)行,則還存在識(shí)別行為不一致的風(fēng)險(xiǎn),具體取決于軟件運(yùn)行的機(jī)器或環(huán)境。例如,在開(kāi)發(fā)人員的計(jì)算機(jī)上工作的一個(gè)元素可能無(wú)法在特定的服務(wù)器上工作,這將是一個(gè)新的環(huán)境。但是,由于 Docker 允許您隔離容器中的軟件,因此您可以單獨(dú)運(yùn)行它們而不必?fù)?dān)心環(huán)境變化。
3. 相同代碼復(fù)現(xiàn)
Docker 的最大優(yōu)勢(shì)之一是它能夠在任何系統(tǒng)上以相同的方式重現(xiàn)代碼,只要它能夠運(yùn)行 Docker。就像 Java 應(yīng)用程序一樣,只要機(jī)器支持 Java VM,它們就會(huì)以相同的方式運(yùn)行,Docker 容器也可以這樣做。
您可以使用它們的 Dockerfiles 查看不同容器的確切規(guī)格。這樣,在團(tuán)隊(duì)合作時(shí),您可以保證使用相同 Dockerfile 構(gòu)建的所有軟件映像都將以相同的方式運(yùn)行。而且,擁有一致的代碼文檔顯然將使您更容易識(shí)別問(wèn)題并以更好的方式跟蹤您的應(yīng)用程序開(kāi)發(fā)。
4. 隔離環(huán)境
這與額外的安全性相關(guān)聯(lián)。由于一個(gè)容器的依賴項(xiàng)不會(huì)影響容器上的其他安裝或其他容器,開(kāi)發(fā)人員可以防止依賴項(xiàng)之間的任何類型的沖突。例如,您可以為前端開(kāi)發(fā)或服務(wù)器使用單獨(dú)的容器。這使得開(kāi)發(fā)團(tuán)隊(duì)可以輕松地在同一臺(tái)服務(wù)器上運(yùn)行多個(gè)項(xiàng)目,而不必?fù)?dān)心任何沖突的依賴項(xiàng)。
5. 輕松的技術(shù)管理
Docker 使管理新技術(shù)和測(cè)試它們變得異常容易。如果您有興趣嘗試新的編程語(yǔ)言或新的數(shù)據(jù)庫(kù),您可以輕松地做到這一點(diǎn)。Docker Hub有大量隨時(shí)可用的 docker 鏡像。只需搜索相關(guān)的 Docker 映像,就可以開(kāi)始了。您可以將其無(wú)縫添加到現(xiàn)有的 Docker 配置中。這有助于團(tuán)隊(duì)節(jié)省大量時(shí)間,否則這些時(shí)間將花費(fèi)在調(diào)試或安裝新圖像上。
不確定 Docker 何時(shí)對(duì)您的開(kāi)發(fā)有用?我們匯總了一系列情況,讓您更好地了解何時(shí)使用 Docker。
1.當(dāng)運(yùn)行像 Kubernetes 這樣的編排引擎時(shí)
雖然直接從 Docker 引擎管理少量容器很容易,但是當(dāng)您的軟件部署包含數(shù)千個(gè)容器和多個(gè)服務(wù)時(shí),事情確實(shí)會(huì)變得有點(diǎn)混亂。這就是為什么您可能要考慮使用編排引擎,例如 Kubernetes。Kubernetes 等容器編排工具非常強(qiáng)大,是大多數(shù)開(kāi)發(fā)人員的首選。
Docker 確實(shí)有自己的編排引擎,名為 Docker Swarm,盡管 Kubernetes 在受歡迎程度方面遠(yuǎn)遠(yuǎn)超過(guò)它。它有助于自動(dòng)執(zhí)行與容器化架構(gòu)相關(guān)的多項(xiàng)任務(wù)。這使得運(yùn)行多個(gè)服務(wù)器變得異常容易,甚至可以讓您在多個(gè)新服務(wù)上部署您的服務(wù)。
2.實(shí)現(xiàn)版本控制的理想選擇
如上所述,Docker 容器使您可以輕松地標(biāo)準(zhǔn)化環(huán)境并加快軟件開(kāi)發(fā)周期。例如,如果您對(duì)最終破壞整個(gè)環(huán)境的特定組件執(zhí)行升級(jí),您可以輕松回滾到以前的 Docker 映像。Docker 比傳統(tǒng)的 VM 備份快得多,使您可以快速?gòu)?fù)制更改并啟動(dòng)新的 Docker 映像。
3.當(dāng)你有開(kāi)發(fā)人員在不同的設(shè)置中工作時(shí)
開(kāi)發(fā)團(tuán)隊(duì)往往會(huì)經(jīng)常變化。當(dāng)您將新開(kāi)發(fā)人員加入現(xiàn)有項(xiàng)目時(shí),這總是有點(diǎn)耗時(shí)。在他們開(kāi)始編寫(xiě)代碼之前,您需要確保他們已經(jīng)設(shè)置了本地開(kāi)發(fā)環(huán)境。
根據(jù)項(xiàng)目的復(fù)雜性,這可能會(huì)花費(fèi)相當(dāng)多的時(shí)間,尤其是當(dāng)您還必須添加第三方庫(kù)和數(shù)據(jù)庫(kù)時(shí)。Docker 簡(jiǎn)化了這個(gè)過(guò)程,實(shí)際上將其自動(dòng)化到開(kāi)發(fā)人員只需運(yùn)行一個(gè)命令,Docker 將完成剩下的工作。這樣,您不僅可以節(jié)省大量時(shí)間,還可以讓您從第一天起就激活新的團(tuán)隊(duì)成員。
4.隔離應(yīng)用程序
開(kāi)發(fā)人員傾向于每天向軟件添加新的庫(kù)、依賴項(xiàng)和服務(wù)。隨著時(shí)間的推移,這往往會(huì)變得更加復(fù)雜,這就是為什么確保跟蹤所有部件,最重要的是,防止軟件損壞對(duì)您來(lái)說(shuō)很重要。Docker 讓您可以隔離特定容器中的應(yīng)用程序或設(shè)置,這樣它們就不會(huì)影響同一系統(tǒng)上運(yùn)行的其他安裝或應(yīng)用程序?qū)嵗?/p>
5.當(dāng)您想離開(kāi) Amazon AMI 市場(chǎng)或 Warden 項(xiàng)目時(shí)
Docker 有幾個(gè)可用的替代方案,包括 Amazon AMI Marketplace,它可以說(shuō)是最接近的替代方案。但是,AMI 的問(wèn)題在于它們只能在亞馬遜上運(yùn)行。
這不是 Docker 的問(wèn)題,因?yàn)槟梢栽谌魏?Linux 服務(wù)器上運(yùn)行它,只要它支持 Docker。更重要的是,Docker 容器服務(wù)還可以在 Amazon EC2(彈性計(jì)算云)上運(yùn)行。
另一個(gè)選擇是 Warden 項(xiàng)目,它是為 Cloud Foundry 編寫(xiě)的。然而,Docker 再次在這個(gè)領(lǐng)域獲勝,因?yàn)樗嗌缃贿x項(xiàng),讓開(kāi)發(fā)人員可以與同一 Docker Index 上的其他人共享圖像。
在大多數(shù)情況下,Docker 是一個(gè)很棒的選擇,但它并不總是最好的選擇。例如,雖然 Docker 是 Web 應(yīng)用程序的絕佳選擇,但如果您正在開(kāi)發(fā)桌面應(yīng)用程序,它就不可行了。雖然您可以在 Docker 上構(gòu)建此類應(yīng)用程序,但它通常不是運(yùn)行具有豐富 GUI 的應(yīng)用程序的自然環(huán)境。總而言之,Docker 是一個(gè)出色的開(kāi)源平臺(tái),可以極大地幫助開(kāi)發(fā)團(tuán)隊(duì)簡(jiǎn)化工作流程并更有效地管理開(kāi)發(fā)。