周俊威
摘要 文章以Docker技術在軟件開發(fā)過程中的具體運用為研究對象,首先對分析了Docker技術概念及優(yōu)勢,隨后對分析了軟件開發(fā)中Docker技術的運用以供參考。
【關鍵詞】Docker技術 軟件開發(fā) 應用
1 Docker技術概述及優(yōu)勢分析
1.1 Docker技術概述
Docker是一個基于Linux Containers虛擬化技術的高級容器引擎,把Linux的cgroupnamespace等容器底層技術進行封裝抽象,從而為用戶提供了創(chuàng)建與管理容器的界面,其中包括命令行與API,Docker作為一個開源項目,基于Google公司推出的Go語言來實現(xiàn),并遵循Apache2.0協(xié)議,而Docker技術即是一種面向云平臺的虛擬化技術,開發(fā)Docker技術的最初目的是將各種應用程序和他們所依賴的運行環(huán)境打包成標準的contamer(容器)/image(鏡像),從而可以在不同的平臺上進行運行。而運用Docker技術最終目的即是可以管理應用組件的封裝、分發(fā)、部署、運行等生命周期,從而實現(xiàn)應用組件級別的“一次封裝,隨處運行”。
Docker包含很多重要的概念,例如鏡像、容器、數(shù)據(jù)卷、鏈接、倉庫等,其中鏡像類似于虛擬機的快照,但它相對于虛擬機快照來說更加輕量級,例如一個鏡像可以包含一個完整的Linux操作系統(tǒng)環(huán)境,里面僅僅安裝了Tomcat,還包含一些其他用戶需要的程序。可以通過鏡像來進行容器的創(chuàng)建。Docker容器相當于從快照中進行虛擬機的創(chuàng)建,其是鏡像創(chuàng)建的運行實例,因此可以被執(zhí)行創(chuàng)建、刪除、停止、啟動等操作,并且對于每個容器來說,其都是互相隔離的,從而可以確保平臺的安全性。數(shù)據(jù)卷簡單來說即是可供一個或多個容器使用的特殊目錄,可以實現(xiàn)進程與數(shù)據(jù)的分離,實際上其保存在數(shù)據(jù)之外,從而可以在不影響數(shù)據(jù)的前提下執(zhí)行對容器的刪除、重建、修改等操作,此外,還可以在多個容器之間實現(xiàn)數(shù)據(jù)卷共享功能。容器的鏈接(linking)是除了端口映射以外,另一種和容器進行交互應用的方式,通過在源與接收容器之間創(chuàng)建一個通道,用于接收容器可以看到源容器指定的信息。
1.2 Docker技術優(yōu)勢
在傳統(tǒng)的軟件開發(fā)方面,主要包含以下幾點部署流程(僅包括純技術部分):首先完成開發(fā)環(huán)境的搭建,需要進行Web服務器的安裝、數(shù)據(jù)庫的安裝及網(wǎng)絡分配,其次是相關的開發(fā)測試,需要軟件程序開發(fā)人員進行編碼、測試、版本管理工作,最后是上線生產(chǎn),需要軟件程序開發(fā)人員實現(xiàn)操作系統(tǒng)及各種硬件安裝配置。主要存在以下幾點問題:
(1)在開發(fā)過程中資源利用率較低;
(2)單物理機應用較多,無法進行有效隔離;
(3)軟件開發(fā)運維部署不夠方便;
(4)測試、版本管理過于復雜;
(5)遷移成本非常高;
(6)傳統(tǒng)虛擬機占用的空間較大,啟動較慢,并且管理方面非常復雜。
一個完整的IT系統(tǒng)應包括以下幾個層次,分別是應用程序、運行平臺( bin/framework/lib)、操作系統(tǒng)、硬件(基礎設施)。其中軟件開發(fā)人員主要負責應用程序的代碼編輯、構建、測試及發(fā)布,主要涉及應用程序及虛擬平臺這兩層,而軟件運行維護人員則涉及從硬件、操作系統(tǒng)、到運行平臺的安裝、配置、運行監(jiān)控、升級、優(yōu)化等工作,Docker技術的支持下,其提供了一種運行環(huán)境,從而實現(xiàn)了對上層應用于下層操作系統(tǒng)與硬件系統(tǒng)關聯(lián)有效的隔離,使得術業(yè)有專攻,極大提升了軟件開發(fā)的效率。
從虛擬化技術的角度來看,Docker與傳統(tǒng)的虛擬化技術相比,其粒度更小、更輕量級,它不需要虛擬化硬件,也不需要即時編譯與指令級模擬。對于傳統(tǒng)的虛擬化技術來說(例如v Sphere和Hyper-V),其目標是建立一個可以執(zhí)行應用的整套虛擬機;而Docker所利用的Linux容器技術則是將應用所需要的相關源碼、依賴庫、環(huán)境配置等進行統(tǒng)一打包封裝,并在此基礎上實現(xiàn)一個虛擬機的建立。Docker虛擬化技術可以對由一個單獨操作系統(tǒng)管理的資源進行統(tǒng)一的劃分,使得相應資源被分配到一個個孤立的組中,并使得孤立組之間資源使用需求沖突得到有效的平衡,進而大大提升了資源的利用率。在Docker技術的支持下,容器可以不需要任何特殊的解釋機制,就可以在核心CPU運行本地指令,從而使得軟件開發(fā)過程中半虛擬化和系統(tǒng)調用替換的復雜性得到了有效的降低,在運行性能方面更加接近宿主機的運行性能。
Docker在虛擬化構建方面主要基于應用組件級虛擬化技術進行,從而使得容器具有獨立性和封閉性的特征,其中獨立性體現(xiàn)為一個容器在運行時不會對其他容器或者宿主環(huán)境造成影響,各司其職。封閉性體現(xiàn)為每一個容器都有屬于自己的存儲空間、進程以及網(wǎng)絡接口,不對外開放,除此之外,還包含Linux系統(tǒng)運行所需的一些應用程序。但Docker技術與傳統(tǒng)操作系統(tǒng)級虛擬化技術不同,其雖然也基于容器運行,但并沒有對一個完整的Linux操作系統(tǒng)進行完全虛擬,而只保留了應用程序運行所必需的核心操作系統(tǒng)環(huán)境。因此與傳統(tǒng)的虛擬技術相比,它還具有啟動時間短(秒級啟動、停止)、空間占用少(一般僅幾M)、分發(fā)和復制方便等優(yōu)勢,除此之外,還可以在普通服務器上建立上百個Docker實例,有效提升開發(fā)測試部署的速度,使得版本管理得到有效的簡化,與此同時,Docker還可以快速創(chuàng)建并刪除容器,有效實現(xiàn)快速迭代,使得軟件開發(fā)、測試、部署時間得到很好的解決,并且,由于相應不同的步驟都有著明確的位置與操作,因此整個過程全程可見,更加有利于開發(fā)團隊共同協(xié)作開展軟件開發(fā)工作。此外,Docker還可以部署與擴展web應用、數(shù)據(jù)庫及后端服務,例如在羊年春晚,正是由于Docker集群成功的為1.02億用戶提供了刷微博、搶紅包提供了可靠地服務。具體來說,Docker容器與傳統(tǒng)虛擬機對比差異如表l所示。
1.3 Docker的體系架構
Docker的客戶端是遠程控制器,對于Docker Host來說,其會收到通過TCP/REST傳送來的請求,請求呈多樣性變化,其中最為常見的請求包括、容器創(chuàng)建、容器刪除、容器保存、容器運行、等。Daemon位于Docker的服務端,可以以客戶端的請求為根據(jù),對其進行管理。然后通過driver的應用可以將請求轉發(fā)到Iibcontainer執(zhí)行環(huán)境中,該執(zhí)行環(huán)境位于容器中。libcontainer提供與各種Linux內核隔離的接口,與控制組具有一定的的相似性。在這種架構環(huán)境下,多個容器可以對一個Linux內核進行共享,而對于這些容器來說,其在運行方面又相互隔離。因此要保證Docker技術的輕量級要求得以實現(xiàn),就不能在Docker容器中配置專用操作系統(tǒng)。
2 軟件開發(fā)中Docker技術的運用
軟件開發(fā)是一項復雜的工程,在很多情況下,基于種種因素影響,軟件開發(fā)人員在搭建對開發(fā)環(huán)境時,總是會遇到各種問題,此時軟件開發(fā)人員可以利用Docker技術作為一種輕量級的有效解決方案,Docker在功能方面與傳統(tǒng)虛擬機類似,并且相較于傳統(tǒng)虛擬機而言其功能更加強大,例如可以使用Docker使得多個容器同時進行運行,并且相較于與傳統(tǒng)的虛擬機,運用Docker對CPU、磁盤、內存的消耗更低,極大提升了Docker運用到適配性。
2.1 Docker在開發(fā)環(huán)境搭建中的應用
軟件開發(fā)人員在進行開發(fā)環(huán)境搭建時,可以通過應用Docker技術,使得開發(fā)環(huán)境具有良好的擴展性,與此同時,還能夠有效實現(xiàn)磁盤內存節(jié)約。首先要完成基礎的Image(鏡像)搭建,然后在此基礎之上,對Image進行相應擴展,從而使得不同的開發(fā)環(huán)境得以實現(xiàn)。在完成Image啟動之后,需要把Container(容器)端口映射到主機之上,映射關系如圖1所示。
在某些情況下,為了能夠在host的主機中實現(xiàn)更加快捷便利的代碼編輯,軟件開發(fā)人員需要在Container中對host主機(宿主)上的目錄進行映射處理,在這種情況下,軟件開發(fā)人員不需要手動復制這些目錄至Container上,然后通過重啟完成相關操作。而是直接可以在Container中對其進行運行與編輯處理。具體的磁盤映射關系如圖2所示。
2.2 Docker技術的應用架構
在進行軟件開發(fā)過程中,想要成功發(fā)布一款產(chǎn)品,作為軟件開發(fā)人員需要關注的東西非常多,從各種OS到各種中間件再到各種App,事無巨細,并且使得相應管理方面也增加了很多難度,這一問題是軟件行業(yè)中普遍存在的問題,同時也是軟件行業(yè)在進行軟件開發(fā)時必須要直接面對的問題,在軟件開發(fā)過程中通過對Docker技術的應用,其可以對多種部署應用實例工作加以簡化,例如Web應用、后臺應用、數(shù)據(jù)庫應用、大數(shù)據(jù)應用等,具體來說,其可以將諸如Hadoop集群、消息隊列等打包成一個Image進行部署工作,實際上,使用Docker部署一個應用的方法非常簡單,基于Docker自身特性,很多時候我們可以使用相同的image,然后在此基礎上配以不同的運行時軟件和數(shù)據(jù),在Docke作用下,其將網(wǎng)絡,存儲等相關內容都進行了自主配置,下載應用并安裝。然后通過一些參數(shù)的配置,將Image進行打包上傳。除此此外,Container在創(chuàng)建方法上更加靈動自由,其可以由程序開發(fā)人員自主手動創(chuàng)建,也可以由Docker自動創(chuàng)建,但前提條件是如果源碼庫里面包涵Docker File文件,此時才會自動自動創(chuàng)建,對于Containe來說,其作為一個容器不僅包涵相應應用,還包括應用的所有依賴項。因此開發(fā)人員可以使用諸如Docker、Search等命令,并在無論是公有還是私有的Docker Registry里對Containers進行搜索,另一方面,還可以使用諸如Docker Pull等相應命令,從注冊表里對Container進行相應推送,還可以使用ockerRun命令執(zhí)行啟動、運行、停止等相應操作。
3 總結
綜上所述,通過對Docker技術相應概念進行了分析介紹,并將其與傳統(tǒng)虛擬機進行了性能優(yōu)勢對比,從中可以看出Docker技術具有顯著的優(yōu)勢,盡管在安全性與隔離性方面Docker相較于傳統(tǒng)虛擬機仍有待進一步提升,但仍不可否認在軟件開發(fā)中運用Docker技術仍更具備優(yōu)勢,相信隨著云計算的發(fā)展,Docker技術會得到得到更廣泛的發(fā)展與應用。
參考文獻
[1]高禮,高昕.Docker技術在軟件開發(fā)過程中的應用研究[J].軟件,2016, 37(03):110-113.
[2]段嘉騰.Docker技術在軟件開發(fā)過程中的應用研究[J].中小企業(yè)管理與科技(中旬刊),2016,37 (09):152-153.
[3]鐘良侃.Docker技術在Web服務系統(tǒng)中的應用研究[J].電腦知識與技術,2016,12 (26):123-126.