【Docker】進階之路:(二)Docker簡介
- 什么是 Docker
- Docker 由來與發展歷程
- Docker的架構與組成
- Docker容器生態
- 容器核心技術
- 容器規范
- 容器平臺技術
- 為什么使用Docker
- Docker的應用場景
什么是 Docker
簡單地講,Docker就是一個應用容器引擎,通過Docker,管理員可以非常方便地對容器進行管理。Docker基于Go語言開發,并且遵從Apache 2.0開源協議。
Docker提供了對容器鏡像的打包封裝功能。利用Docker,開發者可以將他們開發的應用系統以及依賴打包起來,放到一個輕量級的、可移植的容器中,然后發布到任何的Linux或者Windows上面。這樣的話,Docker就統一了整個開發、測試和部署的環境和流程,極大地減少運維成本。
Docker完全使用沙箱機制,容器之間不會有任何的接口。
Docker 由來與發展歷程
2010年,幾個大胡子年輕人在美國舊金山成立了一家做PaaS(Platform-as-a-Service,平臺即服務)平臺的公司,并且起名為dotCloud。雖然dotCloud公司曾經獲得過一些融資,但隨著大廠商,包括微軟、谷歌以及亞馬遜等殺入云計算領域,dotCloud公司舉步維艱。
幸運的是,上帝每關上一扇門,就會打開一扇窗。2013年初,dotCloud公司的工程師們決定將他們的核心技術Docker開源,這項技術能夠將Linux容器中的應用代碼打包,輕松地在服務器之間遷移。
令所有人意想不到的是,開源之后Docker技術風靡全球,于是,dotCloud公司決定改名為Docker,全身心投入到Docker的開發中。2014年8月,Docker公司宣布把PaaS業務dotCloud出售給位于德國柏林的PaaS服務提供商cloudControl,自此,dotCloud和Docker分道揚鑣。
Docker的架構與組成
Docker采用C/S架構,即客戶端/服務器架構。管理員通過Docker客戶端與Docker服務器進行交互。Docker服務器端負責構建、運行和分發Docker鏡像。用戶可以把Docker的客戶端和服務器部署在同一臺機器上面,也可以分別部署在不同的機器上面,兩者之間通過各種接口進行通信。
Docker的典型體系架構如圖所示。
Docker容器生態
容器核心技術
容器核心技術是指能夠讓 container 在 host 上運行起來的那些技術。 這些技術包括容器規范、容器 runtime、容器管理工具、容器定義工具、Registry以及容器OS,下面分別介紹。
容器規范
容器不僅有 Docker,還有如 CoreOS 的 rkt等其他容器。為了保證容器生態的健康發展,保證不同容器之間能夠兼容,包括Docker、CoreOS、Google等在內的若干公司共同成立了 Open Container Initiative(OCI) 的組織,其目是制定開放的容器規范。OCI已發布了兩個規范:runtime spec 和 image format spec。 有了這兩個規范,不同組織和廠商開發的容器能夠在不同的 runtime 上運行,保證了容器的可移植性和互操作性。
容器平臺技術
容器核心技術使得容器能夠在單個 host 上運行,而容器平臺技術能夠讓容器作為集群在分布式環境中運行。容器平臺技術包括容器編排引擎、容器管理平臺和基于容器的 PaaS。下面將介紹這幾塊內容。
容器編排引擎
基于容器的應用一般會采用微服務架構。在這種架構下,應用被劃分為不同的組件,并以服務的形式運行在各自的容器中,通過 API 對外提供服務。為了保證應用的高可用,每個組件都可能會運行多個相同的容器。這些容器會組成集群,集群中的容器會根據業務需要被動態地創建、遷移和銷毀。
這樣一個基于微服務架構的應用系統實際上是一個動態的可伸縮的系統。這對我們的部署環境提出了新的要求,我們需要有一種高效的方法來管理容器集群,這就是容器編排引擎要負責的工作。
所謂編排(orchestration),通常包括容器管理、調度、集群定義和服務發現等。通過容器編排引擎,容器被有機地組合成微服務應用,以實現業務需求。
為什么使用Docker
Docker的應用場景
Docker提供輕量級的虛擬化服務。每個Docker容器都可以運行一個獨立的應用。例如,用戶可以將Java應用服務器Apache Tomcat運行在一個容器中,而MySQL數據庫服務器運行在另外一個容器中。
目前,Docker的應用場景非常廣泛,主要有以下幾種。
- 簡化配置
這是Docker的初始目的。Docker將應用程序代碼、運行環境以及配置進行打包。用戶在部署時,只要以該鏡像為模板創建容器即可。實際上,這實現了應用環境和底層環境的解耦。 - 簡化部署過程
Docker讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,即可實現虛擬化。
Docker改變了傳統的虛擬化方式,使得開發者可以直接將自己開發的應用放入Docker中進行管理。方便快捷已經是Docker的最大優勢,過去需要用數天乃至數周的任務,在Docker容器的處理下,只需要數分鐘就能完成。 - 節省開支
另一方面,云計算時代到來,使開發者不必為了追求效果而配置高額的硬件,Docker改變了高性能必然高價格的思維定勢。Docker與云計算機的結合,不僅解決了硬件管理的問題,也改變了虛擬化的方式。
Docker的廣泛應用極大地降低了IT設施的運維成本。具體來說,主要體現在以下方面。
- 輕量級的虛擬化。與傳統的服務器或者主機虛擬化相比,Docker實現了更加輕量級的虛擬化。這對于應用部署來說,可以減少部署的時間成本和人力成本。
- 標準化應用發布。Docker容器包含了運行環境和可執行程序,可以跨平臺和主機使用。
- 節約啟動時間。傳統的虛擬主機的啟動一般是分鐘級,而Docker容器啟動是秒級。
- 節約存儲成本。以前一個虛擬機至少需要幾個GB的磁盤空間,而Docker容器可以減少到MB級。