1. 程式人生 > >Docker技術介紹----黑洞

Docker技術介紹----黑洞

Docker技術介紹
黑洞 [email protected]

內容簡要
Docker生態系統
什麼是Docker
Docker應用場景
Docker總架構圖
Docker On LinuX
Docker 的特徵
Docker 工作方式
Docker下的開發模式
參考資料

什麼是Docker

English interpretation
Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications. Consisting of Docker Engine, a portable, lightweight runtime and packaging tool, and Docker Hub, a cloud service for sharing applications and automating workflows, Docker enables apps to be quickly assembled from components and eliminates the friction between development, QA, and production environments. As a result, IT can ship faster and run the same app, unchanged, on laptops, data center VMs, and any cloud.
中文解釋:
Docker是Docker公司開源的一個基於輕量級虛擬化技術的容器引擎專案,整個專案基於 Go語言開發,並遵從Apache 2.0協議。
目前,Docker可以在容器內部快速自動化部署應用,並可以通過核心虛擬化技術
(namespaces及cgroups等)來提供容器的資源隔離與安全保障等。
由於Docker通過作業系統層的虛擬化實現隔離,所以Docker容器在執行時,不需要類
似虛擬機器(VM)額外的作業系統開銷,提高資源利用率,並且提升諸如IO等方面的效能。

Docker應用場景

web應用的自動化打包和釋出
自動化測試和持續整合、釋出
在服務型環境中部署和調整資料庫或其他的後臺應用
從頭編譯或者擴充套件現有的OpenShift或CloudFoundry平臺來搭建自己的PaaS環境

Docker的特徵
Docker有不少有趣的功能,Docker特性主要包括以下幾點:
速度飛快以及優雅的隔離框架
物美價廉
CPU/記憶體的低消耗
快速開/關機
跨雲端計算基礎架構

Docker元件與元素

三個基本元件:
Docker Client 是使用者介面,它支援使用者與Docker Daemon之間通訊
Docker Daemon運行於主機上,處理服務請求
Docker Index是中央registry,支援擁有公有與私有訪問許可權的Docker容器映象的備份
三個基本元素:
Docker Containers負責應用程式的執行,包括作業系統、使用者新增的檔案以及元資料
Docker Images是一個只讀模板,用來執行Docker容器
DockerFile是檔案指令集,用來說明如何自動建立Docker映象

Docker的支柱
Docker通過作系統如下功能來提高容器技術效率
Namespaces 充當隔離的第一級。確保一個容器中執行一個程序而且不能看到或影 響容器外的其它程序
Control  Groups是LXC的重要組成部分,具有資源核算與限制的關鍵功能
UnionFS(檔案系統))作為容器的構建塊。為了支援Docker的輕量級以及速度快的 特性,它建立層與使用者

Docker如何執行APP
構建一個映象。
執行容器。
這些步驟的都是從Docker Client的命令開始的。Docker Client使用的是Docker 二進位制檔案。在基礎層面上,Docker Client會告訴Docker Daemon需要建立的映象 以及需要在容器內執行的命令。當Daemon收到建立映象的訊號後,會進行如下操作
第1步:構建映象
如前面所述,Docker Image是一個構建容器的只讀模板,它包含了容器啟動所需
的所有資訊,包括執行哪些程序和配置資料。
所有的映象都會基於一個基本映象構建,緊接著會根據Dockerfile中的指令建立 模板,對於每個指令,在映象上建立一個新的層。
一旦映象建立完成,就可以將它們推送到中央registry:Docker Index,以供他 人使用。然而,Docker Index為映象提供了兩個級別的訪問許可權:公有和私有訪 問。您可以將映象儲存在私有倉庫。Docker官網有私有倉庫的套餐可以供你選擇。
總之,公有庫是可搜尋和可重複使用的,而私有庫只能給擁有許可權的成員訪問。
Docker Client可用於Docker Index內的映象搜尋。
第2步:執行容器
執行容器源於我們在第一步中建立的映象。當一個容器被啟動後,一個讀寫層會被 新增到映象的頂層。當分配合適的網路和IP地址後,最應用程式就可以在容器中運 行了。
如果你還是有點不解,先別急,在接下來的內容中我們會和你分享很多的實戰案例。 目前為止,我們已經介紹了Docker的基本概念,接下來,讓我們一起安裝Docker!

安裝Docker
Ubuntu
1、更新Ubuntu核心 使用如下命令列更新核心至3.8.0-25
sudo apt-get install linux-image-3.8.0-25-generic
sudo apt-get install linux-headers-3.8.0-25-generic
完成後重啟電腦,通過命令 “uname -r” 來檢視核心是否成功更新。
2、安裝lxc-docker
[email protected]: sudo apt-get install software-properties-common #增加 add-apt-
repository 命令
[email protected]: sudo apt-get install python-software-properties
[email protected]: sudo add-apt-repository ppa:dotcloud/lxc-docker #增加一個ppa源, 如:ppa:user/ppa-name
[email protected]: sudo apt-get update #更新系統
[email protected]: sudo apt-get install lxc-docker
CentOS7
Docker 軟體包已經包括在預設的 CentOS-Extras 軟體源裡。因此想要安裝 docker,只需要運 行下面的 yum 命令:
[[email protected] ~]# yum install docker
啟動 Docker 服務
安裝完成後,使用下面的命令來啟動 docker 服務,並將其設定為開機啟動:
[[email protected] ~]# service docker start
[[email protected] ~]# chkconfig docker on
(LCTT 譯註:此處採用了舊式的 sysv 語法,如採用CentOS 7中支援的新式 systemd 語法,如下:
[[email protected] ~]# systemctl start docker.service [[email protected] ~]# systemctl  enable docker.service

Docker version
Docker系統有兩個程式:docker服務端和docker客戶端。其中docker服務 端是一個服務程序,管理著所有的容器。docker客戶端則扮演著docker服務 端的遠端控制器,可以用來控制docker的服務端程序。大部分情況下, docker服務端和客戶端執行在一臺機器上。

Docker 下載容器映象
下載映象的命令非常簡單,使用docker pull命令即可。(譯者按:docker命令 和git有一些類似的地方)。在docker的映象索引網站上面,映象都是按照使用者 名/映象名的方式來儲存的。有一組比較特殊的映象,比如ubuntu這類基礎映象, 經過官方的驗證,值得信任,可以直接用映象名來檢索到。

Docker容器的hello world!
在docker容器中執行hello world! docker容器可以理解為在沙盒中執行的程序。這個沙盒包含了該程序執行所必須的
資源,包括檔案系統、系統類庫、shell 環境等等。但這個沙盒預設是不會執行任何程 序的。你需要在沙盒中執行一個程序來啟動某一個容器。這個程序是該容器的唯一程序, 所以當該程序結束的時候,容器也會完全的停止。

Docker on LXC
LXC is a userspace interface for the Linux kernel containment features.
Through a powerful API and simple tools, it lets Linux users easily create and manage system or application containers.
LXC是Linux核心的使用者空間介面控制功能。通過一個強大的API和簡單的 工具,它允許Linux使用者輕鬆地建立和管理系統或應用程式的容器。

Docker下的開發模式
共享基礎容器
共享卷(Volume)開發容器
開發工具容器
不同環境下的測試容器
構建容器
安裝容器
整合預設服務(Default-Service-In-A-Box)的容器和基礎設施/粘合(Glue) 容器
http://www.hokstad.com/docker/patterns

參考資料
https://www.docker.io/ 
https://github.com/dotcloud/docker 
http://bit.ly/dockersources 
http://lwn.net/Articles/199643/ 
http://lwn.net/Articles/236038/
http://en.wikipedia.org/wiki/Operating_system-level_virtualization
https://linuxcontainers.org/ 
http://en.wikipedia.org/wiki/Cgroups 
http://en.wikipedia.org/wiki/Aufs