進入主題以前,咱們先來欣賞一下Docker的Logo
已經有審美感很強的同窗看出來了,這就是一條鹹魚..docker
額,不對,這是一條鯨魚,鯨魚上載滿了集裝箱, 能夠看「原型」感覺一下
官方團隊對Logo的解釋:「The logo is a Whale carrying a stack of containers. It is on its way to deliver those to you」數據庫
Docker直譯過來是碼頭工人,然而Docker給人的第一感受是容器,容器技術英譯爲Linux Container, Container的直譯有集裝箱,容器兩個意思,若是要形象的理解Linux Container的話仍是叫集裝箱技術比較好(能夠結合着上圖及LOGO理解這句話),因爲這涉及到學術交流,及中國本土文化,念集裝箱技術會比較奇怪,因此咱們都稱之爲容器技術npm
咱們都知道碼頭裏的集裝箱是運載貨物用的,它是一種按規格標準化的鋼製箱子。集裝箱的特點,「在於其格式劃一,並能夠層層重疊, 集裝箱與集裝箱之間互不影響」 緩存
因而乎,IT領域借鑑了這一理念,你們就在想,有沒有可能你們「只須要關注程序自己?」服務器
換句話來講,就是我部署一個服務運行好後,我再想移植到另一個地方,網絡
「不用再安裝一套操做系統和依賴環境。」ui
這就像集裝箱運載同樣,我把一輛蘭博基尼跑車(比如開發好的應用APP),打包放到一容器集裝箱裏,它經過貨輪能夠垂手可得的從上海碼頭(CentOS7.2環境)運送到紐約碼頭(Ubuntu14.04環境)。並且運輸期間,個人蘭博基尼(APP)沒有受到任何的損壞(文件沒有丟失),在另一個碼頭卸貨後,依然能夠完美風騷的賽跑(啓動正常)。請結合下圖理解
spa
❝定義: Docker是一個開源的應用容器引擎,開發者能夠打包他們的應用及依賴到一個可移植的容器中,發佈到流行的Linux機器上,也可實現虛擬化操作系統
❞設計
進一步認識Docker以前,我準備了兩個關鍵詞
❝定義: Virtual Machine(又名VM) 虛擬化,是指經過虛擬化技術將一臺計算機虛擬爲多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每一個邏輯計算機可運行不一樣的操做系統,而且應用程序[1]均可以在相互獨立的空間內運行而互不影響,從而顯著提升計算機的工做效率
❞
通俗點來說就是虛擬化是爲一些組件(例如虛擬應用、服務器、存儲和網絡)建立基於軟件的(或虛擬)表現形式的過程。
基於hypervisor(虛擬機管理系統)的虛擬化方式能夠最大程度上提供虛擬化管理的靈活性。各類不一樣操做系統的虛擬機都能經過 hypervisor 來衍生、運行、銷燬。
然而,隨着時間推移,人們發現hypervisor這種方式麻煩愈來愈多。爲何?由於對於hypervisor環境來講,每一個虛擬機都須要運行一個完整的操做系統以及其中安裝好的大量應用程序, 以下圖
但實際生產應用時,「咱們更關注的是本身部署的應用程序自己」
❝定義: 英文爲Container 有效的將單個操做系統的資源劃分到孤立的組中,以便更好的在孤立的組之間平衡有衝突的資源使用需求
❞
容器技術嚴格來講並非虛擬化,沒有客戶機操做系統,是共享內核的。容器能夠視爲軟件供應鏈的集裝箱,可以把應用須要的運行環境、緩存環境、數據庫環境等等封裝起來,以最簡潔的方式支持應用運行
爲了更好的理解,先講你們講個小故事
小A同窗想要造一棟別墅,他重金請來了高級設計師,高級建造師,等各類高級工人,熱火朝天曆時二個月房子建成了,半年後,小A同窗因爲工做調動須要換到另外一個城市,他只好在另外一個城市花了重金又打造了一棟別墅
小A有一個朋友小B,跟小A是一樣的場景,惟一不一樣的是,小B認識一個魔法師,這個魔法師施展了法術(構建鏡像),將小B的別墅直接複製了一份(鏡像),裝到了小B的雙肩包(倉庫)裏,小B去到另外一個城市找了一片空地(容器)直接將裝在書包裏的房子拿了出來,拿出來的房子就能變成跟小B在原城市如出一轍的房子
聽完了故事,我們再來理解docker的兩句口號就更好理解了
若是進行形象的表述,咱們能夠將 Docker 鏡像理解爲包含應用程序以及其相關依賴的一個基礎文件系統(存儲着咱們的程序和數據文件等等信息,鏡像層能夠理解爲基本的鏡像,能夠經過組合多個鏡像層生成一個新的鏡像;也能夠將一個鏡像能夠做爲一個鏡像層,成爲組合別的鏡像的一份子),在 Docker 容器啓動的過程當中,它以只讀的方式被用於建立容器的運行環境,以下圖
容器和鏡像同樣,也是若干層的疊加,惟一區別是全部只讀層的最上面一層,是一層可讀可寫層,能夠記住這個簡單的公式:容器 = 容器鏡像 + 可讀可寫層 ,以下圖
前面說鏡像的時候咱們有提到它是一個靜態文件系統,那麼既然容器跟它同樣,因此,鏡像跟容器都是一個靜態概念,可是,容器是能夠run起來的,當容器run起來時,就會成爲一個被稱做運行態容器的東西,以下圖所示
運行態容器(run container)是由靜態容器(可讀寫的靜態文件系統)、一個隔離的進程空間、以及運行於其中的程序進程所組成。咱們一般用docker run運行起來的其實就是運行態容器,而使用docker stop中止後的容器,就是靜態容器
倉庫(Repository)是最易理解的部分,你們都用過Node的包管理Npm,這個概念是一致的,倉庫分爲兩種,本地及遠程,當咱們build好一個鏡像後,這個鏡像會先存放到本地倉庫,當咱們須要利用網絡進行分發時,咱們能夠push到遠程倉庫,後續經過網絡下載使用
官方的npm源下載有時候特別慢,這個是因爲XX的緣由,而後咱們就須要使用國內的鏡像源,那麼docker 的操做也是同樣的
一種技術的採用,必定有它適合的場景和優點。容器技術的流行緣由,總結下來可能主要歸功於如下的這些特性
經過本文咱們對Docker有了一個基本的認識, 知道了Docker Logo並非一條鹹魚,容器技術與虛擬技術之間的差別,Docker的三大核心概念及其特性
但Docker中涉及的內容遠不止於此,帥編也會在下個章節爲你們講解"實際工做場景中的Docker應用"
點亮在看,持續關注,咱們下期再見
[1]
應用程序:https://baike.baidu.com/item/...
近期