開源項目 誕生2013年初 GO語言開發實現 聽從了Apache2.0協議 項目代碼在GitHub維護
docker項目目標是實現輕量級的操做解約方案。 linux容器(LXC)等技術,在LXC的基礎上進行了封裝,讓用戶不須要關心docker的管理,使得操做更爲簡單。
構建:不只僅是代碼構建,也能夠是環境 運輸:運輸,能夠把構建環境放到任何地方。 運行:能夠在任何環境運行
一次建立,到處運行php
能夠作一些總體的交付(不必定是代碼 交付,能夠是運行環境和代碼放到一塊兒構建,能夠提供運行環境和代碼)linux
環境不變能夠不用docker,看業務使用,不一樣業務會有不一樣的契合度。nginx
通俗點解釋:docker
就像docker的log同樣,鯨魚(操做系統)和集裝箱(存放各類服務應用),咱們須要把各類各樣的貨物放到鯨魚身,你得爲每件貨物考慮,怎麼安放(應用程序所須要的環境),考慮貨物與貨物之間是否合適(應用程序依賴環境是否衝突)。安全
如今咱們只要把貨物放入到集裝箱裏,就能夠安全的存放,穩定,方便。服務器
引自:https://www.zhihu.com/question/28300645網絡
C/S架構架構
Docker Client Docker server
注:docker服務端掛掉全部的客戶端也會掛掉運維
鏡像(Image):和虛擬機鏡像做用徹底同樣,可是組成部分不一樣。 容器(Container):從鏡像建立的一個實例,相互之間隔離的,不會像虛擬機那樣隔離的完全。能夠理解爲簡化版的linux環境。 倉庫(Repository):鏡像倉庫,鏡像作好能夠放進去,全部服務器只要能夠鏈接到倉庫,均可以直接下載,至關與yum倉庫。docker本身也有一個docker hub。
注:hypervisorssh
Hypervisor是一種運行在物理服務器和操做系統之間的中間軟件層,可容許多個操做系統和應用共享一套基礎物理硬件,所以也能夠看做是虛擬環境中的「元」操做系統,它能夠協調訪問服務器上的全部物理設備和虛擬機,也叫虛擬機監視器(Virtual Machine Monitor)。 Hypervisor是全部虛擬化技術的核心。非中斷地支持多工做負載遷移的能力是Hypervisor的基本功能。當服務器啓動並執行Hypervisor時,它會給每一臺虛擬機分配適量的內存、CPU、網絡和磁盤,並加載全部虛擬機的客戶操做系統。
docker項目的發起人和Docker.Inc的CTO 認爲,docker在正確的地點、時間順應了正確的趨勢即高效地構建應用,如今開發者須要能方便地建立運行在雲平臺的應用,也就是說應用必須可以脫離底層機器,並且同時是任什麼時候間任何地點可獲取的。所以開發者須要建立一種分佈式應用程序的方式,這也是docker所可以提供的。
docker經過容器來打包應用,這樣咱們就能夠在新的機器上啓動這個容器就能夠了,這無疑節約了大量的時間,而且大大下降了部署過程當中的錯誤。而且能夠支持把代碼和容器打包,這樣咱們就能夠直接啓動容器作相應的測試,上線。真正作到了一次搭建,到處運行。
對於開發和運維人員來講,最但願的就是一次建立或配置,能夠在任意地方運行。 開發者可使用一個標準的鏡像來構建一套開發容器,開發完成後,運維人員開一直接使用這個容器來部署代碼。 docker能夠快速建立容器,快速迭代應用程序,並讓整個過程全程可見,使團隊中的其餘成員更容易理解應用程序是如何建立和工做的。 Docker很輕很快!容器啓動時間是 秒級,大量地節約開發、測試、部署的時間。
docker容器的運行不須要額外的hypervisor支持,它是內核級的虛擬化,所以能夠實現更高的性能和效率。
Docker容器幾乎能夠在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、我的電腦、服務器等。這種兼容性可讓用戶把一個應用程序從一個平臺直接遷移到另外一個。
使用docker,只須要小小的修改就能夠替代大量更新工做。全部的修改都以增量的方式被分發和更新,從而實現自動化而且高效的管理
虛擬機須要運行hypervisor,docker都跑在docker引擎裏面,docker不是虛擬機,沒有操做系統直接運行應用。
docker沒法像虛擬機同樣提供徹底的資源隔離,甚至好多地方都沒有隔離,好比用戶空間,一直再填坑,體驗新功能須要內核支持。
類別 | Docker | Openstacke/KVM |
部署難度 | 很是簡單 | 組件多部署複雜 |
啓動速度 | 秒級 | 分鐘級 |
執行性能 | 和物理系統幾乎一致 | VN會佔用一些資源 |
鏡像體積 | 鏡像是MB級別的 | 虛擬機鏡像是GB級別的 |
管理效率 | 管理簡單 | 組件相互依賴,管理複雜 |
隔離性 | 隔離性高 | 完全隔離 |
可管理性 | 單進程,不建議啓動SSH | 完整的系統管理 |
網絡鏈接 | 比較弱 | 藉助Neutron能夠靈活組件各種網絡架構 |
須要注意:
docker裏面只能啓動一個單進程,仍是在前臺,若是掛了docker就直接退出。 docker容器就是一個進程,掛了也就掛了,按照docker理念不須要打開ssh,不須要鏈接上。 容器掛了再從新啓動一個。 docker 管理簡單 管理簡單覺得操做的簡單,沒有辦法想怎麼管怎麼管,在複雜的環境管理簡單就不是優點了。 單進程 能夠寫一個腳本里面寫多個進程解決,可是這有不符合docker理念,只要啓動一個就行了。套件能夠跑,php+nginx 能夠 可是直接跑lnmp就不符合docker的理念了。
主要應用場景,把代碼和運行環境放到一塊兒,這樣就不須要什麼代碼部署,直接啓動容器就是一個服務。不準要環境部署和代碼上線
開發謝代碼--測試--運維上線 docker 能夠避免 docker管理這個流水線,開發保存鏡像,測試run起來測試,測試結束,運維run起來跑,(虛擬機太大也能夠實現),一次構建處處運行
快速配置開發環境
面向產品 :產品交付 面向開發: 簡化配置環境 面向測試: 多版本測試 面向運維: 環境一致性 面向架構: 自動化擴容(微服務)
本文主要借鑑趙班長課件
https://www.unixhot.com/