docker 介紹 (1): docker介紹

在這一系列文章中, 將介紹docker這一種虛擬化技術,
docker作為一種作業系統層虛擬化技術, 在網路上已經有大量的討論,
因此, 在文章中, 只簡短的總結一下個主題的結論,
並且附上連結作為進一步了解的參考.

在進入細部介紹之前, 我們先介紹docker [1]:
Docker is an open platform for building, shipping and running distributed applications. It gives programmers, development teams and operations engineers the common toolbox they need to take advantage of the distributed and networked nature of modern applications.
在官方的介紹中, 說明了docker的三種功能: buildingshipping 和 running
其中, building是建立docker的環境, shipping則是docker容器(container)的搬移,
running則是docker容器的執行.



在docker的想法中, 每一個容器對於底層的Linux OS而言, 都是一隻執行的應用程式,
不同於VMWare, Xen的全虛擬化, 以及KVM共享Linux kernel的半虛擬化架構,
docker只有一個Linux OS, 因此, 在資源使用上較有效率,




圖片以及說明來自[2]

這樣的想法,  有Google的雲端只有Sandbox沒有虛擬機的概念.
然而, 由於沒有虛擬的guest OS, docker也面臨到一些問題,
比如說是資源的控管以及安全性等等, 當然, 在目前架構下,
docker也沒辦法虛擬化windows的環境.

在參考資料[4]中說明了一些docker的缺點, 如以下的文字說明:
Docker並不是全能的,設計之初也不是KVM之類虛擬化手段的替代品,簡單總結幾點:
1. Docker是基於Linux 64bit的,無法在windows/unix或32bit的linux環境下使用
2. LXC是基於cgroup等linux kernel功能的,因此container的guest系統只能是linux base的
3. 隔離性相比KVM之類的虛擬化方案還是有些欠缺,所有container公用一部分的運行庫
4. 網路管理相對簡單,主要是基於namespace隔離
5. cgroup的cpu和cpuset提供的cpu功能相比KVM的等虛擬化方案相比難以度量(所以dotcloud主要是按記憶體收費)
6. docker對disk的管理比較有限
7. container隨著使用者進程的停止而銷毀,container中的log等使用者資料不便收集

相對應到Google Cloud的功能, 我們可以清楚的發現docker的限制
在Google的收費機制中, 是根據CPU和記憶體的使用量來收費,
因此, 最大的運算資源為1024 MB的記憶體與單核4.8 Ghz的CPU使用,
比起Amazon可以到40個vCPU, 160GB的記憶體的效能而言, 遜色不少.
此外, docker的CPU使用和原本雲端虛擬機的設計並不同, 其資源並非來自於保留, 而是限制,
相較虛擬機的資源隔離性, docker無法隔離比如說內存(cache)或是記憶體暫存[7]
關於docker此點限制的技術原因, 會嘗試在之後文章中分析,

相同的, 由於無法建立多核的獨立運算環境,
docker可以但是不適合在同一個容器中執行多個程序[3],
因此, 可以把docker視為一種介於IaaS和PaaS中介的產品,
相比於IaaS, docker更輕更快, 但是能力較虛擬機為弱,
相比於PaaS, 每個docker容器可以視為一個獨立的執行緒,
然而, docker並沒有如PaaS一般提供一種programming framework.

如果我們用平行化計算的角度思考docker,
docker比起multi-thread computing, 多了一層封裝, 更缺乏效率,
但是若是比較multi-instance computing, 則少去了虛擬層的負擔,
對於標準的應用(如: mySQL, Apache等), docker是一種好的選擇,
但是, 對於使用者自行定義的平行化程式而言,
docker反而可能成為平行化的瓶頸.


以下是參考資料,以及其大略的分類:

Docker 官方內容:
[1] https://www.docker.com/
[2] https://philipzheng.gitbooks.io/docker_practice/content/introduction/what.html

Docker 的簡介性文章:
[3] http://www.ithome.com.tw/news/91847

Docker 的架構初探:
[4] http://baike.baidu.com/item/Docker
[5] http://lab.howie.tw/2014/08/docker-docker-lxc-hypervisor.html
[6] http://blog.blackwhite.tw/2013/12/docker.html
[7] http://dockone.io/article/236


留言

熱門文章

LTE筆記: RSRP, RSSI and RSRQ

[WiFi] WiFi 網路的識別: BSS, ESS, SSID, ESSID, BSSID

LTE筆記: 波束成型 (beamforming) 和天線陣列