1.什麼是docker?git
Docker是一個開源的引擎,能夠輕鬆的爲任何應用建立一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試經過的容器能夠批量地在生產環境中部署,包括VMs(虛擬機)、bare metal、OpenStack 集羣和其餘的基礎應用平臺。redis
官方的描述是:Build, Ship, and Run Any App, Anywhere 在任何地方部署,傳輸,運行任何應用docker
Docker相似虛擬機的概念,可是跟虛擬機比起來更靈活,速度更快,CPU/內存消耗更低,關鍵是更方便管理。與虛擬化技術的不一樣點在於下面幾點:服務器
1)虛擬化技術依賴物理CPU和內存,是硬件級別的;而docker構建在操做系統上,利用操做系統的containerization技術,因此docker甚至能夠在虛擬機上運行。ide
2)虛擬化系統通常都是指操做系統鏡像,比較複雜,稱爲「系統」;而docker開源並且輕量,稱爲「容器」,單個容器適合部署少許應用,好比部署一個redis、一個memcachedmemcached
3)傳統的虛擬化技術使用快照來保存狀態;而docker在保存狀態上不只更爲輕便和低成本,並且引入了相似源代碼管理機制,將容器的快照歷史版本一一記錄,切換成本很低測試
4)傳統的虛擬化技術在構建系統的時候較爲複雜,須要大量的人力;而docker能夠經過Dockfile來構建整個容器,重啓和構建速度很快。更重要的是Dockfile能夠手動編寫,這樣應用程序開發人員能夠經過發佈Dockfile來指導系統環境和依賴,這樣對於持續交付十分有利ui
5)Dockerfile能夠基於已經構建好的容器鏡像,建立新容器。Dockerfile能夠經過社區分享和下載,有利於該技術的推廣操作系統
2.結構組成命令行
底層由"核心系統kernel,文件系統等構成",上面是鏡像(p_w_picpath),分爲基礎鏡像(只讀)和普通鏡像,全部鏡像能夠直接啓動生成一個實例(container),container就能夠理解爲一個能夠直接運行的虛擬機了。
container和p_w_picpath在Docker的世界裏,Image是指一個只讀的層(Layer),這裏的層是AUFS裏的概念,最直觀的方式就是看一下docker官方給出的圖 Docker使用了一種叫AUFS的文件系統,這種文件系統可讓你一層一層地疊加修改你的文件,最底下的文件系統是隻讀的,若是須要修改文件,AUFS會增長一個可寫的層(Layer),這樣有不少好處,例如不一樣的Container能夠共享底層的只讀文件系統(同一個Kernel),使得你能夠跑N多個Container而不至於你的硬盤被擠爆了!這個只讀的層就是Image!而如你所看到的,一個可寫的層就是Container。
那Image和Container的區別是什麼?很簡單,他們的區別僅僅是一個是隻讀的層,一個是可寫的層,你可使用docker commit 命令,將你的Container變成一個Image,也就是提交你所運行的Container的修改內容,變成一個新的只讀的Image,這很是相似於git commit命令。
Docker 由下面這些組成:
1) Docker 服務器守護程序(server daemon),用於管理全部的容器。
2) Docker 命令行客戶端,用於控制服務器守護程序。
3) Docker 鏡像:查找和瀏覽 docker 容器鏡像。
http://liumissyou.blog.51cto.com/4828343/1792500