1. 程式人生 > >【Docker學習總結】1.Docker容器技術介紹

【Docker學習總結】1.Docker容器技術介紹

一般來說,我們編寫好的應用程式,需要部署在響應的伺服器中,而伺服器則是一臺安裝了OS作業系統的計算機。
在該計算機中,執行我們的應用程式,通過網路對外提供服務。期間我們的應用程式在不停的使用伺服器計算機的軟體
和硬體,來滿足它的計算和執行。

在介紹Docker之前,我們先來介紹一下容器技術。
而目前的網際網路行業,越來越多的應用服務、微服務以及分散式服務,應運而生,而讓那麼多的服務每一個都執行在
一個獨立的伺服器中,顯然需要很高的硬體以及運營成本,所以大多數企業選擇了使用“容器”來解決多應用部署的問題。

那麼,什麼是容器呢?

一、什麼是容器

容器技術其實就是一種虛擬化方案,與傳統的虛擬機器不同,傳統的虛擬機器,是通過中間層,將一臺或者多臺獨立的機器虛擬運行於物理硬體之上,而容器則是直接運行於作業系統之上的使用者空間。因此,容器虛擬化,也被成為作業系統虛擬化。
由於依賴於作業系統的特性,所以容器只能執行與底層作業系統相同或相似核心的作業系統。
而Docker使用的作業系統,正是依賴於Linux核心的Namespace和CGroups等特性,所以Docker上只能執行Linux型別的系統,而不能執行Windows系統,這也正是容器相對於虛擬機器系統,在系統靈活性上的劣勢。

二、容器技術的優點


上圖左邊是執行在一臺機器上的兩臺虛擬機器,右邊是執行在一臺機器上的兩個容器。從圖中可以看出,容器需要使用的磁碟空間比虛擬機器要少。因為當使用虛擬機器部署應用時,不但包含了應用和其依賴的庫,還需要包含一個完整的作業系統,原本只需要幾十MB的應用,卻需要動輒幾十GB的作業系統來支援。而右邊的容器,只需要包含應用程式和其依賴的庫,資源佔用大大減少。
另外,虛擬機器需要模擬硬體的行為,對記憶體和CPU的損耗也相當得大。所以,同樣配置的伺服器,使用容器技術,比使用虛擬機器能夠提供更多的服務能力,服務更多的使用者。

那麼,容器有那麼多的優點,為什麼直到Docker的出現,才成為大家關注的重點呢?一個重要的原因就是容器技術的複雜性。容器本身就比較複雜嗎,它依賴於Linux核心的很多特性,而且它不易安裝,也不容易管理和實現自動化。而Docker就是為了改變這一點而出現的。

三、什麼是Docker

Docker的Logo是一隻載滿了集裝箱的鯨魚:

Docker自己是這樣說鯨魚的:The logo is a Whale carrying a stack of containers. It is on its way to deliver those to you.它託著許多集裝箱。我們可以把宿主機當做這隻鯨魚,把相互隔離的容器可看成集裝箱,每個集裝箱中都包含自己的應用程式。鯨魚或許代表著創始人Solomon Hykes眼中的網際網路願景,就像20世紀50年代集裝箱顛覆了全球物資運輸方式一樣,它將會顛覆資訊運輸方式,讓貨物在網際網路的火車、汽車、輪船之間暢通無阻。

Docker是一個能夠將開發的應用程式,自動部署到容器的開源引擎。它使用go語言編寫,其GitHub的地址為:https://github.com/docker/docker
Docker在2013年初,由dotCloud(也就是現在的Docker公司)釋出,基於Apache2.0開源授權協議。

Docker有什麼特別之處呢?它在虛擬化的容器環境中,增加了程式部署引擎,該引擎的目標,就是提供一個輕量、快速的環境,能夠執行開發者程式,並能方便高效的將應用程式從開發者的環境,部署到測試環境,然後再部署到生產環境。

四、Docker的目標

(1)提供簡單、輕量的建模方式
Docker十分容易上手,使用者只需要幾分鐘,就可以將自己的程式“Docker化”。大多數Docker容器只需要不到1秒的時間,即可執行起來。由於去除了管理程式的開銷,Docker容器擁有非常高的效能,同時,同一臺宿主機中也可以執行更多的容器,使使用者儘可能的充分利用系統資源。

(2)職責的邏輯分離
使用Docker,開發人員只需要關心容器中執行的應用程式,而運維人員只需要關心如何管理容器。Docker設計的目的,就是要加強開發人員寫程式碼的開發環境,與應用程式要部署的生產環境的一致性。

(3)快速高效的開發生命週期
Docker的目標之一,是縮短程式碼從開發、測試到部署、上線執行的週期,讓我們的應用程式具備可一致性。在容器中開發,以容器的形式交付和分發,這樣,開發、測試、生產都使用相同的環境,也就避免了額外的除錯,以及部署上的開銷。這樣就能有效的縮短產品的上線週期。

(4)鼓勵使用面向服務的架構
Docker推薦單個容器只執行一個應用程式或程序,這樣就形成了一個分散式的應用模型。在這種模型下,應用程式或服務,都可以表示為一系列內部互聯的容器,從而使分散式部署、擴充套件和除錯應用程式都變得非常簡單。這就像我們在開發中的“高內聚、低耦合、單一任務”的思想。這樣就能避免在同一伺服器上部署不同服務時,
可能帶來的服務之間的互相影響。這樣在執行過程中,出現問題,也比較容易定位問題的所在。

五、Docker的使用場景

(1)使用Docker容器開發、測試、部署服務
因為Docker本身非常輕量化,所以本地開發人員可以構建、執行並分享Docker容器。容器可以在開發環境中建立,然後再提交到測試,最終進入生產環境。

(2)建立隔離的執行環境
在很多企業應用中,同一服務的不同版本,可能服務於不同的使用者。而使用Docker,非常容易建立不同的生產環境來執行不同的服務。

(3)搭建測試環境
由於Docker的輕量化,所以開發者很容易利用Docker在本地搭建測試環境,用來測試程式在不同系統下的相容性,甚至是搭建集群系統的測試。而學生也很容易利用Docker來搭建學習開發的環境。

(4)構建多使用者的平臺即服務(PaaS)基礎設施

(5)提供軟體即服務(SaaS)應用程式

(6)高效能、超大規模的宿主機部署

目前AWS(亞馬遜雲平臺)、Windows Azure(微軟雲端計算作業系統)等公有云服務,都提供了對Docker的支援,使開發者可以藉助雲平臺,利用Docker搭建PaaS、SaaS等服務。
同時,也有開發者,在使用Open Stack和Docker結合,提供PaaS、SaaS的服務,使Docker在雲端計算服務領域,有著非常廣闊的前景。

下一篇我們來學習Docker的基本組成。

參考資料:
《極客學院Docker學習》教學視訊

轉載請註明出處:https://blog.csdn.net/acmman/article/details/83212634