1. 程式人生 > >1 docker基本概念和框架

1 docker基本概念和框架

1.什麼是容器?

(1)一種虛擬化的方案

(2)作業系統級別的虛擬化

(3)只能執行相同或相似核心的作業系統

(4)依賴於Linux核心特性:Namespace和Cgroups(Control Group)

2.Linux容器技術vs虛擬機器

虛擬機器執行應用app,不僅需要包含的庫,還需要包含完整的作業系統,而容器執行只需要應用app和依賴的庫。運用容器技術不僅可以減少資源的佔用,還會降低對cpu和記憶體的損耗,可以提高更多的服務能力。

3.什麼是docker?

(1)將應用程式自動部署到容器

(2)Go語言開源引擎

(3)基於Apache2.0開源授權協議發行

4.docker特點

(1)提供簡單輕量的建模方式,啟動快速,容易上手,可以充分利用系統資源

(2)職責的邏輯分離,開發人員只需關注容器中執行的應用程式,運維人員只需關注如何管理容器

(3)快速高效的開發生命週期,縮短程式碼從開發、測試到部署上線執行的週期,讓應用程式具備可移植性,在容器中開發,以容器的形式互動和分發,這樣開發、測試、生產都使用相同的測試環境,避免了額外的除錯和部署的開銷,有效縮短產品的上線週期

(4)鼓勵使用面向服務的架構,docker推薦單個容器執行一個應用程式或程序,形成一個分散式的應用程式模型,在這種模型下,應用程式和服務都可以表示為一系列內部互聯的容器,從而使分散式應用程式擴充套件或除錯應用程式變得非常簡單,即開發中常用的思想“高內聚,低耦合,單一任務”,可以避免在同一伺服器部署不同服務時,可能帶來服務之間的影響,執行過程中出現問題也比較容易定位問題的所在。

5.docker使用場景

(1)使用docker容器開發、測試、部署服務。

(2)建立隔離的執行環境

(3)搭建測試環境

(4)構建多使用者的平臺即服務(PaaS)基礎設施

(5)提供軟體即服務(SaaS)

(6)高效能、超大規模的宿主機部署

6.docker基本組成

(1)Docker Client 客戶端

(2)Docker Daemon守護程序

Docker是C/S架構的程式,Docker的客戶端向伺服器端(也就是守護程序)發出請求,守護程序處理完所有的工作並返回結果,Docker客戶端對伺服器端的訪問既可以在本地,也可以在通過遠端來訪問。

(3)Docker Image映象

映象是docker容器的基石,容器基於映象啟動和執行,映象儲存了用於啟動容器的各種條件。docker的映象是一個層疊的只讀檔案系統,最低端是一個引導檔案系統(即bootfs),第二層是root檔案系統(即rootfs),它位於bootfs之上,可以是一種或多種作業系統,比如ubuntu或者centos。在docker中,root檔案系統永遠只能是隻讀狀態,並且docker運用聯合載入技術又會在root檔案系統之上載入更多的只讀檔案系統,聯合載入指的是一次載入多個檔案系統,但是在外面看起來只能看到一個檔案系統,聯合載入會將各層檔案系統疊加到一起,這樣最終的檔案系統會包含所有的底層檔案和目錄,docker將這樣的檔案系統稱為映象。

(4)Docker Container容器

容器通過映象來啟動,docker中的容器是docker的執行來源,容器中可以執行客戶的一個或多個程序,如果說映象是docker生命週期中的構建和打包階段,那麼容器則是啟動和執行階段。

容器是怎樣通過映象來啟動的呢?

當一個容器啟動時,docker會在該映象的最頂層載入一個讀寫檔案系統,也就是一個可寫的檔案層,我們在docker執行的程式,就是在這個層中進行執行的,當docker第一次啟動一個容器時,初始的讀寫層是空的,當檔案系統發生變化時,這些變化都會應用到這一層上,比如像修改一個檔案,該檔案首先會從讀寫層下面的只讀層複製到該讀寫層,該檔案的只讀版本依然存在,但是已經被讀寫層中的該檔案副本所隱藏,這就是docker的一個重要技術:寫時複製(copy on write)。每個只讀映象層都是隻讀的,永遠不會變化,當建立一個新容器時,dicker會構建出一個映象棧,如下圖所示:

(5)Docker Registry 倉庫 

docker用倉庫來儲存使用者構建的映象,倉庫分為公有和私有兩種,Docker公司提供了一個公有的倉庫Docker Hub。

7.Docker依賴的Linux核心特性:

(1)Namespaces 命令空間

在作業系統層面提供了系統資源的隔離(程序、網路、檔案系統等等)

PID (Process ID) 程序隔離;

NET (Network)     管理網路介面;

IPC (InterProcess Communication)  管理跨程序通訊的訪問;

MNT (Mount)  管理掛載點;

UTS (Unix Timesharing System) 隔離核心和版本標識;

(2)Control groups(cgroups)控制組

是linux核心提供的一種可以限制、記錄、隔離程序組所使用的物理資源的機制。

cgroups提供的功能:

資源限制;

優先順序設定;

資源計量;

資源控制;

8.Docker容器的能力

(1)檔案系統隔離:每個容器都有自己的root檔案系統

(2)程序隔離:每個容器都執行在自己的程序環境中

(3)網路隔離:容器間的虛擬網路介面和IP地址都是分開的

(4)資源隔離和分組:使用cgroups將CPU和記憶體之類的資源獨立分配給每個Docker容器