何木青
(廣東茂名幼兒師范??茖W(xué)校, 廣東 茂名525000)
隨著互聯(lián)網(wǎng)信息技術(shù)的迅速發(fā)展和Web2.0 時代的到來,云計算也正以一種全新的商業(yè)計算模式在移動商務(wù)、搜索服務(wù)和開放協(xié)作等方面快速開展起來。 這使得廣大用戶可以非常便捷地開發(fā)、部署應(yīng)用程序,并將這些應(yīng)用程序托管于PaaS 管理的云基礎(chǔ)設(shè)施中,不僅縮短了開發(fā)周期,而且還較大程度地降低了運維成本。 PaaS 管理的云基礎(chǔ)設(shè)施離不開虛擬化的技術(shù)支撐,而Docker 正是與其相匹配的、虛擬化的容器型技術(shù),它的出現(xiàn)使云計算的軟件開發(fā)進入了一個新的時代——Web2.0 時代。 由此可見,研究Docker 技術(shù)在計算機軟件開發(fā)中的應(yīng)用具有極其重大的實踐意義[1]。
Docker 是以Go 語言為基礎(chǔ)的云開源項目。 是一個基于Linux Containers,LXC 虛擬化技術(shù)的高級容器引擎,在此基礎(chǔ)上,使Docker 容器的使用體驗更加優(yōu)化。 可以為用戶提供高效、敏捷和輕量級的容器方案,支持在本地系統(tǒng)和多種主流云平臺(PaaS)上進行部署,為Docker 技術(shù)的應(yīng)用開發(fā)提供“一站式”的解決方案[2]。
開發(fā)Docker 技術(shù)的目的,是為了將各種運行環(huán)境和應(yīng)用程序打包成標(biāo)準(zhǔn)的image (鏡像 )/container (容器),使它們在各自不同的平臺上進行運行操作,應(yīng)用分發(fā)、運行、部署、封裝等生命周期,實現(xiàn)應(yīng)用組件的一次性封裝和隨處運行。
在Docker 技術(shù)中涉及很多概念,諸如:鏡像、容器、鏈接、倉庫以及數(shù)據(jù)卷等等,其中鏡像和容器是最重要的兩個。 鏡像中包含著Linux 操作系統(tǒng),不僅安裝有Tom cat,而且還裝有用戶所需要的程序;容器則是通過鏡像來進行創(chuàng)建的,因此容器具有執(zhí)行創(chuàng)建、停止、啟動、刪除等操作功能,容器與容器之間是相互隔離的,平臺的安全性是有保障的。
計算機軟件開發(fā)的傳統(tǒng)流程部署過程:(1)安裝Web 服務(wù)器和數(shù)據(jù)庫,搭建開發(fā)環(huán)境,進行網(wǎng)絡(luò)分配。 (2)開發(fā)人員進行測試、編碼、對版本進行管理。 (3)對硬件系統(tǒng)進行配置安裝并實現(xiàn)操作[3]。
傳統(tǒng)計算機軟件開發(fā)的主要缺點:(1)在開發(fā)過程中資源的利用率較低。 (2)不能對單物理機的應(yīng)用進行有效隔離。 (3)不方便部署軟件開發(fā)運維。 (4)是對版本的管理和測試比較復(fù)雜。 (5)傳統(tǒng)虛擬機啟動較慢,管理復(fù)雜,占用空間比較大;(6)遷移成本高。
IT 系統(tǒng)主要包括4 個層次,即操作系統(tǒng)、運行平臺、應(yīng)用程序、硬件。 其中:應(yīng)用程序的代碼編輯、發(fā)布、構(gòu)建及測試,由軟件開發(fā)人員負責(zé);而硬件、操作系統(tǒng)以及運行平臺的安裝、配置和運行監(jiān)控的升級、優(yōu)化等則由運行維護人員負責(zé)。 在Docker 技術(shù)的支持下,該系統(tǒng)提供的運行環(huán)境實現(xiàn)了上下層操作系統(tǒng)與硬件系統(tǒng)關(guān)聯(lián)有效的隔離,從而使軟件開發(fā)的速度得到了極大的提升[4]。
Docker 技術(shù)與虛擬化技術(shù)進行比較,不同點有兩點:(1)Docker 技術(shù)的粒度小于傳統(tǒng)的虛擬化技術(shù)的粒度,重量更輕,而且在硬件的虛擬化、指令級模擬和即時編譯方面均可省去;傳統(tǒng)的虛擬技術(shù)的目標(biāo)是建立一個能夠應(yīng)用的虛擬機,而Docker 技術(shù)則是將所有相關(guān)源碼、環(huán)境配置、依賴庫等統(tǒng)一打包封裝,建立一個虛擬機。 (2)Docker 技術(shù)并未對Linux 操作系統(tǒng)進行完全的虛擬,還保留了程序運行所必有的核心操作系統(tǒng),所以Docker 技術(shù)與傳統(tǒng)的虛擬技術(shù)相比,不僅具有啟動時間短、空間占用少的特點,而且還具備分發(fā)、復(fù)制方便等功能優(yōu)勢[5]。Docker 技術(shù)與傳統(tǒng)虛擬技術(shù)的比較,見表1。
表1 Docker 容器與傳統(tǒng)虛擬機性能對比差異表Tab. 1 Docker container versus traditional virtual machine performancecomparisondifference table
Docker 虛擬化技術(shù)可以大幅度提升資源的利用率。 Docker 虛擬化技術(shù)可以對某一操作系統(tǒng)的管理資源進行統(tǒng)一劃分,使之分配到一個個孤立的組中,以達到有效的平衡,提高資源的利用率。
在Docker 技術(shù)的虛擬化構(gòu)建方面,Docke 是在應(yīng)用組件級虛擬化技術(shù)基礎(chǔ)上的,使Docker 容器具有封閉性和獨立性的特征。 封閉性主要表現(xiàn)為每個容器都有自己的存儲空間、網(wǎng)絡(luò)接口以及進程;獨立性主要表現(xiàn)為當(dāng)某個容器在運行時,不會因為其運行而引向其它容器,每個容器都有自己的運行職責(zé)[6]。
Docker 技術(shù)的實際應(yīng)用范圍廣。 主要體現(xiàn)在:(1)適用范圍除上述外,還適用于普通服務(wù)器。 (2)可以快速創(chuàng)建或刪除容器。 (3)可以擴展與部署Web 的應(yīng)用、后端服務(wù)以及數(shù)據(jù)庫等。
Docker 是一個Client/Server,即C S(客戶/服務(wù)器)的架構(gòu),其客戶端實際上是遠程控制器,它是通過TCP/REST 向Docker Host 發(fā)出請求的,請求的內(nèi)容主要包括:容器創(chuàng)建、容器刪除、容器運行和容器保存等。 其體系機構(gòu)的框架結(jié)構(gòu)是:由部署在Docker 的服務(wù)端Daemon,以客戶端的名義發(fā)出管理請求;通過driver 轉(zhuǎn)發(fā)到位于容器中的libcontainer;再由libcontainer 提供與各種不同的Linux 內(nèi)核隔離接口,實現(xiàn)Docker 技術(shù)體系架構(gòu)。 由于Docker 容器操作系統(tǒng)無需專用,因而它可以實現(xiàn)輕量級的要求。Docker 體系架構(gòu),見圖1。
圖1 Docker 體系構(gòu)架圖Fig. 1 Docker Architecture Chart
計算機軟件開發(fā)是一項極為復(fù)雜的系統(tǒng)工程。開發(fā)人員在搭建開發(fā)環(huán)境時,會遇到各種各樣的問題,然而Docker 技術(shù)的應(yīng)用,卻給解決這些問題帶來了極大的方便。 比如,Docker 的應(yīng)用,可以使多個容器同時運行,且在使用功能方面,相較于傳統(tǒng)虛擬機而言更加強大,能夠較大程度地降低磁盤、CPU、內(nèi)存的消耗,提升Docker 技術(shù)運用的適配性。
運用Docker 技術(shù)進行開發(fā)環(huán)境的搭建,不僅能夠使開發(fā)環(huán)境發(fā)揮出良好的擴展性能,而且還能有效地節(jié)約磁盤、內(nèi)存。 搭建應(yīng)用的具體步驟:(1)在完成Image (鏡像)搭建的基礎(chǔ)上,對Image 進行相應(yīng)的擴展,實現(xiàn)不同的開發(fā)環(huán)境。 (2)完成并實現(xiàn)Image 啟動后,把容器(Containe)端口映射到主機之上,具體映射關(guān)系如圖2 所示。 (3)為了實現(xiàn)host主機代碼的快捷編輯,在Container 中對host 上的目錄進行映射處理,并通過重啟完成相關(guān)操作。 (4)在Container 中進行編輯處理,具體如圖3 所示。
圖2 端口映射關(guān)系Fig. 2 Port mapping relationship
圖3 端口映射關(guān)系Fig. 3 Port mapping relationship
在實際工作中,要搭建開發(fā)/測試環(huán)境往往比較困難,需要軟件開發(fā)人員完成眾多的軟件安裝和配置工作。 而應(yīng)用Docker 技術(shù)構(gòu)建開發(fā)/N 試環(huán)境,只需要制作一份符合要求Docker 鏡像,即可還原出多個完全一致的環(huán)境。
對Docker 技術(shù)的實際應(yīng)用,主要體現(xiàn)在兩個方面:(1)簡化了應(yīng)用部署。 主要是大數(shù)據(jù)的應(yīng)用、數(shù)據(jù)庫的應(yīng)用、后臺的應(yīng)用以及Web 的應(yīng)用。 例如可以將消息隊列、 Hadoop 集群等打包成一個Image 進行部署,在Docker 的作用下,通過配置參數(shù),將Image 進行打包上傳。 (2)Docker 技術(shù)的應(yīng)用,使Container 在創(chuàng)建方法上更加靈活。 Container 的創(chuàng)建既可以手動創(chuàng)建,也可以利用Docker 自動創(chuàng)建,但自動創(chuàng)建的前提是,源碼庫里面必須包含Docker File 文件,Containe 不僅要包含相應(yīng)的應(yīng)用,還應(yīng)包含應(yīng)用的所有依賴項。 此外,還可以使用Docker Pull 等相應(yīng)命令,對Container 進行相應(yīng)推送,使用Docker Run 命令執(zhí)行運行、啟動、停止等相應(yīng)操作。
本文在對Docker 技術(shù)內(nèi)涵進行探討的基礎(chǔ)上,將Docker 技術(shù)與傳統(tǒng)的虛擬技術(shù)進行了比較,Docker 的優(yōu)勢明顯。 在Docker 技術(shù)軟件的實際開發(fā)應(yīng)用方面,其優(yōu)勢更是明顯。 隨著隨著互聯(lián)網(wǎng)信息技術(shù)的迅速發(fā)展和Web2.0 時代的到來,Docker技術(shù)一定會得到得到更加快速的發(fā)展與廣泛的應(yīng)用。