在看過Docker的兩個Hello World的程序後,咱們對Docker有了一個大概的感性的認識,那麼Docker是究竟是什麼呢?Docker是一個面向開發者和系統管理員編譯,裝載,和運行分佈式應用的開放式平臺。它包括了Docker引擎,一個可移植的,輕量級的,運行時環境和打包工具,還包括了Docker Hub,一個用於共享應用和自動化工做流的雲服務。bash
Docker和通常的虛擬機有什麼不一樣之處服務器
對通常的虛擬機而言,每一個虛擬化的應用包括的不單單是這個應用自己(大概數十M)以及應用所必需的bin文件和lib文件,此外還必須有一個虛擬化的操做系統(少則幾G,多則十數G)。以下圖所示。分佈式
圖1.通常虛擬機系統的結構(官網截圖)工具
而對於Docker而言,Docker引擎容器僅僅包含了應用自己和它的必須的依賴(文件或者鏡像等),它在宿主操做系統中的用戶空間(userspace)中以隔離的進程(容器)分別的運行着,只是和其餘容器共享了Docker內核。這樣,它就能在享有資源的隔離和分配的優點的同時,還保持高可移植性和高效性的優點。spa
圖2.Docker的結構(官網截圖)操作系統
文件系統blog
爲了進一步透徹地瞭解Docker的優點所在,咱們須要熟悉Docker的層次結構,這裏詳細瞭解一下Docker的文件系統。熟悉Linux系統的朋友應該知道,讓一個Linux系統運行起來,咱們須要兩個文件系統:進程
1.boot文件系統(bootfs)內存
2.root文件系統(rootfs)資源
bootfs包括了boot加載器(bootloader)和內核(kernel),用戶永遠不對bootfs作任何修改,實際上,在boot加載完成之後,整個內核都在內存中了,bootfs會被卸載掉以釋放和初始RAM磁盤相關聯的內存。
rootfs包括咱們熟悉的類Unix系統的標準結構:包括/dev, /proc, /bin, /etc, /lib, /usr, /tmp,以及全部用戶須要運行各類應用的配置文件,二進制文件和庫文件(像bash, ls等)
圖3.Linux的bootfs和rootfs(官網用圖)
在不一樣的Linux發行版中,內核也可能有很大的不一樣,一般rootfs內核的內容和組織都是咱們的軟件包依賴當前而不是另外一個發行版的主要緣由(這裏就產生了應用對於不一樣發行版的Linux的依賴性)。而Docker能夠經過同時運行多個發行版來幫助咱們解決這個問題。
圖4.Docker文件系統(官網用圖)
這裏咱們應該理解了Docker的優點所在了,有了Docker,開發者們能夠用任何工具鏈和任何語言構建任何應用。Docker化的應用徹底可移植,能夠在任何地方運行。
不只如此,開發者能夠經過Docker Hub上的超過1.3W個應用來快速上手,並且這些應用由Docker來管理和維護更新以及相互之間的依賴關係,讓管理員更便於瞭解開發者編寫的應用是怎樣工做的。開發者們能夠經過Docker自動化他們的開發流程而且能經過公有的或者私有的雲庫進行團隊合做。
Docker能使開發者更快的構建和裝載高質量的應用。
對於系統管理員,使用Docker能夠爲開發提供標準化的環境,質量保證和生產團隊。再也不是「在個人機器上工做」,經過Docker化應用及其依賴,系統管理員能夠忽視操做系統底層的差別。此外,Docker引擎上的部署是以單元來實現的,而經過將這種方式標準化,系統管理員們能在工做負荷量上面得到更多的彈性。不管是私有服務器或者數據中心虛擬機仍是公有云,部署的工做量被基礎結構技術的束縛程度都更低,而更多地是被商業政策優先引導。除此以外,Docker引擎的輕量級運行時環境實現了在響應指令變化時所須要的快速擴大(scale-up)放縮(scale-down)功能。
Docker能使系統管理員在任何環境設施下部署和運行任何應用,更快,更可靠。