容器 What, Why, How - 天天5分鐘玩轉容器技術(6)

學習任何東西均可以按照3W的框架進行,容器技術也是同樣,先回答 What、Why 和 How 這三個問題。服務器

 

What - 什麼是容器?

容器是一種輕量級、可移植、自包含的軟件打包技術,使應用程序能夠在幾乎任何地方以相同的方式運行。開發人員在本身筆記本上建立並測試好的容器,無需任何修改就可以在生產系統的虛擬機、物理服務器或公有云主機上運行。網絡

容器與虛擬機

談到容器,就不得不將它與虛擬機進行對比,由於二者都是爲應用提供封裝和隔離。架構

容器由兩部分組成:框架

  1. 應用程序自己運維

  2. 依賴:好比應用程序須要的庫或其餘軟件工具

容器在 Host 操做系統的用戶空間中運行,與操做系統的其餘進程隔離。這一點顯著區別於的虛擬機。學習

傳統的虛擬化技術,好比 VMWare, KVM, Xen,目標是建立完整的虛擬機。爲了運行應用,除了部署應用自己及其依賴(一般幾十 MB),還得安裝整個操做系統(幾十 GB)。測試

下圖展現了兩者的區別。ui

如圖所示,因爲全部的容器共享同一個 Host OS,這使得容器在體積上要比虛擬機小不少。另外,啓動容器不須要啓動整個操做系統,因此容器部署和啓動速度更快,開銷更小,也更容易遷移。spa

Why - 爲何須要容器?

爲何須要容器?容器到底解決的是什麼問題?
簡要的答案是:容器使軟件具有了超強的可移植能力

容器解決的問題

咱們來看看今天的軟件開發面臨着怎樣的挑戰?

現在的系統在架構上較十年前已經變得很是複雜了。之前幾乎全部的應用都採用三層架構(Presentation/Application/Data),系統部署到有限的幾臺物理服務器上(Web Server/Application Server/Database Server)。

而今天,開發人員一般使用多種服務(好比 MQ,Cache,DB)構建和組裝應用,並且應用極可能會部署到不一樣的環境,好比虛擬服務器,私有云和公有云。

一方面應用包含多種服務,這些服務有本身所依賴的庫和軟件包;另外一方面存在多種部署環境,服務在運行時可能須要動態遷移到不一樣的環境中。這就產生了一個問題:

如何讓每種服務可以在全部的部署環境中順利運行?

因而咱們獲得了下面這個矩陣:

各類服務和環境經過排列組合產生了一個大矩陣。開發人員在編寫代碼時須要考慮不一樣的運行環境,運維人員則須要爲不一樣的服務和平臺配置環境。對他們雙方來講,這都是一項困難而艱鉅的任務。

如何解決這個問題呢?

聰明的技術人員從傳統的運輸行業找到了答案。

幾十年前,運輸業面臨着相似的問題。

每一次運輸,貨主與承運方都會擔憂因貨物類型的不一樣而致使損失,好比幾個鐵桶錯誤地壓在了一堆香蕉上。另外一方面,運輸過程當中須要使用不一樣的交通工具也讓整個過程痛苦不堪:貨物先裝上車運到碼頭,卸貨,而後裝上船,到岸後又卸下船,再裝上火車,到達目的地,最後卸貨。一半以上的時間花費在裝、卸貨上,並且搬上搬下還容易損壞貨物。

這一樣也是一個 NxM 的矩陣。

幸運的是,集裝箱的發明解決這個難題。

任何貨物,不管鋼琴仍是保時捷,都被放到各自的集裝箱中。集裝箱在整個運輸過程當中都是密封的,只有到達最終目的地才被打開。標準集裝箱能夠被高效地裝卸、重疊和長途運輸。現代化的起重機能夠自動在卡車、輪船和火車之間移動集裝箱。集裝箱被譽爲運輸業與世界貿易最重要的發明。

Docker 將集裝箱思想運用到軟件打包上,爲代碼提供了一個基於容器的標準化運輸系統。Docker 能夠將任何應用及其依賴打包成一個輕量級、可移植、自包含的容器。容器能夠運行在幾乎全部的操做系統上。

其實,「集裝箱」 和 「容器」 對應的英文單詞都是 「Container」。
「容器」 是國內約定俗成的叫法,多是由於容器比集裝箱更抽象,更適合軟件領域的原故吧。

我我的認爲:在老外的思惟中,「Container」 只用到了集裝箱這一個意思,Docker 的 Logo 不就是一堆集裝箱嗎?

Docker 的特性

咱們能夠看看集裝箱思想是如何與 Docker 各類特性相對應的。

特性              集裝箱 Docker
打包對象 幾乎任何貨物 任何軟件及其依賴
硬件依賴 標準形狀和接口容許集裝箱被裝卸到各類交通工具,整個運輸過程無需打開              容器無需修改即可運行在幾乎全部的平臺上 -- 虛擬機、物理機、公有云、私有云             
隔離性 集裝箱能夠重疊起來一塊兒運輸,香蕉不再會被鐵桶壓爛了 資源、網絡、庫都是隔離的,不會出現依賴問題
自動化 標準接口使集裝箱很容易自動裝卸和移動 提供 run, start, stop 等標準化操做,很是適合自動化
高效性 無需開箱,可在各類交通工具間快速搬運 輕量級,可以快速啓動和遷移
職責分工 貨主只需考慮把什麼放到集裝箱裏;承運方只需關心怎樣運輸集裝箱 開發人員只需考慮怎麼寫代碼;運維人員只需關心如何配置基礎環境

容器的優點

對於開發人員 - Build Once, Run Anywhere

容器意味着環境隔離和可重複性。開發人員只需爲應用建立一次運行環境,而後打包成容器即可在其餘機器上運行。另外,容器環境與所在的 Host 環境是隔離的,就像虛擬機同樣,但更快更簡單。

對於運維人員 - Configure Once, Run Anything

只須要配置好標準的 runtime 環境,服務器就能夠運行任何容器。這使得運維人員的工做變得更高效,一致和可重複。容器消除了開發、測試、生產環境的不一致性。

How - 容器是如何工做的?

從下節開始咱們將學習容器核心知識的最主要部分。首先會介紹 Docker 的架構,而後分章節詳細討論 Docker 的鏡像、容器、網絡和存儲。

二維碼+指紋.png

相關文章
相關標籤/搜索