03.07 如何通俗的解釋“Docker”?

julie_fz71


Docker 是 Golang 編寫的, 自 2013 年推出以來,受到越來越多的開發者的關注。如果你關注最新的技術發展,那麼你一定聽說過 Docker。不管是雲服務還是微服務(Microservices),越來越多的廠商都開始基於 Docker 作為基礎設施自動化的工具。那麼什麼是 Docker?Docker與傳統的虛擬機有什麼區別?為何要採用 Docker?如何使用 Docker?

當有人提到“Docker”時,可能是指如下3種概念之一。

  • Docker公司。
  • Docker的容器運行時和編排引擎。
  • Docker開源項目(Moby)。

本文摘自美亞操作系統排名第一的暢銷書《深入淺出docker》

深入淺出Docker

1.1 Docker——簡介

Docker是一種運行於Linux和Windows上的軟件,用於創建、管理和編排容器。Docker是在GitHub上開發的Moby開源項目的一部分。Docker公司,位於舊金山,是整個Moby開源項目的維護者。Docker公司還提供包含支持服務的商業版本的Docker。

以上是一個簡要介紹。下面針對每個概念進行詳細介紹。此外還包含對容器生態的探討,以及對開放容器計劃(Open Container Initiative, OCI)的介紹。

1.2 Docker公司

Docker公司位於舊金山,由法裔美籍開發者和企業家Solumon Hykes創立,其標誌如圖1.1所示。

有意思的是,Docker公司起初是一家名為dotCloud的平臺即服務(Platform-as-a-Service, PaaS)提供商。底層技術上,dotCloud平臺利用了Linux容器技術。為了方便創建和管理這些容器,dotCloud開發了一套內部工具,之後被命名為“Docker”。Docker就是這樣誕生的!

2013年,dotCloud的PaaS業務並不景氣,公司需要尋求新的突破。於是他們聘請了Ben Golub作為新的CEO,將公司重命名為“Docker”,放棄dotCloud PaaS平臺,懷揣著“將Docker和容器技術推向全世界”的使命,開啟了一段新的征程。

如今Docker公司被普遍認為是一家創新型科技公司,據說其市場價值約為10億美元。在本書撰寫時,Docker公司已經通過多輪融資,吸納了來自硅谷的幾家風投公司的累計超過2.4億美元的投資。幾乎所有的融資都發生在公司更名為“Docker”之後。

圖1.1 Docker標誌

公司更名為Docker之後,進行了幾次小規模的未公開價格的收購,來豐富其產品和服務組合。

至《深入淺出Docker》撰寫時,Docker公司擁有約300~400名僱員,並舉辦名為DockerCon的年度會議。DockerCon的目標是聚攏不斷髮展的容器生態,並促進Docker和容器技術的推廣。

本書將始終使用“Docker公司”來指代Docker這家公司,其他地方出現的“Docker”都是指容器技術或開源項目。

注:

“Docker”一詞來自英國口語,意為碼頭工人(Dock Worker),即從船上裝卸貨物的人。

1.3 Docker運行時與編排引擎

多數技術人員在談到Docker時,主要是指Docker引擎。

Docker引擎是用於運行和編排容器的基礎設施工具。有VMware管理經驗的讀者可以將其類比為ESXi。ESXi是運行虛擬機的核心管理程序,而Docker引擎是運行容器的核心容器運行時。

其他Docker公司或第三方的產品都是圍繞Docker引擎進行開發和集成的。如圖2.2所示,Docker引擎位於中心,其他產品基於Docker引擎的核心功能進行集成。

Docker引擎可以從Docker網站下載,也可以基於GitHub上的源碼進行構建。無論是開源版本還是商業版本,都有Linux和Windows版本。

在本書撰寫時,Docker引擎主要有兩個版本:企業版(EE)和社區版(CE)。

每個季度,企業版和社區版都會發佈一個穩定版本。社區版本會提供4個月的支持,而企業版本會提供12個月的支持。

社區版還會通過Edge方式發佈月度版。

圖1.2 圍繞Docker引擎進行開發和集成的產品

從2017年第一季度開始,Docker版本號遵循YY.MM-xx格式,類似於Ubuntu等項目。例如,2018年6月第一次發佈的社區版本為18.06.0-ce。

注:

2017年第一季度以前,Docker版本號遵循大版本號.小版本號的格式。採用新格式前的最後一個版本是Docker 1.13。

1.4 Docker開源項目(Moby)

“Docker”一詞也會用於指代開源Docker項目。其中包含一系列可以從Docker官網下載和安裝的工具,比如Docker服務端和Docker客戶端。不過,該項目在2017年於Austin舉辦的DockerCon上正式命名為Moby項目。由於這次改名,GitHub上的docker/docker庫也被轉移到了moby/moby,並且擁有了項目自己的Logo,如圖2.3所示。

圖1.3 Moby的Logo

Moby項目的目標是基於開源的方式,發展成為Docker上游,並將Docker拆分為更多的模塊化組件。Moby項目託管於GitHub的Moby代碼庫,包括子項目和工具列表。核心的Docker引擎項目位於GitHub的moby/moby,但是引擎中的代碼正持續被拆分和模塊化。

作為一個開源項目,其源碼是公開可得的,在遵循Apache協議2.0的情況下,任何人都可以自由地下載、貢獻、調整和使用。

如果查看項目的提交歷史,可以發現其中包含來自如下公司的基礎技術:紅帽、微軟、IBM、思科,以及HPE。此外,還可以看到一些並非來自大公司的貢獻者。

多數項目及其工具都是基於Golang編寫的,這是谷歌推出的一種新的系統級編程語言,又叫Go語言。使用Go語言的讀者,將更容易為該項目貢獻代碼。

Mody/Docker作為開源項目的好處在於其所有的設計和開發都是開放的,並摒棄了私有代碼閉源開發模式下的陳舊方法。因此發佈過程也是公開進行的,不會再出現某個秘密的版本提前幾個月就宣佈要召開發佈會和慶功會的荒唐情況。Moby/Docker不是這樣運作的,項目中多數內容都是開放並歡迎任何人查看和作出貢獻的。

Moby項目以及更廣泛的Docker運動一時間掀起了一波熱潮。GitHub上已經有數以千計的提交請求(pull request),以及數以萬計的基於容器化技術的項目了,更不用說Docker Hub上數十億的鏡像下載。Moby項目已經給軟件產業帶來了翻天覆地的變化。

這並非妄想,Docker已經得到了廣泛的應用!

1.5 容器生態

Docker公司的一個核心哲學通常被稱為“含電池,但可拆卸”(Batteries included but removable)。

意思是許多Docker內置的組件都可以替換為第三方的組件,網絡技術棧就是一個很好的例子。Docker核心產品內置有網絡解決方案。但是網絡技術棧是可插拔的,這意味著Docker內置的網絡方案可以被替換為第三方的方案。許多人都會這樣使用。

早期的時候,經常出現第三方插件比 Docker 提供的內置組件更好的情況。然而這會對Docker公司的商業模式造成衝擊。畢竟,Docker公司需要依靠盈利來維持基業長青。因此,“內置的電池”變得越來越好用了。這也導致了生態內部的緊張關係和競爭的加劇。

簡單來說,Docker內置的“電池”仍然是可插拔的,然而越來越不需要將它們移除了。

儘管如此,容器生態在一種良性的合作與競爭的平衡中還是得以繁榮發展。在談及容器生態時,人們經常使用到諸如“co-opetition”[1]與“frenemy”[2]這樣的字眼。這是一個好現象!因為良性的競爭是創新之母。

1.6 開放容器計劃

如果不談及開放容器計劃(The Open Container Initiative, OCI)的話,對Docker和容器生態的探討總是不完整的。圖1.4所示為OCI的Logo。

圖1.4 OCI的Logo

OCI是一個旨在對容器基礎架構中的基礎組件(如鏡像格式與容器運行時,如果對這些概念不熟悉的話,不要擔心,本書後續會介紹到它們)進行標準化的管理委員會。

同樣,如果不談歷史的話,對OCI的探討也是不完整的。和所有的歷史記錄一樣,其版本取決於誰來講述它。所以,以下是我眼中的容器歷史。

我講述的這段簡短的歷史是,一個名為CoreOS的公司不喜歡Docker的某些行事方式。因此它就創建了一個新的開源標準,稱作“appc”,該標準涉及諸如鏡像格式和容器運行時等方面。此外它還開發了一個名為rkt(發音“rocket”)的實現。

兩個處於競爭狀態的標準將容器生態置於一種尷尬的境地。

這使容器生態陷入了分裂的危險中,同時也令用戶和消費者陷入兩難。雖然競爭是一件好事,但是標準的競爭通常不是。因為它會導致困擾,降低用戶接受度,對誰都無益。

考慮到這一點,所有相關方都盡力用成熟的方式處理此事,共同成立了OCI——一個旨在管理容器標準的輕量級的、敏捷型的委員會。

在《深入淺出docker》寫作時,OCI已經發布了兩份規範(標準):鏡像規範和運行時規範。

提到這兩項標準時,經常用到的比喻就是鐵軌。它們就像對鐵軌的尺寸和相關屬性達成一致,讓所有人都能自由地建造更好的火車、更好的車廂、更好的信號系統、更好的車站等。只要各方都遵循標準就是安全的。沒人會希望在鐵軌尺寸問題上存在兩個相互競爭的標準!

公平地說,這兩個OCI規範對Docker的架構和核心產品設計產生了顯著影響。Docker 1.11版本中,Docker引擎架構已經遵循OCI運行時規範了。

到目前為止,OCI已經取得了不錯的成效,將容器生態團結起來。然而,標準總是會減慢創新的步伐!尤其是對於超快速發展的新技術來說更是如此。這在容器社區引起了熱烈的討論。以我之見,這是好事!容器技術正在重塑世界,走在技術前列的人們有熱情、有想法,這很正常。期待關於標準和創新有更加熱烈的討論!

OCI在Linux基金會的支持下運作,Docker公司和CoreOS公司都是主要貢獻者。


異步社區


Docker到現在為止,已經越來越流行了。主要是因為他的便捷,加之當下微服務成為後端橫向擴展的一種解決思路,而微服務又是依賴於容器的。

那麼現在就來說說什麼是 Docker:

其實 docker 的概念就像是集裝箱,正如上圖所示。一對集裝箱,裝載有不同的 環境或軟件。

比如我有一艘船,需要運輸一批有毒的化學物質,還要運輸一批食材,牛肉,水果等,但是你不能將這些物質混合裝在一起吧,因為會影響到食物,到時候就損失一大筆 money 了。若是用集裝箱封裝起來就不會有剛剛的這種煩惱,裝食材的集裝箱裝食材,裝化學物質的集裝箱裝化學物質,兩者互不影響,由統一艘船運送。達到了隔離的目的。

在實際運用中,你的軟件開發工程師用的是 macOS ,你的測試工程師用得是 Ubuntu,你的線上環境是 CentOS ,顯然當項目測試和正式上線的時候會有環境衝突問題。如果是將項目封進一個 docker 鏡像,不同的操作系統只要將這個封好的鏡像部署就行。就可以直接使用了,省去了環境配置的問題。

下面是虛擬機與容器的一些對比圖:

以上是我的回答,希望能夠幫到你。


zone774


Docker,搬運工的意思。也就是說搬運容器continer。Docker是一個開源的應用容器引擎,讓開發者可以通過Docker打包他們的應用以及依賴包到一個可移植的容器Container中,容器與容器之間是完全隔離的,然後在任何主流的操作系統中開發、調試和運行。


DoDo在線


docker提供了一個app的虛擬現實。vm提供了一個os虛擬實現。 hypervisor提供了一個硬件的虛擬實現


兔子2049


Docker是一個開源的引擎,可以輕鬆的為任何應用創建一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試通過的容器可以批量地在生產環境中部署,包括VMs(虛擬機)、

bare metal

、OpenStack 集群和其他的基礎應用平臺。
  • web應用的自動化打包和發佈;
  • 自動化測試和持續集成、發佈;
  • 在服務型環境中部署和調整數據庫或其他的後臺應用;
  • 從頭編譯或者擴展現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境。

廬陵歐陽鎀


中文有時會讓人誤解,我覺得James Turnbull (去年已經被微軟拿到碗裡了,docker for windows)的解釋比較通俗易懂,當然和所有的其他技術一樣,親自實踐才是最塊的學習方法



分享到:


相關文章: