Docker系列課程01-Docker簡介
1.1 Docker簡介
Docker是一個開源的容器引擎,它可以幫助我們更快地交付應用。Docker可將應用程式和基礎設施層隔離,並且能將基礎設施當作程式一樣進行管理。使用Docker,可更快地打包、測試以及部署應用程式,並可減少從編寫到部署執行程式碼的週期。
TIPS
(1) Docker官方網站:https://www.docker.com/
(2) Docker GitHub:https://github.com/docker/docker
1.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/releases 。
Docker公司認為,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版本都享受為期一年的支援與維護期,在此期間接受安全與關鍵修正。
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官方文件的架構圖,如圖所示。
圖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容器的說明。它和系統安裝光碟有點像——我們使用系統安裝光碟安裝系統,同理,我們使用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與虛擬機器
- Hypervisor層被Docker Engine取代。
- 虛擬化粒度不同
- 虛擬機器利用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
相關文章
- 快速部署-01-dockerDocker
- 課程 3: Content Providers 簡介IDE
- 課程介紹
- 自然語言處理(NLP)簡介 | NLP課程自然語言處理
- docker 簡介Docker
- Docker簡介Docker
- 開課簡介
- Docker Machine簡介DockerMac
- Docker Machine 簡介DockerMac
- 計算機控制技術課程簡介與資料計算機
- Python開發系列課程彙總 - 課程大綱Python
- 從docker介紹及其簡介Docker
- Docker Swarm Mode簡介DockerSwarm
- Docker Compose簡介Docker
- 3-Docker簡介Docker
- [雲原生]Docker - 簡介Docker
- Docker入門簡介Docker
- Cisco CCNA系列課程學習
- Docker的那些事兒—Docker簡介(1)Docker
- Docker簡介與入門Docker
- Docker簡介及安裝Docker
- 阿里巴巴機器學習系列課程阿里機器學習
- Terraform 系列-Terraform 簡介ORM
- JavaScript課程——Day07(物件簡介、Math物件、時間物件、字串物件)JavaScript物件字串
- Docker開發篇 | 01-Docker安裝最新版本ubuntu並啟動容器DockerUbuntu
- 微服務入門【系列視訊課程】微服務
- .Net系列學習課程—01C#C#
- docker簡介以及優缺點Docker
- Docker常規安裝簡介Docker
- MacPorts打包過程簡介Mac
- 編譯過程簡介編譯
- MySQL入門系列:儲存程式(三)之儲存過程簡介MySql儲存過程
- java大資料最全課程學習筆記(3)--HDFS 簡介及操作Java大資料筆記
- Spring系列.Bean簡介SpringBean
- canvas系列教程之簡介Canvas
- Docker on PowerLinux—— 技術公開課-CSDN公開課-專題視訊課程DockerLinux
- 大資料系列修煉-Scala課程30大資料
- 大資料系列修煉-Scala課程31大資料