Docker這麼夯,但我在學生時代一次也沒玩過它,結果出了社會還是要自己把它玩起來QAQ

這一篇會講一些Docker名詞和簡單架構,只是想快速玩玩Docker或是已經有概念的可以直接跳過這篇XD

有一點一定要澄清!Docker真的不是Virtual Machine!!!

為什麼這麼說呢?就讓我們看下去~

 

首先,Docker的出現其實是為了在各種環境中能迅速的佈建應用程式(applications)。

Docker會將應用程式所需的環境和應用程式包在一起,而在新環境中只要能使用Docker,便能迅速使用被Docker包起來的應用程式。

蛤?你說這樣講很抽象?那我換個說法~

 

在沒有遊戲機的年代,假設你想要玩跳棋,你家就必須有跳棋的棋盤跟棋子;如果想玩圍棋,就必須有圍棋的棋盤跟棋子;如果想玩將棋;那你就得有將棋的棋盤跟棋子。

你想玩什麼(應用程式),就得有相對應的設備(環境部署)。當你需要越來越多遊戲(應用程式)時,家裡可能就會越來越擠(你的主機空間越來越小)。

另外需注意一點,不同的環境部署,很可能彼此之間還會互相影響。

譬如說,應用程式A需要python 2.3,但是應用程式B需要Python 2.6,這時候你就會很頭痛我到底該裝誰咧。

 

那Docker在上面的例子會對應到什麼呢?答案是一台多插槽的遊戲機~~~~~

家裡只需要一台遊戲機(Docker),而應用程式則被包成一個一個的遊戲光碟(Docker image),每按一次開始鍵,就可以有一個全新的遊戲(Docker container)可以玩。

 

如果你覺得遊戲的舉例讓你更看不懂的話,拜託,趕快忘掉XD

我下面乖乖的講白話文給你聽~

 

Docker Image

  • 唯讀檔,不可被修改
  • 包含作業系統OS和應用程式需要的工具
  • 可以用來建立Container

Docker Container

  • 透過Image執行起來的Process。一個Container指的就是在不可寫入的Image層的上方,加入一層可寫入層。所以多個Containers可以同時架在同一個Image之上。
  • 在Container中擁有root權限,可以看作是沒有UI介面的Linux環境。
  • 每個Container互相獨立不影響彼此。

 

你可能會覺得,蛤~這樣聽起來Docker還是跟VM一樣啊~

那我講一個差別最大的地方:

當我打開一個VM,在裡面做了一些設定和變動以後(譬如我寫入一個Hello.c)。關機之後再開機,Hello.c還存在。<=因為VM本身就是虛擬機器,本來就會記住你做的變動

但是Docker不一樣,假設我開了一個Container之後,寫入一個Hello.c。離開Container(不是刪除),再進入Container,Hello.c還存在。

但是如果我刪除Container,或是用同一個Image檔再跑起一個新的Container的時候,Hello.c都不存在了。

Docker_Container.jpg

 

Docker Repository

  • 集中存放Docker image檔案的倉庫
  • 一個倉庫可能有多個image檔案(舉例來說,Ubuntu倉庫有多個版本號的Image檔)
  • 有Public, Private, official等等的區別

Docker Registry

  • 倉庫註冊伺服器,集中存放多個倉庫
  • Docker Hub (可以想成GitHub的概念)

 

下面來比較一下VM跟Docker Container的整體架構

VM_Container.jpg

傳統VM的架構中有一層Hypervisor,也叫做Virtual Machine Monitor(VMM) - 虛擬機器監視器。

Hypervisor又可以分成兩種type:

 
別名
安裝位置
產品
Type 1
(Bare-Metal Hypervisor)
Native VM
直接安裝在空機或新機上
VMware ESX/ESXi、RedHat KVM
Type 2
(Hosted Hypervisor)
Hosted VM
必須安裝在OS上(例如Windows、Linux等等)
VMware Workstation、Sun VirtualBox、Parallels Desktop

 

而對應到Container架構,這邊就是Docker engine的部分。差別上,每個VM有自己獨立的Guest OS,但是Docker其實是共用Host OS的底層資源。

更直接一點的測驗方式,你分別在一台linux 32bit的VM和Container中,輸入 $uname -a 來查看系統的版本,你會發現Container中的系統資訊怎麼跟VM版的不一樣?其實這就是因為Docker Container是跟主機共用OS的啦~

 

看到這裡,應該心裡多多少少有一點底。VM跟Docker真的不一樣啦~~~~

只要你看完有這種感想,這篇就成功啦~~~

==============  參考分隔線  ==============

arrow
arrow

    幽濟 發表在 痞客邦 留言(1) 人氣()