雲計算的三個分層:基礎設施(infrastructure)、平臺(platform)和軟件(software)
docker
Infrastructure-as-a-Service(IaaS),Platform-as-a-Service(PaaS),Software-as-a-Service(SaaS)。
ubuntu
Docker設計哲學(模型):集裝箱運輸貨物,Docker 運輸軟件
網絡
Docker設想是交付運行環境如同海運,OS如同一個貨輪,每個在OS基礎上的軟件都如同一個集裝箱,用戶能夠經過標準化手段自由組裝運行環境,同時集裝箱的內容能夠由用戶自定義,也能夠由專業人員製造。這樣,交付一個軟件,就是一系列標準化組件的集合的交付,如同樂高積木,用戶只須要選擇合適的積木組合,而且在最頂端署上本身的名字(最後個標準化組件是用戶的app)。這也就是基於docker的PaaS產品的原型。容器環境與所在的 Host 環境是隔離的,就像虛擬機同樣,但更快更簡單。
架構
Docker採用 C/S架構 Docker daemon 做爲服務端接受來自客戶的請求,並處理這些請求(建立、運行、分發容器)。 客戶端和服務端既能夠運行在一個機器上,也可經過 socket 或者RESTful API 來進行通訊。
app
Docker旨在用於彈性計算。每一個Docker實例的運營生命週期有限,實例數量根據需求增減。在一個管理適度的系統中,這些實例生而平等,再也不須要時便各自消亡了dom
Docker核心技術:socket
LXC所實現的隔離性主要是來自kernel的namespace, 其中pid, net, ipc, mnt, uts 等namespace將container的進程, 網絡, 消息, 文件系統和hostname 隔離開。
工具
用戶的進程是lxc-start進程的子進程, 不一樣用戶的進程就是經過pidnamespace隔離開的,且不一樣 namespace 中能夠有相同PID。namespace容許嵌套,父namespace能夠影響子namespace的進程,因此子namespace的進程能夠在父namespace中看到,可是具備不一樣的pid雲計算
不一樣namespace之間資源仍是相互競爭的,仍然須要相似ulimit來管理每一個container所能使用的資源 - LXC 採用的是cgroups來控制資源。cgroups 實現了對資源的配額和度量。 cgroups 的使用很是簡單,提供相似文件的接口,在 /cgroup目錄下新建一個文件夾便可新建一個group,在此文件夾中新建task文件,並將pid寫入該文件,便可實現對該進程的資源控制。spa
aufs全稱是advanced multi-layered unification filesystem,主要功能是把多個文件夾的內容合併到一塊兒,提供一個統一的視圖。在以VM爲基礎的虛擬化手段中,有image和snapshot能夠用於VM的複製、重建以及移動的功能。想要經過container來實現快速的大規模部署和更新, 這些功能不可或缺。Docker 正是利用AUFS來實現對container的快速更新
Docker安裝:官網下載最新的docker離線安裝包,並安裝
https://apt.dockerproject.org/repo/pool/main/d/docker-engine/
http://archive.ubuntu.com/ubuntu/pool/main/libt/libtool/
dpkg -i *.deb
缺乏Package:
apt-get install libsystemd-journal0
Docker有倉庫Repositories、鏡像Images和容器Container三大核心,三者能夠互相轉化