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容器