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