[Day01]: 甚麼是Docker?與VM有甚麼不同?


你可能有聽過 Docker 這個技術名詞,但你真的了解 Docker是甚麼嗎?

Docker 是一種實現於作業系統層面的虛擬化技術


虛擬化技術

是一種資源管理技術
可以將電腦的各種實體資源
予以抽象、轉換後呈現出來
並可供分割、組合
為一個或多個電腦組態環境
-維基百科

虛擬化技術大致可以分為三類

  • 硬體層級虛擬化
    藉由 Hypervisor,主體機器可以運行多台客體機器
    例如:VirtualBox、Hyper-V、Citrix

  • 作業系統層級虛擬化
    例如:VPS、KVM、Docker

  • 程式語言虛擬化
    高階語言轉譯成bytecode,透過虛擬機轉譯成
    可執行命令,通常可跨作業系統、跨語言。
    例如:Oracle Java、Microsoft NET、Parrot

若把虛擬機與Docker稍作比較


實現於硬體層級虛擬化的虛擬機,需要虛擬出整個硬體環境CPU、作業系統、Memory Size等等,並打包在VM Image中,而Docker是透過Docker Engine 來管理和配置映像(image)並產生容器(Container),而作業系統在Docker中也是透過一層層的映像檔來配置。

而上圖中的非 Linux 的 Host,為何還是需要一個Hypervisor?
因為 Docker 底層的容器隔離技術一開始是採用了Linux Kernel中的 命名空間(namespace)以及控制群組(control groups,CGroups)來實現的。

因此windows 用戶可以使用官方的 Docker Desktop來配置環境,或使用現有虛擬機直接安裝 Docker在上面,後者也是本系列文使用的環境配置。


所以 Docker到底可以幹嘛呢?

Docker的優點

  • 效能高、啟動速度快
  • 部屬時間短:幾行指令就可啟用服務
  • 移植時間短:Docker可降低程式之間的耦合性,可以將服務設定一次打包
  • MB級、羽量級應用,十分省硬碟空間

假設現在要建構一個典型的 LAMP (Linux + Apache + MySQL + PHP)伺服器架構,一般作法就是分別安裝各自軟體和其依賴程式庫,安裝後再進行繁瑣的環境設定,調整其相容性,並進行聯合除錯,一大堆。

而Docker就是為了簡化這些服務的建構和設定,開發人員可建構一套用來開發的容器集合,開發完成後再透過 Docker 在任何實體、虛擬機中輕鬆移植部屬,提高整體效率。

結論

Docker在現今分散式系統中已經有著舉足輕重的地位,並且有著強大的社群力量加以輔佐,藉由許多開發者針對需求對Docker進行改進,並開發出解決這些問題的軟體,再使其開源或提交到Docker Hub上,優質的Docker應用再回饋到其他使用者身上,形成正向的技術生態圈。

隨著新的技術不停誕生,你,也準備好上船了嗎?


參考資料

[1] https://www.qa-knowhow.com/?p=2123

#docker #羽量級服務 #虛擬化技術 #容器技術
Docker 7天初探
用7 天了解Docker 的技術原理以及基本操作






Related Posts

用C++做資料分析 | CERN ROOT 教學[02] - 資料匯入與簡單分析

用C++做資料分析 | CERN ROOT 教學[02] - 資料匯入與簡單分析

實作餐廳網站 FAQ 頁面

實作餐廳網站 FAQ 頁面

Context API 效能問題 - use-context-selector 解析

Context API 效能問題 - use-context-selector 解析



Comments