Docker 是一個開源項目,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘項目。它基於 Google 公司推出的 Go 語言實現。 項目後來加入了 Linux 基金會,聽從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。docker
Docker基礎是Linux 容器(LXC)基礎,並對其進行了更高層面的封裝,使得用戶不須要去關心容器的管理,使得操做更爲簡便。用戶操做 Docker 的容器就像操做一個快速輕量級的虛擬機同樣簡單。安全
Docker容器與傳統虛擬機不一樣,容器是在操做系統層面上實現虛擬化,直接複用本地主機的操做系統,而傳統方式則是在硬件層面實現。參考以下對比圖:
服務器
2.1 比虛擬機高效:網絡
如前描述,因容器複用了本地主機操做系統,僅僅是封裝了容器運行所需的軟件環境(從這個角度看能夠參考RPM安裝包),所以與主機上直接運行軟件所需的資源幾乎是同樣的。不像虛擬機那樣須要額外的內存、CPU等來支持虛擬機操做系統的運行。app
2.2 快速交付和部署:運維
對開發和運維(devop)人員來講,最但願的就是一次建立或配置,能夠在任意地方正常運行。並且能夠保證每個地方運行的環境都是如出一轍的,不會由於開發環境與生產環境不一樣而致使某些問題。ide
docker容器的啓動更是秒級的,所以能夠隨時快速生產、關閉。spa
2.3 輕鬆遷移和擴展:操作系統
docker鏡像能夠在任意環境中遷移,而不會出現兼容性問題,遷移過程輕鬆方便。orm
2.4 管理簡單:
使用 Docker,只須要小小的修改,就能夠替代以往大量的更新工做。全部的修改都以增量的方式被分發和更新,從而實現自動化而且高效的管理。
2.5 docker對比傳統虛擬機
3.1 鏡像:
Docker 鏡像就是一個只讀的模板。
例如:一個鏡像能夠包含一個完整的 CentOS 操做系統環境,裏面僅安裝了 httpd或用戶須要的其它應用程序。
鏡像能夠用來建立 Docker 容器。
Docker 提供了一個很簡單的機制來建立鏡像或者更新現有的鏡像,用戶甚至能夠直接從其餘人那裏下載一個已經作好的鏡像來直接使用。
3.2 容器:
Docker 利用容器來運行應用。
容器是從鏡像建立的運行實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的、保證安全的平臺。
能夠把容器看作是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。
*注:鏡像是隻讀的,容器在啓動的時候建立一層可寫層做爲最上層。
3.3 倉庫:
倉庫是集中存放鏡像文件的場所。有時候會把倉庫和倉庫註冊服務器(Registry)混爲一談,並不嚴格區分。實際上,倉庫註冊服務器上每每存放着多個倉庫,每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag)。
倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式。
最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。 其做爲默認docker倉庫,但在國內下載速度很慢。固然,用戶也能夠在本地網絡內建立一個私有倉庫。當用戶建立了本身的鏡像以後就能夠使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另一臺機器上使用這個鏡像時候,只須要從倉庫上 pull 下來就能夠了。
*注:Docker 倉庫的概念跟 Git 相似,註冊服務器能夠理解爲 GitHub 這樣的託管服務。