1. 程式人生 > >(一)為什麽要學習docker

(一)為什麽要學習docker

print 可用內存 出現 雲計算服務 centos 系統 rar cgroup linux內核 方式

一.docker的歷史與現狀

1.PAAS平臺的範圍和內容

1.確定產品定位和需求,確定首次叠代的範圍。

2.制作界面原型。

以下是 paas 範疇

3.技術選型,然後根據技術選型為每個開發者搭建開發環境和技術棧, 例如 Java 環境、Python 環境、Ruby 環境、數據庫、中間件等等。   

4.構建基礎技術框架和服務,包括日誌、存儲、消息、緩存、搜索、數 據源、集群擴展等等。

5.模擬用戶容量,構建測試環境。

6.開始編寫真正的業務代碼,實現產品功能。

7.叠代開發/測試,生生不息,周而復始,直到頭發掉光為止……

2.老一代的PAAS平臺的局限性和困境

•主要提供應用的部署和托管

•針對應用開發者

•僅支持特定的IaaS基礎技術

•支持單種開發語言和框架

•支持特定的服務,比如自定義的數據存儲APIs

•沒有很好的解決常用中間件的部署問題

•難以解決應用和資源的隔離問題

3.新一代的PAAS平臺

新一代的雲應用平臺技術則實現全方位的應用生命周期管理,關註開放性、應用的可移植性和雲間相互操作性, 其代表者包括Cloud Foundry, OpenShift, Docker, Heroku, MoPaaS等PaaS技術或服務,除了在第一代PaaS 技術對用戶在實現應用交付的加速所提供的功能外,具備以下大多數特征:

多語言和框架:支持多語言和框架以及語言框架的擴展機制

多服務:開放的核心服務以及服務的擴展機制

多雲和多IaaS技術:支持多種IaaS技術和多雲的部署,包括公有雲和私有雲

4.Docker的歷史與現狀分析

Docker已經收購了一系列創業公司,包括KiteMatic、Koality和Socketplane。完成新一輪投資後,Docker計劃加 快產品推進計劃,在本季度推出Docker Hub企業版,並且在接下來幾個月在存儲、網絡和安全三個產品方向發力。

紅帽在新的RHEL 7版本中增添了支持Docker的功能,IBM公開擁抱Docker和容器,亞馬遜推出了EC2容器服 務,就連公認的競爭對手VMware也宣布支持Docker。

國內,不僅騰訊、阿裏、百度、Ucloud、青雲等雲計算服務提供商已經將Docker用到實踐,還有數家Docker初 創企業在獲得了天使投資後正在辛勤的開發,準備將產品盡快發布到市場上。

騰訊雲計算公司對外宣布成為中國首家支持Docker Machine的雲計算廠商,並將自身定位於Docker基礎設施的服 務商,邁出構建Docker“航運”基礎設施的第一步。同時,在支持Docker Machine前提下,騰訊雲也推出了常用 系統的標準版Docker鏡像,以方便用戶能夠一鍵便捷創建容器。

Docker生態圈,2014-2015發展

貢獻者增長了183%;

•GitHub上關於Docker的項目增長了515%;

•Docker提供的工作機會增長了1720%;

•使用Docker構建的應用程序增長了934%(Boot2Docker下載量增 加了1456%);

•容器的下載量增加了18082%(這個是根據DockerHub上鏡像下載 量來統計的)。

•Docker Hub業務的進展:用戶數量增長至24萬,Repo增長至 15萬,Pull的數量超過5億次

二.Docker的技術原理介紹

Docker就是虛擬化的一種輕量級替代技術。Docker的容器技術不依賴任何語言、框架或系統,可以將App變成一種 標準化的、可移植的、自管理的組件,並脫離服務器硬件在任何主流系統中開發、調試和運行

簡單的說就是,在 Linux 系統上迅速創建一個容器(類似虛擬機)並在容器上部署和運行應用程序,並通過配置文件 可以輕松實現應用程序的自動化安裝、部署和升級,非常方便。因為使用了容器,所以可以很方便的把生產環境和開 發環境分開,互不影響,這是 docker 最普遍的一個玩法。

1.Docker相關的核心技術

Docker相關的核心技術之cgroups

Linux系統中經常有個需求就是希望能限制某個或者某些進程的分配資源。於是就出現了cgroups的概念, cgroup就是controller group ,在這個group中,有分配好的特定比例的cpu時間,IO時間,可用內存大小等。 cgroups是將任意進程進行分組化管理的Linux內核功能。最初由google的工程師提出,後來被整合進Linux內 核中。

cgroups中的 重要概念是“子系統”,也就是資源控制器,每種子系統就是一個資源的分配器,比如cpu子系 統是控制cpu時間分配的。首先掛載子系統,然後才有control group的。比如先掛載memory子系統,然後在 memory子系統中創建一個cgroup節點,在這個節點中,將需要控制的進程id寫入,並且將控制的屬性寫入, 這就完成了內存的資源限制。

cgroups 被Linux內核支持,有得天獨厚的性能優勢,發展勢頭迅猛。在很多領域可以取代虛擬化技術分割資源。 cgroup默認有諸多資源組,可以限制幾乎所有服務器上的資源:cpu mem iops,iobandwide,net,device acess等

2.Docker相關的核心技術之LXC

LXC是Linux containers的簡稱,是一種基於容器的操作系統層級的虛擬化技術。借助於namespace的隔離機制 和cgroup限額功能,LXC提供了一套統一的API和工具來建立和管理container。LXC跟其他操作系統層次的虛 擬化技術相比,最大的優勢在於LXC被整合進內核,不用單獨為內核打補丁

LXC 旨在提供一個共享kernel的 OS 級虛擬化方法,在執行時不用重復加載Kernel, 且container的kernel與host 共享,因此可以大大加快container的 啟動過程,並顯著減少內存消耗,容器在提供隔離的同時,還通過共享這 些資源節省開銷,這意味著容器比真正的虛擬化的開銷要小得多。 在實際測試中,基於LXC的虛擬化方法的IO和 CPU性能幾乎接近 baremetal 的性能。

雖然容器所使用的這種類型的隔離總的來說非常強大,然而是不是像運行在hypervisor上的虛擬機那麽強壯仍具有 爭議性。如果內核停止,那麽所有的容器就會停止運行。

• 性能方面:LXC>>KVM>>XEN

• 內存利用率:LXC>>KVM>>XEN

• 隔離程度: XEN>>KVM>>LXC

3.Docker相關的核心技術之AUFS

什麽是AUFS? AuFS是一個能透明覆蓋一或多個現有文件系統的層狀文件系統。 支持將不同目錄掛載到同一 個虛擬文件系統下,可以把不同的目錄聯合在一起,組成一個單一的目錄。這種是一種虛擬的文件系統,文 件系統不用格式化,直接掛載即可。

Docker一直在用AuFS作為容器的文件系統。當一個進程需要修改一個文件時,AuFS創建該文件的一個副本。 AuFS可以把多層合並成文件系統的單層表示。這個過程稱為寫入復制( copy on write )。

AuFS允許Docker把某些鏡像作為容器的基礎。例如,你可能有一個可以作為很多不同容器的基礎的CentOS 系統鏡像。多虧AuFS,只要一個CentOS鏡像的副本就夠了,這樣既節省了存儲和內存,也保證更快速的容 器部署。

使用AuFS的另一個好處是Docker的版本容器鏡像能力。每個新版本都是一個與之前版本的簡單差異改動, 有效地保持鏡像文件最小化。但,這也意味著你總是要有一個記錄該容器從一個版本到另一個版本改動的 審計跟蹤。

4.Docker原理之App打包

技術分享圖片

LXC的基礎上, Docker額外提供的Feature包括:標準統一的 打包部署運行方案

為了最大化重用Image,加快運行速度,減少內存和磁盤 footprint, Docker container運行時所構造的運行環境,實際 上是由具有依賴關系的多個Layer組成的。例如一個apache 的運行環境可能是在基礎的rootfs image的基礎上,疊加了 包含例如Emacs等各種工具的image,再疊加包含apache及 其相關依賴library的image,這些image由AUFS文件系統加載 合並到統一路徑中,以只讀的方式存在,最後再疊加加載 一層可寫的空白的Layer用作記錄對當前運行環境所作的修 改。

有了層級化的Image做基礎,理想中,不同的APP就可以既 可能的共用底層文件系統,相關依賴工具等,同一個APP的 不同實例也可以實現共用絕大多數數據,進而以copy on write的形式維護自己的那一份修改過的數據等

5.Docker全生命周期開發模式

Docker正在迅速改變雲計 算領域的運作規則,並徹 底顛覆雲技術的發展前景。 從持續集成/持續交付到微 服務、開源協作乃至 DevOps,Docker一路走來 已經給應用程序開發生命 周期以及雲工程技術實踐 帶來了巨大變革。

技術分享圖片

三.docker的基本概念

1.Docker Image

• Docker Image是一個極度精簡版的Linux程序運行環境,比如vi這種基本 的工具沒有,官網的Java鏡像包括的東西更少,除非是鏡像疊加方式的, 如Centos+Java7

• Docker Image是需要定制化Build的一個“安裝包”,包括基礎鏡像+應 用的二進制部署包

• Docker Image內不建議有運行期需要修改的配置文件

• Dockerfile用來創建一個自定義的image,包含了用戶指定的軟件依賴等。 當前目錄下包含Dockerfile,使用命令build來創建新的image

• Docker Image的最佳實踐之一是盡量重用和使用網上公開的基礎鏡像

2.Docker Container

• Docker Container是Image的實例,共享內核

• Docker Container裏可以運行不同Os的Image,比如Ubuntu的或者 Centos

• Docker Container不建議內部開啟一個SSHD服務,1.3版本後新增了 docker exec命令進入容器排查問題。

• Docker Container沒有IP地址,通常不會有服務端口暴露,是一個封閉的 “盒子/沙箱”

Docker Container的生命周期

技術分享圖片

3.Docker Daemon

• Docker Daemon是創建和運行Container的Linux守護進程,也是Docker 最主要的核心組件

• Docker Daemon 可以理解為Docker Container的Container

• Docker Daemon可以綁定本地端口並提供Rest API服務,用來遠程訪問 和控制

4.Docker Registry/Hub

Docker之所以這麽吸引人,除了它的新穎的技術外,圍繞官方Registry(Docker Hub)的生態圈也是相當吸引人眼球的地方。在Docker Hub上你可以很輕松下載 到大量已經容器化好的應用鏡像,即拉即用。這些鏡像中,有些是Docker官方維 護的,更多的是眾多開發者自發上傳分享的。而且 你還可以在Docker Hub中綁定 你的代碼托管系統(目前支持Github和Bitbucket)配置自動生成鏡像功能,這樣 Docker Hub會在你代碼更新時自動生成對應的Docker鏡像。

問題點:

Docker Hub是dotCloud公司私有的 國內曾有公司試圖提供鏡像服務,但被禁止 目前國內只有一個DaoCloud提供代理緩存服務

技術分享圖片

5.Docker學習必備基礎技能

• Linux基本操作和基本知識:磁盤、文件、日誌、用戶、權限、安全、網絡,建議centos/redhat

• 虛機相關技能:vmware workstation/virtbox熟練使用,虛機clone,組網,host-only網絡,nat網絡等熟練操作

(一)為什麽要學習docker