1. 程式人生 > 其它 >【搬運】如何通俗的理解docker?

【搬運】如何通俗的理解docker?

歷史:

  2010年,幾個搞IT的年輕人,在美國舊金山成立了一家名叫“dotCloud”的公司。這家公司主要提供基於PaaS的雲端計算技術服務。具體來說,是和LXC有關的容器技術(LXC,就是Linux容器虛擬技術(Linux container)),dotCloud公司將自己的容器技術進行了簡化和標準化,並命名為——Docker

  辦不下去了,在2013年3月,dotCloud公司的創始人之一,Docker之父,28歲的Solomon Hykes正式決定,將Docker專案開源。

  Docker火了之後,dotCloud公司乾脆把公司名字也改成了Docker Inc。

---------------------------------------------------------------------------------------------------------------------------------------------------------------

 

Docker和容器技術為什麼會這麼火爆?

說白了,就是因為它“輕”。在容器技術之前,業界的網紅是虛擬機器。虛擬機器技術的代表,是VMWare和OpenStack【大家可以瞭解虛擬機器與容器的區別】。虛擬機器屬於虛擬化技術。而Docker這樣的容器技術,也是虛擬化技術,屬於輕量級的虛擬化。

虛擬機器:

相信很多人都用過虛擬機器。虛擬機器,就是在你的作業系統裡面,裝一個軟體,然後通過這個軟體,再模擬一臺甚至多臺“子電腦”出來。在“子電腦”裡,你可以和正常電腦一樣執行程式,例如開QQ。如果你願意,你可以變出好幾個“子電腦”,裡面都開上QQ。“子電腦”和“子電腦”之間,是相互隔離的,互不影響。

                                                                           

 

 

 容器:

虛擬機器雖然可以隔離出很多“子電腦”,但佔用空間更大,啟動更慢,虛擬機器軟體可能還要花錢(例如VMWare)。而容器技術恰好沒有這些缺點。它不需要虛擬出整個作業系統,只需要虛擬一個小規模的環境(類似“沙箱”)。它啟動時間很快,幾秒鐘就能完成。而且,它對資源的利用率很高(一臺主機可以同時執行幾千個Docker容器)。此外,它佔的空間很小,虛擬機器一般要幾GB到幾十GB的空間,而容器只需要MB級甚至KB級。

                                                                      

 

正因為如此,容器技術受到了熱烈的歡迎和追捧,發展迅速。

 

具體來看看Docker:

大家需要注意,Docker本身並不是容器,它是建立容器的工具,是應用容器引擎。想要搞懂Docker,其實看它的兩句口號就行。

 

第一句,是“Build, Ship and Run”。

 

 

 

 

也就是,“搭建、傳送、執行”,三板斧。

 

舉個例子:

我來到一片空地,想建個房子,於是我搬石頭、砍木頭、畫圖紙,一頓操作,終於把這個房子蓋好了。

 

 

                                        

結果,我住了一段時間,想搬到另一片空地去。這時候,按以往的辦法,我只能再次搬石頭、砍木頭、畫圖紙、蓋房子。但是,跑來一個老巫婆,教會我一種魔法。

 這種魔法,可以把我蓋好的房子複製一份,做成“映象”,放在我的揹包裡。

 

 

 

 

等我到了另一片空地,就用這個“映象”,複製一套房子,擺在那邊,拎包入住。

 

 

 

 

怎麼樣?是不是很神奇?

所以,Docker的第二句口號就是:“Build once,Run anywhere(搭建一次,到處能用)”。

 

Docker技術的三大核心概念,分別是:

  • 映象(Image)
  • 容器(Container)
  • 倉庫(Repository

 

  我剛才例子裡面,那個放在包裡的“映象”,就是Docker映象。而我的揹包,就是Docker倉庫。我在空地上,用魔法造好的房子,就是一個Docker容器。說白了,這個Docker映象,是一個特殊的檔案系統。它除了提供容器執行時所需的程式、庫、資源、配置等檔案外,還包含了一些為執行時準備的一些配置引數(例如環境變數)。映象不包含任何動態資料,其內容在構建之後也不會被改變。

  也就是說,每次變出房子,房子是一樣的,但生活用品之類的,都是不管的。誰住誰負責添置。每一個映象可以變出一種房子。那麼,我可以有多個映象呀!也就是說,我蓋了一個歐式別墅,生成了映象。另一個哥們可能蓋了一箇中國四合院,也生成了映象。還有哥們,蓋了一個非洲茅草屋,也生成了映象。。。

  這麼一來,我們可以交換映象,你用我的,我用你的,豈不是很爽?

 

 

 

 

於是乎,就變成了一個大的公共倉庫。負責對Docker映象進行管理的,是Docker Registry服務(類似倉庫管理員)。

不是任何人建的任何映象都是合法的。萬一有人蓋了一個有問題的房子呢?

所以,Docker Registry服務對映象的管理是非常嚴格的。 

最常使用的Registry公開服務,是官方的Docker Hub,這也是預設的 Registry,並擁有大量的高質量的官方映象。

好了,說完了Docker,我們再把目光轉向K8S。

 

K8S:

就是基於容器的叢集管理平臺,它的全稱,是kubernetes。

 

 Kubernetes 這個單詞來自於希臘語,含義是舵手或領航員。K8S是它的縮寫,用“8”字替代了“ubernete”這8個字元。

來源:

和Docker不同,K8S的創造者,是眾人皆知的行業巨頭——Google。然而,K8S並不是一件全新的發明。它的前身,是Google自己搗鼓了十多年的Borg系統。K8S是2014年6月由Google公司正式公佈出來並宣佈開源的。同年7月,微軟、Red Hat、IBM、Docker、CoreOS、 Mesosphere和Saltstack 等公司,相繼加入K8S。之後的一年內,VMware、HP、Intel等公司,也陸續加入。2015年7月,Google正式加入OpenStack基金會。與此同時,Kuberentes v1.0正式釋出。目前,kubernetes的版本已經發展到V1.1。

 

K8S的架構概括:

一個K8S系統,通常稱為一個K8S叢集(Cluster)。

 

這個叢集主要包括兩個部分:

  • 一個Master節點(主節點)
  • 一群Node節點(計算節點)

 

 

 

 

一看就明白:Master節點主要還是負責管理和控制。Node節點是工作負載節點,裡面是具體的容器。深入來看這兩種節點。首先是Master節點。

 

 

 

Master節點包括API Server、Scheduler、Controller manager、etcd。

 

1,API Server是整個系統的對外介面,供客戶端和其它元件呼叫,相當於“營業廳”。

 

2,Scheduler負責對叢集內部的資源進行排程,相當於“排程室”。

 

3,Controller manager負責管理控制器,相當於“大總管”。

 

然後是Node節點。

 

 

Node節點包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可選),還有就是Pod。

Pod是Kubernetes最基本的操作單元。一個Pod代表著叢集中執行的一個程序,它內部封裝了一個或多個緊密相關的容器。除了Pod之外,K8S還有一個Service的概念,一個Service可以看作一組提供相同服務的Pod的對外訪問介面。這段不太好理解,跳過吧。

Docker,不用說了,建立容器的。

Kubelet,主要負責監視指派到它所在Node上的Pod,包括建立、修改、監控、刪除等。

Kube-proxy,主要負責為Pod物件提供代理。

Fluentd,主要負責日誌收集、儲存與查詢。