簡介
Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。Docker官網:https://www.docker.com/
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
Docker 從 17.03 版本之後分爲 CE(Community Edition: 社區版) 和 EE(Enterprise Edition: 企業版),個人使用社區版就可以。
Docker的應用場景
1、Web 應用的自動化打包和發佈。
2、自動化測試和持續集成、發佈。
3、在服務型環境中部署和調整數據庫或其他的後臺應用。
4、從頭編譯或者擴展現有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環境。
Docker 的優點
(1)上手快
用戶只需要幾分鐘,就可以把自己的程序“Docker化”。Docker依賴於“寫時複製”(copy-on-write)模型,使修改應用程序也非常迅速,可以說達到“隨心所致,代碼即改”的境界。
隨後,就可以創建容器來運行應用程序了。大多數Docker容器只需要不到1秒中即可啓動。由於去除了管理程序的開銷,Docker容器擁有很高的性能,同時同一臺宿主機中也可以運行更多的容器,使用戶盡可能的充分利用系統資源。
(2)職責的邏輯分類
使用Docker,開發人員只需要關心容器中運行的應用程序,而運維人員只需要關心如何管理容器。Docker設計的目的就是要加強開發人員寫代碼的開發環境與應用程序要部署的生產環境一致性。從而降低那種“開發時一切正常,肯定是運維的問題(測試環境都是正常的,上線後出了問題就歸結爲肯定是運維的問題)”
(3)快速高效的開發生命週期
Docker的目標之一就是縮短代碼從開發、測試到部署、上線運行的週期,讓你的應用程序具備可移植性,易於構建,並易於協作。(通俗一點說,Docker就像一個盒子,裏面可以裝很多物件,如果需要這些物件的可以直接將該大盒子拿走,而不需要從該盒子中一件件的取。)
(4)鼓勵使用面向服務的架構
Docker還鼓勵面向服務的體系結構和微服務架構。Docker推薦單個容器只運行一個應用程序或進程,這樣就形成了一個分佈式的應用程序模型,在這種模型下,應用程序或者服務都可以表示爲一系列內部互聯的容器,從而使分佈式部署應用程序,擴展或調試應用程序都變得非常簡單,同時也提高了程序的內省性。(當然,可以在一個容器中運行多個應用程序)
Docker的架構
Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。
Docker 容器通過 Docker 鏡像來創建。
容器與鏡像的關係類似於面向對象編程中的對象與類。
Docker 和虛擬機的區別
Docker是一種輕量級的虛擬化技術,比傳統的虛擬機性能更好。
下圖是虛擬機的體系結構:
-
server - 表示真實電腦。
-
Host OS - 真實電腦的操作系統,例如:Windows,Linux
-
Hypervisor - 虛擬機平臺,模擬硬件,如VMWare,VirtualBox
-
Guest OS - 虛擬機平臺上安裝的操作系統,例如CentOS Linux
-
App - 虛擬機操作系統上的應用,例如nginx
下圖是Docker的體系結構:
-
server - 表示真實電腦。
-
Host OS - 真實電腦的操作系統,例如:Windows,Linux
-
Docker Engine - 新一代虛擬化技術,不需要包含單獨的操作系統。
-
App - 所有的應用程序現在都作爲Docker容器運行。
這種體系結構的明顯優勢是,不需要爲虛擬機操作系統提供硬件模擬。所有應用程序都作爲Docker容器工作,性能更好。
博文參考: