Docker特色
1)上手快web
用戶只須要幾分鐘,就能夠把本身的程序「Docker 化」。Docker 依賴於「寫時複製」 (copy-on-write)模型,使修改應用程序也很是迅速,能夠說達到「隨心所致,代碼即改」 的境界。數據庫
隨後,就能夠建立容器來運行應用程序了。大多數 Docker 容器只須要不到 1 秒中便可 啓動。因爲去除了管理程序的開銷,Docker 容器擁有很高的性能,同時同一臺宿主機中也 能夠運行更多的容器,使用戶儘量的充分利用系統資源。服務器
2)職責的邏輯分類架構
使用 Docker,開發人員只須要關心容器中運行的應用程序,而運維人員只須要關心如 何管理容器。Docker 設計的目的就是要增強開發人員寫代碼的開發環境與應用程序要部署 的生產環境一致性。從而下降那種「開發時一切正常,確定是運維的問題(測試環境都是正常的,上線後出了問題就歸結爲確定是運維的問題)」運維
3)快速高效的開發生命週期分佈式
Docker 的目標之一就是縮短代碼從開發、測試到部署、上線運行的週期,讓你的應用 程序具有可移植性,易於構建,並易於協做。(通俗一點說,Docker 就像一個盒子,裏面 能夠裝不少物件,若是須要這些物件的能夠直接將該大盒子拿走,而不須要從該盒子中一件件的取。)微服務
4)鼓勵使用面向服務的架構工具
Docker 還鼓勵面向服務的體系結構和微服務架構。Docker 推薦單個容器只運行一個應 用程序或進程,這樣就造成了一個分佈式的應用程序模型,在這種模型下,應用程序或者服 務均可以表示爲一系列內部互聯的容器,從而使分佈式部署應用程序,擴展或調試應用程序 都變得很是簡單,同時也提升了程序的內省性。(固然,能夠在一個容器中運行多個應用程序)性能
Docker組件
1)Docker 客戶端和服務器
Docker 是一個客戶端-服務器(C/S)架構程序。Docker 客戶端只須要向 Docker 服務器 或者守護進程發出請求,服務器或者守護進程將完成全部工做並返回結果。Docker 提供了 一個命令行工具 Docker 以及一整套 RESTful API。你能夠在同一臺宿主機上運行 Docker 守護 進程和客戶端,也能夠從本地的 Docker 客戶端鏈接到運行在另外一臺宿主機上的遠程 Docker 守護進程。
2)Docker鏡像
鏡像是構建 Docker 的基石。用戶基於鏡像來運行本身的容器。鏡像也是 Docker 生命周 期中的「構建」部分。鏡像是基於聯合文件系統的一種層式結構,由一系列指令一步一步構 建出來。例如:測試
添加一個文件;
執行一個命令;
打開一個窗口。
也能夠將鏡像看成容器的「源代碼」。鏡像體積很小,很是「便攜」,易於分享、存儲和更 新。
3)Registry(註冊中心)
Docker 用 Registry 來保存用戶構建的鏡像。Registry 分爲公共和私有兩種。Docker 公司 運營公共的 Registry 叫作 Docker Hub。用戶能夠在 Docker Hub 註冊帳號,分享並保存本身的 鏡像(說明:在 Docker Hub 下載鏡像巨慢,能夠本身構建私有的 Registry)。
4)Docker容器
Docker 能夠幫助你構建和部署容器,你只須要把本身的應用程序或者服務打包放進容 器便可。容器是基於鏡像啓動起來的,容器中能夠運行一個或多個進程。咱們能夠認爲,鏡 像是Docker生命週期中的構建或者打包階段,而容器則是啓動或者執行階段。 容器基於 鏡像啓動,一旦容器啓動完成後,咱們就能夠登陸到容器中安裝本身須要的軟件或者服務。
因此 Docker 容器就是: 一個鏡像格式; 一些列標準操做; 一個執行環境。
Docker 借鑑了標準集裝箱的概念。標準集裝箱將貨物運往世界各地,Docker 將這個模 型運用到本身的設計中,惟一不一樣的是:集裝箱運輸貨物,而 Docker 運輸軟件。
和集裝箱同樣,Docker 在執行上述操做時,並不關心容器中到底裝了什麼,它不論是 web 服務器,仍是數據庫,或者是應用程序服務器什麼的。全部的容器都按照相同的方式將 內容「裝載」進去。
Docker 也不關心你要把容器運到何方:咱們能夠在本身的筆記本中構建容器,上傳到 Registry,而後下載到一個物理的或者虛擬的服務器來測試,在把容器部署到具體的主機中。 像標準集裝箱同樣,Docker 容器方便替換,能夠疊加,易於分發,而且儘可能通用。
使用 Docker,咱們能夠快速的構建一個應用程序服務器、一個消息總線、一套實用工 具、一個持續集成(CI)測試環境或者任意一種應用程序、服務或工具。咱們能夠在本地構 建一個完整的測試環境,也能夠爲生產或開發快速複製一套複雜的應用程序棧。
使用Docker作什麼
容器提供了隔離性,結論是,容器能夠爲各類測試提供很好的沙盒環境。而且,容器本
身就具備「標準性」的特徵,很是適合爲服務建立構建塊。Docker 的一些應用場景以下:
加速本地開發和構建流程,使其更加高效、更加輕量化。本地開發人員能夠構建、 運行並分享 Docker 容器。容器能夠在開發環境中構建,而後輕鬆的提交到測試環境中,並 最終進入生產環境。可以讓獨立的服務或應用程序在不一樣的環境中,獲得相同的運行結果。這一點在 面向服務的架構和重度依賴微型服務的部署由其實用。用 Docker 建立隔離的環境來進行測試。例如,用 Jenkins CI 這樣的持續集成工具 啓動一個用於測試的容器。Docker 可讓開發者先在本機上構建一個複雜的程序或架構來進行測試,而不是 一開始就在生產環境部署、測試。