docker簡介以及優缺點

大熊子發表於2018-06-19

1.docker簡介

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。

  1.docker組成

一個完整的Docker有以下幾個部分組成:
        dockerClient客戶端
        Docker Daemon守護程式
        Docker Image映象
        DockerContainer容器

  2.docker架構

Docker 使用客戶端-伺服器 (C/S) 架構模式,使用遠端API來管理和建立Docker容器。Docker 容器通過 Docker 映象來建立。容器與映象的關係類似於物件導向程式設計中的物件與類。 
docker  物件導向
容器 物件
映象

Docker採用 C/S架構 Docker daemon 作為服務端接受來自客戶的請求,並處理這些請求(建立、執行、分發容器)。 客戶端和服務端既可以執行在一個機器上,也可通過 socket 或者RESTful API 來進行通訊。 Docker daemon 一般在宿主主機後臺執行,等待接收來自客戶端的訊息。 Docker 客戶端則為使用者提供一系列可執行命令,使用者用這些命令實現跟 Docker daemon 互動。

  3.docker典型場景

在docker的網站上提到了docker的典型場景:
Automating the packaging and deployment of applications(使應用的打包與部署自動化)
Creation of lightweight, private PAAS environments(建立輕量、私密的PAAS環境)
Automated testing and continuous integration/deployment(實現自動化測試和持續的整合/部署)
Deploying and scaling web apps, databases and backend services(部署與擴充套件webapp、資料庫和後臺服務)
由於其基於LXC的輕量級虛擬化的特點,docker相比KVM之類最明顯的特點就是啟動快,資源佔用小。因此對於構建隔離的標準化的執行環境,輕量級的PaaS(如dokku), 構建自動化測試和持續整合環境,以及一切可以橫向擴充套件的應用(尤其是需要快速啟停來應對峰谷的web應用)。
1.構建標準化的執行環境,現有的方案大多是在一個baseOS上執行一套puppet/chef,或者一個image檔案,其缺點是前者需要base OS許多前提條件,後者幾乎不可以修改(因為copy on write 的檔案格式在執行時rootfs是read only的)。並且後者檔案體積大,環境管理和版本控制本身也是一個問題。
2.PaaS環境是不言而喻的,其設計之初和dotcloud的案例都是將其作為PaaS產品的環境基礎
3.因為其標準化構建方法(buildfile)和良好的REST API,自動化測試和持續整合/部署能夠很好的整合進來
4.因為LXC輕量級的特點,其啟動快,而且docker能夠只載入每個container變化的部分,這樣資源佔用小,能夠在單機環境下與KVM之類的虛擬化方案相比能夠更加快速和佔用更少資源

  4.docker侷限性

Docker是基於Linux 64bit的,無法在32bit的linux/Windows/unix環境下使用
LXC是基於cgroup等linux kernel功能的,因此container的guest系統只能是linux base的
隔離性相比KVM之類的虛擬化方案還是有些欠缺,所有container公用一部分的執行庫
網路管理相對簡單,主要是基於namespace隔離
container隨著使用者程式的停止而銷燬,container中的log等使用者資料不便收集
Docker對disk的管理比較有限

Docker並非適合所有應用場景,Docker只能虛擬基於Linux的服務。Windows Azure 服務能夠執行Docker例項,但到目前為止Windows服務還不能被虛擬化。

可能最大的障礙在於管理例項之間的互動。由於所有應用元件被拆分到不同的容器中,所有的伺服器需要以一致的方式彼此通訊。這意味著任何人如果選擇複雜的基礎設施,那麼必須掌握應用程式設計介面管理以及叢集工具,比如Swarm、Mesos或者Kubernets以確保機器按照預期運轉並支援故障切換。

Docker在本質上是一個附加系統。使用檔案系統的不同層構建一個應用是有可能的。每個元件被新增到之前已經建立的元件之上,可以比作為一個檔案系統更明智。分層架構帶來另一方面的效率提升,當你重建存在變化的Docker映象時,不需要重建整個Docker映象,只需要重建變化的部分。
可能更為重要的是,Docker旨在用於彈性計算。每個Docker例項的運營生命週期有限,例項數量根據需求增減。在一個管理適度的系統中,這些例項生而平等,不再需要時便各自消亡了。
針對Docker環境存在的不足,意味著在開始部署Docker前需要考慮如下幾個問題。首先,Docker例項是無狀態的。這意味著它們不應該承載任何交易資料,所有資料應該儲存在資料庫伺服器中。
其次,開發Docker例項並不像建立一臺虛擬機器、新增應用然後克隆那樣簡單。為成功建立並使用Docker基礎設施,管理員需要對系統管理的各個方面有一個全面的理解,包括Linux管理、編排及配置工具比如Puppet、Chef以及Salt。這些工具生來就基於命令列以及指令碼。

 

參考資料:

https://baike.baidu.com/item/Docker/13344470?fr=aladdin#reference-[3]-12232642-wrap

  

 

相關文章