Docker是一個開源平臺,它包含容器引擎和Docker Hub註冊服務器。linux
Docker引擎能夠將任何應用打包成一個輕量的、易移植的、隔離的容器。git
經過標準的操做系統接口使得應用能夠在各類運行環境下保持一致。docker
Docker是容器的一種,容器是一種輕量級的虛擬技術,和容器對應的更爲重量級的虛擬技術是虛擬機。數據庫
虛擬機是一種基於硬件的虛擬技術,它採用指令級的虛擬,徹底虛擬一整套物理主機,包含CPU、內存、磁盤、網卡等設備,給用戶呈現的就是一個物理主機的特性。用戶能夠在虛擬機裏安裝各類各樣的操做系統,一切操做都看起來和真機同樣。(第一類虛擬機管理程序,如Virtualbox和VMWare Workstation,它運行在操做系統之上。第一類虛擬機管理程序,如Xen,它直接運行在裸機上。)後端
容器是一種基於操做系統的虛擬技術,它運行在操做系統之上的用戶空間,全部的容器都共用一個系統內核,甚至是公共庫,容器引擎提供進程級別的隔離,讓每個容器都想運行在單獨的系統之上,但又能共享不少底層資源。比起虛擬機,容器更爲輕量、快速、易於管理。安全
除了Docker,常見的容器還有Solaris Zone、BSD jails、OpenVZ和LXC等。
服務器
更爲詳細的對好比下表:網絡
Docker早期是基於LXC(Linux Containers,LXC)4容器的,可是其具備不少LXC這類容器所沒有的新特性。架構
Docker採用的是C/S架構,Docker客戶端,即Docker可執行程序,能夠經過命令行和API的形式與Docker守護程序進行通訊,Docker守護程序提供Docker服務。
分佈式
Docker包含三大核心組件——鏡像、容器和庫。
下圖是經過Docker進行應用開發和部署的案例流程,首先,在開發主機上構建容器A,構建方法能夠是手工構建,也能夠經過Dockerfile自動構建。容器A的構建必須基於一個已有的基礎鏡像,並在它上面執行一系列操做。鏡像A是容器的靜態形式,容器是鏡像的運行態。將容器A保存爲鏡像A,而後推送到Docker庫中進行共享。這時候,另外一端能夠經過Docker庫來得到鏡像A,並將其拉取到本地,最後在產品集羣中運行容器A,其中產品集羣中通常會同時運行多個容器,這些容器互不影響,相互隔離。
Docker是利用容器技術實現的一種輕量級的虛擬技術。
能夠參照官方給出的文檔
因爲Docker並不是使用虛擬化技術,容器必須與主機的內核一致——Windows Server的容器只能在Windows Server的主機上運行,64爲Linux的容器只能在64位的Linux主機上運行。
微服務5是容器最主要的用例,也是容器興起的最大推進力。
微服務是一種軟件系統開發和構成形式,由小而獨立的組件構成,這些組件經過網絡互相鏈接溝通。這與傳統的單一架構(monolith)軟件開發模式相反,後者只有一個龐大的程序。當須要擴展一個單一架構的軟件時,縱向擴展(scale up)每每是惟一選擇,也就是說,須要把機器升級,增長內存和使用更強大的CPU,才能應付更多的負載。相反,微服務則設計成橫向擴展(scale out),爲了知足增加的需求,只需部署多臺機器分攤負載便可。
容器雲以容器爲資源分割和調度的基本單位,封裝整個軟件運行時環境,爲開發者和系統管理員提供用於構建、發佈和運行分佈式應用的平臺。當容器雲專一於資源共享與隔離、容器編排與部署時,它更接近傳統的IaaS;當容器雲滲透到應用支撐與運行時環境時,它更接近傳統的PaaS。
容器雲並不只僅限於Docker,基於rkt容器的CoreOS項目也是容器雲。