一 什么是虛擬化
在計算機中,虛擬化(Virtualization)是一種資源管理技術,是計算機的各種實體資源,如服務器,網絡,內存及存儲等,予以抽象,轉換后呈現出來,打破實體結構間的不可切割的障礙,使用戶可以比原本的組態更好的方式來應用這些資源。這些資源的新虛擬部分是不受現有資源的架設方式,地域或物理組態所限制。一般所指的虛擬化資源包括計算能力和資料存儲
在世紀的生產環境中,虛擬化技術主要用來解決高性能的物理硬件產能過剩和老舊的硬件產能過低的重組崇勇,透明化底層物理硬件,從而最大化的利用物理硬件,對資源充分利用
二 什么是Docker
Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
Docker 從 17.03 版本之后分為 CE(Community Edition: 社區版) 和 EE(Enterprise Edition: 企業版),社區版免費,企業版收費。
三 容器與虛擬機比較
下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處,可見容器是在操作系統層面上實現虛擬化,直接復用本地主機的操作系統,而傳統方式則是在硬件層面實現。
虛擬機:
Docker:
四 Docker的使用場景
1、Web應用服務
Web應用服務是使用最廣泛的一類服務,典型的架構是前端一個Tomcat + Java服務,后端mysql數據庫。前端的Java web服務器是最適合使用Docker容器的,先將Java運行環境、web服務器直接打包成一個通用的基礎docker鏡像,之后再將自定義應用代碼或編譯程序包加入到該基礎鏡像中就能產生一個新的應用鏡像,最后通過docker服務立馬就能以容器的形式啟動web應用服務。因為web應用程序一般是無狀態的,隨着業務訪問量增減,用同樣的鏡像新建、銷毀容器即可輕松實現伸縮(前面還需配上DNS域名或者負載均衡的服務),例如下圖所示。
2、持續集成和持續部署
互聯網行業倡導敏捷開發,使用docker容器雲平台,就能實現從代碼編寫完成推送到git/svn后,自動觸發后端平台將代碼下載、編譯並構建成測試docker鏡像,再替換測試環境容器服務,自動在Jenkins中運行單元/集成測試,最后測試通過后,馬上就能自動將新版本鏡像更新到線上,完成服務升級。整個過程全自動化,一氣呵成,最大程度地簡化了運維成本,而且保證線上、線下環境完全一致,而且線上服務版本與git/svn發布分支也實現統一。
3、微服務架構使用
微服務架構將傳統分布式服務繼續拆分解耦,形成一些更小服務模塊,服務模塊之間獨立部署升級,這些特性與容器的輕量、高效部署不謀而合。如下圖所示,每個容器里可以使用完全不同環境的鏡像服務,容器啟動即產生了一個獨立的微服務主機節點,上層服務與下層服務之間服務發現通過環境變量注入、配置文件掛載等多種方式靈活解決,而且還可以直接將雲平台提供的各種雲服務與自定義的微服務整合組成一個強大的服務集群。
更重要的是,擁有如此多服務的集群環境遷移、復制也非常輕松,只需選擇好各服務對應的docker服務鏡像、配置好相互之間訪問地址就能很快搭建出一份完全一樣的新集群。
五 Docker的優點
1、更快速的交付和部署
對開發和運維人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行。
開發者可以使用一個標准的鏡像來構建一套開發容器,開發完成之后,運維人員可以直接使用這個容器來部署代碼。 Docker 可以快速創建容器,快速迭代應用程序,並讓整個過程全程可見,使團隊中的其他成員更容易理解應用程序是如何創建和工作的。 Docker 容器很輕很快!容器的啟動時間是秒級的,大量地節約開發、測試、部署的時間。
2、更高效的虛擬化
Docker 容器的運行不需要額外的 hypervisor 支持,它是內核級的虛擬化,因此可以實現更高的性能和效率。
3、更輕松的遷移和擴展
Docker 容器幾乎可以在任意的平台上運行,包括物理機、虛擬機、公有雲、私有雲、個人電腦、服務器等。 這種兼容性可以讓用戶把一個應用程序從一個平台直接遷移到另外一個。
4、更簡單的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的管理。