Docker入門(1)


雲計算的三個分層:基礎設施(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

Linux Namespace

LXC所實現的隔離性主要是來自kernel的namespace, 其中pid, net, ipc, mnt, uts 等namespace將container的進程, 網絡, 消息, 文件系統和hostname 隔離開。
工具

  • pid namespace

用戶的進程是lxc-start進程的子進程, 不一樣用戶的進程就是經過pidnamespace隔離開的,且不一樣 namespace 中能夠有相同PID。namespace容許嵌套,父namespace能夠影響子namespace的進程,因此子namespace的進程能夠在父namespace中看到,可是具備不一樣的pid雲計算

  • net namespace
網絡隔離是經過netnamespace實現的,每一個net namespace有獨立的 network devices, IP addresses, IP routing tables, /proc/net 目錄。這樣每一個container的網絡就能隔離開來。LXC在此基礎上有5種網絡類型,docker默認採用veth的方式將container中的虛擬網卡同host上的一個docker bridge鏈接在一塊兒。
  • ipc namespace
container 的進程間交互實際上仍是host上具備相同pid namespace中的進程間交互,所以須要在IPC資源申請時加入namespace信息 - 每一個IPC資源有一個惟一的 32bit ID
  • mnt namespace
相似chroot,將一個進程放到一個特定的目錄執行。mnt namespace容許不一樣namespace的進程看到的文件結構不一樣,這樣每一個 namespace 中的進程所看到的文件目錄就被隔離開了。
  • uts namespace
UTS(「UNIX Time-sharing System」) namespace容許每一個container擁有獨立的hostname和domain name, 使其在網絡上能夠被視做一個獨立的節點而非Host上的一個進程
  • user namespace
每一個container能夠有不一樣的 user 和 group id, 也就是說能夠以container內部的用戶在container內部執行程序而非Host上的用戶。

Control Groups

不一樣namespace之間資源仍是相互競爭的,仍然須要相似ulimit來管理每一個container所能使用的資源 - LXC 採用的是cgroups控制資源。cgroups 實現了對資源的配額和度量。 cgroups 的使用很是簡單,提供相似文件的接口,在 /cgroup目錄下新建一個文件夾便可新建一個group,在此文件夾中新建task文件,並將pid寫入該文件,便可實現對該進程的資源控制。spa

AUFS

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三大核心,三者能夠互相轉化

  • Docker,平臺工具、守護進程
  • Image,鏡像,包括應用及系統的只讀數據包
  • Container,容器,虛擬機的運行實例
  • Registry,倉庫登記,管理鏡像文件,
  • Docker hub,Docker官方公有倉庫


相關文章
相關標籤/搜索