何木青
(廣東茂名幼兒師范專科學校, 廣東 茂名525000)
隨著互聯網信息技術的迅速發展和Web2.0 時代的到來,云計算也正以一種全新的商業計算模式在移動商務、搜索服務和開放協作等方面快速開展起來。 這使得廣大用戶可以非常便捷地開發、部署應用程序,并將這些應用程序托管于PaaS 管理的云基礎設施中,不僅縮短了開發周期,而且還較大程度地降低了運維成本。 PaaS 管理的云基礎設施離不開虛擬化的技術支撐,而Docker 正是與其相匹配的、虛擬化的容器型技術,它的出現使云計算的軟件開發進入了一個新的時代——Web2.0 時代。 由此可見,研究Docker 技術在計算機軟件開發中的應用具有極其重大的實踐意義[1]。
Docker 是以Go 語言為基礎的云開源項目。 是一個基于Linux Containers,LXC 虛擬化技術的高級容器引擎,在此基礎上,使Docker 容器的使用體驗更加優化。 可以為用戶提供高效、敏捷和輕量級的容器方案,支持在本地系統和多種主流云平臺(PaaS)上進行部署,為Docker 技術的應用開發提供“一站式”的解決方案[2]。
開發Docker 技術的目的,是為了將各種運行環境和應用程序打包成標準的image (鏡像 )/container (容器),使它們在各自不同的平臺上進行運行操作,應用分發、運行、部署、封裝等生命周期,實現應用組件的一次性封裝和隨處運行。
在Docker 技術中涉及很多概念,諸如:鏡像、容器、鏈接、倉庫以及數據卷等等,其中鏡像和容器是最重要的兩個。 鏡像中包含著Linux 操作系統,不僅安裝有Tom cat,而且還裝有用戶所需要的程序;容器則是通過鏡像來進行創建的,因此容器具有執行創建、停止、啟動、刪除等操作功能,容器與容器之間是相互隔離的,平臺的安全性是有保障的。
計算機軟件開發的傳統流程部署過程:(1)安裝Web 服務器和數據庫,搭建開發環境,進行網絡分配。 (2)開發人員進行測試、編碼、對版本進行管理。 (3)對硬件系統進行配置安裝并實現操作[3]。
傳統計算機軟件開發的主要缺點:(1)在開發過程中資源的利用率較低。 (2)不能對單物理機的應用進行有效隔離。 (3)不方便部署軟件開發運維。 (4)是對版本的管理和測試比較復雜。 (5)傳統虛擬機啟動較慢,管理復雜,占用空間比較大;(6)遷移成本高。
IT 系統主要包括4 個層次,即操作系統、運行平臺、應用程序、硬件。 其中:應用程序的代碼編輯、發布、構建及測試,由軟件開發人員負責;而硬件、操作系統以及運行平臺的安裝、配置和運行監控的升級、優化等則由運行維護人員負責。 在Docker 技術的支持下,該系統提供的運行環境實現了上下層操作系統與硬件系統關聯有效的隔離,從而使軟件開發的速度得到了極大的提升[4]。
Docker 技術與虛擬化技術進行比較,不同點有兩點:(1)Docker 技術的粒度小于傳統的虛擬化技術的粒度,重量更輕,而且在硬件的虛擬化、指令級模擬和即時編譯方面均可省去;傳統的虛擬技術的目標是建立一個能夠應用的虛擬機,而Docker 技術則是將所有相關源碼、環境配置、依賴庫等統一打包封裝,建立一個虛擬機。 (2)Docker 技術并未對Linux 操作系統進行完全的虛擬,還保留了程序運行所必有的核心操作系統,所以Docker 技術與傳統的虛擬技術相比,不僅具有啟動時間短、空間占用少的特點,而且還具備分發、復制方便等功能優勢[5]。Docker 技術與傳統虛擬技術的比較,見表1。

表1 Docker 容器與傳統虛擬機性能對比差異表Tab. 1 Docker container versus traditional virtual machine performancecomparisondifference table
Docker 虛擬化技術可以大幅度提升資源的利用率。 Docker 虛擬化技術可以對某一操作系統的管理資源進行統一劃分,使之分配到一個個孤立的組中,以達到有效的平衡,提高資源的利用率。
在Docker 技術的虛擬化構建方面,Docke 是在應用組件級虛擬化技術基礎上的,使Docker 容器具有封閉性和獨立性的特征。 封閉性主要表現為每個容器都有自己的存儲空間、網絡接口以及進程;獨立性主要表現為當某個容器在運行時,不會因為其運行而引向其它容器,每個容器都有自己的運行職責[6]。
Docker 技術的實際應用范圍廣。 主要體現在:(1)適用范圍除上述外,還適用于普通服務器。 (2)可以快速創建或刪除容器。 (3)可以擴展與部署Web 的應用、后端服務以及數據庫等。
Docker 是一個Client/Server,即C S(客戶/服務器)的架構,其客戶端實際上是遠程控制器,它是通過TCP/REST 向Docker Host 發出請求的,請求的內容主要包括:容器創建、容器刪除、容器運行和容器保存等。 其體系機構的框架結構是:由部署在Docker 的服務端Daemon,以客戶端的名義發出管理請求;通過driver 轉發到位于容器中的libcontainer;再由libcontainer 提供與各種不同的Linux 內核隔離接口,實現Docker 技術體系架構。 由于Docker 容器操作系統無需專用,因而它可以實現輕量級的要求。Docker 體系架構,見圖1。

圖1 Docker 體系構架圖Fig. 1 Docker Architecture Chart
計算機軟件開發是一項極為復雜的系統工程。開發人員在搭建開發環境時,會遇到各種各樣的問題,然而Docker 技術的應用,卻給解決這些問題帶來了極大的方便。 比如,Docker 的應用,可以使多個容器同時運行,且在使用功能方面,相較于傳統虛擬機而言更加強大,能夠較大程度地降低磁盤、CPU、內存的消耗,提升Docker 技術運用的適配性。
運用Docker 技術進行開發環境的搭建,不僅能夠使開發環境發揮出良好的擴展性能,而且還能有效地節約磁盤、內存。 搭建應用的具體步驟:(1)在完成Image (鏡像)搭建的基礎上,對Image 進行相應的擴展,實現不同的開發環境。 (2)完成并實現Image 啟動后,把容器(Containe)端口映射到主機之上,具體映射關系如圖2 所示。 (3)為了實現host主機代碼的快捷編輯,在Container 中對host 上的目錄進行映射處理,并通過重啟完成相關操作。 (4)在Container 中進行編輯處理,具體如圖3 所示。

圖2 端口映射關系Fig. 2 Port mapping relationship

圖3 端口映射關系Fig. 3 Port mapping relationship
在實際工作中,要搭建開發/測試環境往往比較困難,需要軟件開發人員完成眾多的軟件安裝和配置工作。 而應用Docker 技術構建開發/N 試環境,只需要制作一份符合要求Docker 鏡像,即可還原出多個完全一致的環境。
對Docker 技術的實際應用,主要體現在兩個方面:(1)簡化了應用部署。 主要是大數據的應用、數據庫的應用、后臺的應用以及Web 的應用。 例如可以將消息隊列、 Hadoop 集群等打包成一個Image 進行部署,在Docker 的作用下,通過配置參數,將Image 進行打包上傳。 (2)Docker 技術的應用,使Container 在創建方法上更加靈活。 Container 的創建既可以手動創建,也可以利用Docker 自動創建,但自動創建的前提是,源碼庫里面必須包含Docker File 文件,Containe 不僅要包含相應的應用,還應包含應用的所有依賴項。 此外,還可以使用Docker Pull 等相應命令,對Container 進行相應推送,使用Docker Run 命令執行運行、啟動、停止等相應操作。
本文在對Docker 技術內涵進行探討的基礎上,將Docker 技術與傳統的虛擬技術進行了比較,Docker 的優勢明顯。 在Docker 技術軟件的實際開發應用方面,其優勢更是明顯。 隨著隨著互聯網信息技術的迅速發展和Web2.0 時代的到來,Docker技術一定會得到得到更加快速的發展與廣泛的應用。