原文: http://www.itmuch.com/docker/01-docker-summary/
1.1 Docker簡介
Docker是一個開源的容器引擎,它可以幫助我們更快地傳遞應用。Docker可将應用程式和基礎設施層隔離,并且能将基礎設施當作程式一樣進行管理。使用Docker,可更快地打包、測試以及部署應用程式,并可減少從編寫到部署運作代碼的周期。
TIPS
(1) Docker官方網站:
https://www.docker.com/(2) Docker GitHub:
https://github.com/docker/docker1.2 版本與疊代計劃
近日,Docker釋出了Docker 17.06。進入Docker 17時代後,Docker分成了兩個版本:Docker EE和Docker CE,即:企業版(EE)和社群版(CE)。
1.2.1 版本差別
Docker EE(企業版)
Docker EE由公司支援,可在經過認證的作業系統和雲提供商中使用,并可運作來自Docker Store的、經過認證的容器和插件。
Docker EE提供三個服務層次:
服務層級 | 功能 |
---|---|
Basic | 包含用于認證基礎設施的Docker平台 Docker公司的支援 經過 認證的、來自Docker Store的容器與插件 |
Standard | 添加進階鏡像與容器管理 LDAP/AD使用者內建 基于角色的通路控制(Docker Datacenter) |
Advanced | 添加Docker安全掃描 連續漏洞監控 |
大家可在該頁檢視各個服務層次的價目:
https://www.docker.com/pricing。
Docker CE
Docker CE是免費的Docker産品的新名稱,Docker CE包含了完整的Docker平台,非常适合開發人員和運維團隊建構容器APP。事實上,Docker CE 17.03,可了解為Docker 1.13.1的Bug修複版本。是以,從Docker 1.13更新到Docker CE 17.03風險相對是較小的。
大家可前往Docker的RELEASE log檢視詳情
https://github.com/docker/docker/releasesDocker公司認為,Docker CE和EE版本的推出為Docker的生命周期、可維護性以及可更新性帶來了巨大的改進。
1.2.2 版本疊代計劃
Docker從17.03開始,轉向基于時間的
YY.MM
形式的版本控制方案,類似于Canonical為Ubuntu所使用的版本控制方案。
Docker CE有兩種版本:
edge版本每月釋出一次,主要面向那些喜歡嘗試新功能的使用者。
stable版本每季度釋出一次,适用于希望更加容易維護的使用者(穩定版)。
edge版本隻能在目前月份獲得安全和錯誤修複。而stable版本在初始釋出後四個月内接收關鍵錯誤修複和安全問題的修補程式。這樣,Docker CE使用者就有一個月的視窗期來切換版本到更新的版本。舉個例子,Docker CE 17.03會維護到17年07月;而Docker CE 17.03的下個穩定版本是CE 17.06,這樣,6-7月這個時間視窗,使用者就可以用來切換版本了。
Docker EE和stable版本的版本号保持一緻,每個Docker EE版本都享受為期一年的支援與維護期,在此期間接受安全與關鍵修正。
image.png
1.2.3 參考文檔
ANNOUNCING DOCKER ENTERPRISE EDITION:
https://blog.docker.com/2017/03/docker-enterprise-edition/1.3 Docker的發展曆程
- 發展曆程
Docker版本 | Docker基于{}實作 |
---|---|
Docker 0.7之前 | 基于LXC |
Docker0.9後 | 改用libcontainer |
Docker 1.11後 | 改用runC和containerd |
- 表格名詞對應官網
- 各名詞之間的關系
- OCI :定義了容器運作的标準,該标準目前由 libcontainer 和 appc 的項目負責人(maintainer)進行維護和制定,其規範文檔作為一個項目在GitHub上維護。
- runC(标準化容器執行引擎):根據根據OCI規範編寫的,生成和運作容器的CLI工具,是按照開放容器格式标準(OCF, Open Container Format)制定的一種具體實作。由libcontainer中遷移而來的,實作了容器啟停、資源隔離等功能。
- containerd:用于控制runC的守護程序,建構在OCI規範和runC之上。目前內建在Docker Engine中,參考文檔: https://blog.docker.com/2015/12/containerd-daemon-to-control-runc/ ,譯文: http://dockone.io/article/914
- 淺談發展曆程
- 時序:Docker大受歡迎 - 與CoreOS相愛相殺 - rkt誕生 - 各大廠商不爽 - OCI制定(2015-06) - 成立CNCF(2015-07-21) - Kubernetes 1.0釋出;
- CNCF :雲原生計算基金會,由谷歌聯合發起,現隸屬于Linux基金會。
- 拓展閱讀
- Docker背後的标準化容器執行引擎——runC: http://www.infoq.com/cn/articles/docker-standard-container-execution-engine-runc
- Docker、Containerd、RunC...:你應該知道的所有: http://www.infoq.com/cn/news/2017/02/Docker-Containerd-RunC
- Google宣布成立CNCF基金會,Kubernetes 1.0正式釋出: http://dockone.io/article/518
1.4 Docker快速入門
執行如下指令,即可啟動一個Nginx容器
docker run -d -p 91:80 nginx
1.5 Docker架構
我們來看一下來自Docker官方文檔的架構圖,如圖所示。
docker-architecture.png
圖12-1 Docker架構圖
我們來講解圖中包含的元件。
(1) Docker daemon(Docker守護程序)
Docker daemon是一個運作在主控端(DOCKER_HOST)的背景程序。我們可通過Docker用戶端與之通信。
(2) Client(Docker用戶端)
Docker用戶端是Docker的使用者界面,它可以接受使用者指令和配置辨別,并與Docker daemon通信。圖中,docker build等都是Docker的相關指令。
(3) Images(Docker鏡像)
Docker鏡像是一個隻讀模闆,它包含建立Docker容器的說明。它和系統安裝CD光牒有點像——我們使用系統安裝CD光牒安裝系統,同理,我們使用Docker鏡像運作Docker鏡像中的程式。
(4) Container(容器)
容器是鏡像的可運作執行個體。鏡像和容器的關系有點類似于面向對象中,類和對象的關系。我們可通過Docker API或者CLI指令來啟停、移動、删除容器。
(5) Registry
Docker Registry是一個集中存儲與分發鏡像的服務。我們建構完Docker鏡像後,就可在目前主控端上運作。但如果想要在其他機器上運作這個鏡像,我們就需要手動拷貝。此時,我們可借助Docker Registry來避免鏡像的手動拷貝。
一個Docker Registry可包含多個Docker倉庫;每個倉庫可包含多個鏡像标簽;每個标簽對應一個Docker鏡像。這跟Maven的倉庫有點類似,如果把Docker Registry比作Maven倉庫的話,那麼Docker倉庫就可了解為某jar包的路徑,而鏡像标簽則可了解為jar包的版本号。
Docker Registry可分為公有Docker Registry和私有Docker Registry。最常用的Docker Registry莫過于官方的Docker Hub,這也是預設的Docker Registry。Docker Hub上存放着大量優秀的鏡像,我們可使用Docker指令下載下傳并使用。
1.6 Docker與虛拟機
docker-vs-vm.png
- Hypervisor層被Docker Engine取代。
- Hypervisor: https://baike.baidu.com/item/hypervisor/3353492
- 虛拟化粒度不同
- 虛拟機利用Hypervisor虛拟化CPU、記憶體、IO裝置等實作的,然後在其上運作完整的作業系統,再在該系統上運作所需的應用。資源隔離級别:OS級别
- 運作在Docker容器中的應用直接運作于主控端的核心,容器共享主控端的核心,容器内部運作的是Linux副本,沒有自己的核心,直接使用實體機的硬體資源,是以CPU/記憶體使用率上有一定優勢。資源隔離級别:利用Linux核心本身支援的容器方式實作資源和環境隔離。
-
- 《Docker、LXC、Cgroup的結構關系》: http://speakingbaicai.blog.51cto.com/5667326/1359825/
1.7 Docker應用場景
- 八個Docker的真實應用場景: http://dockone.io/article/126