如何通俗的解釋“Docker”?zone7742018-05-01 00:02:14

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

如何通俗的解釋“Docker”?

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

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

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

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

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

如何通俗的解釋“Docker”?

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

如何通俗的解釋“Docker”?

如何通俗的解釋“Docker”?非同步社群2019-04-13 09:47:41

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

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

Docker公司。

Docker的容器執行時和編排引擎。

Docker開源專案(Moby)。

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

如何通俗的解釋“Docker”?

深入淺出Docker

1。1Docker——簡介

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

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

1。2Docker公司

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。1Docker標誌

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

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

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

注:

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

1。3Docker執行時與編排引擎

多數技術人員在談到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。4Docker開源專案(Moby)

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

圖1。3Moby的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。4OCI的Logo

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

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

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

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

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

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

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

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

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

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

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

如何通俗的解釋“Docker”?T鍋俠2020-03-11 07:44:52

假設您需要構建一個應用程式。這可能是下一個頭條,下一個微信,下一個百度,下一個京東,或者別的什麼。為了使該應用程式向公眾開放,您需要一些地方來託管它。以前,這意味著您需要購買或者租用一個稱為“伺服器”的專用 計算機,它基本上是一臺專門用於託管網站或 Web 服務的伺服器,而不是您自己的個人計算機。然後將它託管到資料中心

如何通俗的解釋“Docker”?

然後,“雲”的時代來了。您可以將您的程式放到像阿里雲這樣的雲公司的“資料中心”對外提供服務。與 Web 託管服務不同,這些公司採用了一種稱為“虛擬化”的概念,即硬體資源透過作業系統功能進一步細分隔離,並更最佳化地向需要這些資源的客戶提供作業系統。您只為所使用的作業系統服務付費,而不是使用整個物理伺服器。對於您自己和雲公司來說,這通常更加划算。

如何通俗的解釋“Docker”?

但即使是

傳統的雲計算也無法避免一件事——使用大量的作業系統

,如windows和Linux(RHEL,Ubuntu,Fedora等)。這些OS可以輕鬆地超過 1 GB 的大小,也稱為“OS 映像”。但是,您的應用程式可能只有 300 MB 的大小。但是虛擬化產生的虛擬化環境,其大小為 1 GB 。您的應用程式遠小於該虛擬機器。您是不是覺得這1GB成本有點高。

Docker 就是為了解決這個問題。Docker 以以下方式進行操作。可以共享某些公共資源,而不是為每個應用程式託管一個作業系統。並且有一種叫做“docker 引擎”的東西,它位於作業系統的上層,如下所示。

如何通俗的解釋“Docker”?

從上圖中您可以直觀地觀察使用容器時“app ”是如何變得更小。從某種意義上說,這是一個非常簡單的解決方案,只不過是

在作業系統和應用程式之間引入另一層來最佳化資源,使用並減少對冗餘作業系統的需求

。這是開發應用程式的重大突破,因為這種抽象級別解決了一個重大的問題— 減少配置巨型虛擬機器的麻煩,只託管其應用程式所必需依賴的最小“容器”。

採用 docker 或容器的好處是,應用程式可以交付的更快、部署得更快、啟動更快、停止更快、變更升級另一個所謂的“映像”更快,極大的提升了程式開發,交付、升級變更的速度,相對減少資源的浪費。

如何通俗的解釋“Docker”?諧雲2022-03-16 10:20:53

Docker是使用時下很火的Golang語言進行開發的,其技術核心是Linux核心的Cgroup,Namespace和AUFS類的Union FS等技術,這些技術都是Linux核心中早已存在很多年的技術,所以嚴格來說並不是一個完全創新的技術,Docker透過這些底層的Linux技術,對Linux程序進行封裝隔離,而被隔離的程序也被稱為容器,完全獨立於宿主機的程序。所以Docker是容器技術的一種實現,也是作業系統層面的一種虛擬化,與虛擬機器的透過一套硬體再安裝作業系統完全不同。

如何通俗的解釋“Docker”?上坡逆風下坡順風2022-03-17 21:56:47

程序沙箱

如何通俗的解釋“Docker”?芒鞋輕竹杖2019-04-13 14:44:44

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

如何通俗的解釋“Docker”?

如何通俗的解釋“Docker”?DoDo線上2020-02-11 14:28:24

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

如何通俗的解釋“Docker”?快禿頭的可口可愛2021-09-26 17:11:39

級虛擬化(通俗解釋:Docker內嵌極小型系統,例如Linux只有5M多,windows也是)。它是核心級的虛擬化。期望達到使專案執行環境“一次封裝,到處執行的目的”。

在Docker裡面可以設定使用Windows還是Linux系統,預設是用Linux系統,基於Ubuntu的,只有5M多,包含了最基本功能。

利用docker建立的執行環境叫做docker容器,容器是透過docker映象建立的,docker映象檔案可以放在私有倉庫中也可以放在共有倉庫中。

學習Docker主要做兩件事情:

1。在Docker安裝軟體

2。把專案部署到Docker

「連結」通俗易懂(基礎+進階)

【此回答轉自樂位元組】

如何通俗的解釋“Docker”?廬陵歐陽鎀2018-02-12 16:17:18

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

bare metal

、OpenStack 叢集和其他的基礎應用平臺。

web應用的自動化打包和釋出;

自動化測試和持續整合、釋出;

在服務型環境中部署和調整資料庫或其他的後臺應用;

從頭編譯或者擴充套件現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境。

如何通俗的解釋“Docker”?兔子20492020-02-08 00:43:40

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

如何通俗的解釋“Docker”?程式碼加油站2020-12-17 16:17:16

我們的專案可以打包建立成docker映象,docker有類似git的push功能,可以將我們的專案映象上傳到類似github的服務上面,還可以pull下來直接執行。

想象一下我們在手機裡面下載軟體的過程。我們需要一個app,在蘋果軟體商店或安卓軟體市場找到並下載到本地執行,docker的映象釋出和下載過程與此類似。