段嘉騰
摘 要:在互聯網發展的過程中,云計算得到了飛速的發展,并在開放協作、移動商務、搜索服務中得到了應用。Docker是一種輕量級的虛擬化方式,在軟件開發中應用Docker技術能夠使PaaS平臺的部署和運行更加高效。本文對Docker技術進行了簡要的介紹,并探討了Docker技術在軟件開發過程中的具體應用,供相關人員參考借鑒。
關鍵詞:Docker技術;軟件開發;應用
中圖分類號: F224-39 文獻標識碼: A 文章編號: 1673-1069(2016)26-152-2
0 引言
通過云計算,用戶能夠對應用程序進行高效的部署和開發,然后使用基于PaaS的云基礎設施來托管應用程序,這樣可以使運行和維護成本得到降低,開發周期還能夠得到進一步的縮短。作為一種輕量級的PaaS,虛擬化是Docker技術的核心技術。
1 Docker技術
當前具有兩種虛擬化類型,也就是以軟件為基礎的虛擬化和以硬件為基礎的虛擬化。以軟件為基礎的虛擬化又可以分為兩個類別:平臺虛擬化和應用虛擬化,應用虛擬化包括操作系統及虛擬化、超虛擬化、部分虛擬化、硬件輔助虛擬化、完全虛擬化。本文探討的虛擬機技術是平臺虛擬化的一種,而Docker技術是一種操作系統的虛擬化。
1.1 Docker技術的含義
2013年Docker正式發布,屬于一種PaaS項目。Docker屬于高級容器引擎,以go語言為基礎,由PaaS提供商提供,須遵從Apache2.0協議,當前已經形成了Docker生態圈。當前對Docker進行集成支持的有阿里巴巴、百度、IBM、google、Redhat等。Docker技術希望能夠對應用組件進行生命周期管理,包括運行、部署、分發、封裝等,從而實現一次封裝、隨處運行,常見的應用組件主要有編譯器、操作系統、數據庫服務、Web應用等。
1.2 Docker技術的關鍵要素
Docker技術包括以下幾個關鍵要素:Registry(倉庫)、Container(容器)、Image(鏡像),其中最重要的要素是鏡像。鏡像中具有文件系統,要構建容器就必須以鏡像為基礎。鏡像是一種只讀模板,能夠將一個完整的操作系統和其應用軟件包含其中。用戶能夠對他人創建的鏡像進行下載,也可以以自己的需求為依據自行創作鏡像。鏡像中的創建實例就是容器,也就是處于啟動或執行階段的是容器,構建或打包階段的是鏡像。用戶創建的鏡像可以放在倉庫中進行保存。
當前主要有兩種鏡像來源:
第一種是Docker自有鏡像,也就是公用鏡像;
第二種是用戶定制鏡像,也就是私有鏡像。
1.3 Docker虛擬化技術的技術優勢
當前的Docker虛擬化技術主要有以下幾個技術優勢:
①迭代策略更加快捷、簡單,運用Dockersfile能夠更加快捷地在生產環境中反饋開發環境中的配置更新,使自動化管理更加高效。
②使物理資源的利用率得到提高。Docker容器只需占據非常小的存儲空間,而且只需刪除容器就可以將其他的相關文件一并刪除,從而使物理資源的利用率得到了有效的提高。
③使部署周期和環境交付周期縮短,開發人員可以運用Docker技術來進行鏡像部署,進行軟件開發。在完成開發之后可以直接向運維和測試人員進行平滑移交。而且可以非常便利地對容器進行維護,從而使部署、測試和開發的時間得到縮短,實現快速迭代的目的。
④提高工作效率,對服務器遷移造成的環境再部署進行簡化,并且使部署風險系數得到控制。
1.4 Docker的體系架構
遠程控制器是Docker的客戶端,DockerHost會收到通過TCP/REST傳送來的請求,常見的請求包括刪除容器、保存容器、運行容器、創建容器等。Daemon處于Docker的服務端,可以根據客戶端的請求對其進行管理。然后運用driver把請求轉發到位于容器中的libcontainer執行環境。與各種Linux內核隔離的接口主要由libcontainer提供,與控制組和類似。在這種架構中,多個容器能夠對一個Linux內核進行共享,而這些容器的運行又相互隔離。要實現Docker的輕量級要求,就不能在Docker容器中配置專用操作系統。Docker技術的體系架構具體見圖1。
2 在軟件開發中應用Docker技術
在很多情況下,在對開發環境進行搭建是程序員總是會遇到各種問題,例如軟件安裝不便、具有較差的可移植性和隔離性等,這就需要在本地搭建虛擬機來解決這一系列的問題。然而搭建虛擬機非常麻煩,并非最佳的解決方案。此時程序員可以選擇Docker作為一種輕量級的方案,Docker不僅具有所有的虛擬機功能,還具有一些虛擬機不具備的功能,例如可以使用Docker使多容器同時運行,而且與傳統的虛擬機相比,Docker對CPU、磁盤、內存的消耗較低。
2.1 在開發環境搭建中應用Docker
程序員在搭建開發環境時可以應用Docker技術,為了使開發環境具有良好的擴展性,同時對磁盤空間進行節約,先要將基礎的Image搭建起來,然后在此基礎上對這個基礎的Image進行擴展,實現不同的開發環境。
為了能夠在,host的主機中便利地進行代碼編輯,程序員有時候還需要在Container中映射host 主機(宿主)上的目錄。此時,程序員無需將這些目錄手動復制到Container上,并Container進行重啟。而是可以直接在Container中對其進行運行和編輯。
2.2 Docker技術的應用架構
在軟件開發的過程中總是需要考慮到很多問題,為了保障產品能夠成功發布,開發者總是要對各種App、中間件和OS進行考慮,這個過程具有一定的管理難度,這也是軟件行業中普遍存在的一個問題。在很多應用實例中都可以使用Docker來進行簡化部署,例如大數據應用、數據庫應用、后臺應用、Web 應用等。可以應用Docker技術將消息列隊Hadoop 集群打包起來,使其成為一個簡單的Image 部署。
總體而言運用Docker技術來對一個應用進行部署并不復雜,可以在相同的image上配備不同的運行時數據和軟件,具體情況見圖2。
在應用的過程中,Docker技術會自動搭配各種網絡、存儲,對應用進行下載和安裝,然后再對參數進行配置,將其打包后向Image上傳。程序員可以根據需求選擇自動創建或手動創建的方式來創建Container。如果DockerFile 文件已經存在于源碼庫中,通過自動創建的容器中就已經具有了應用以及所有的應用依賴項。程序員可以在私有Docker或者公有Docker中運用DockerSearch 命令對Containers進行搜索,同時程序員還可以選擇在注冊表里使用DockerPull 命令對Containers進行推送。停止、運行、啟動等操作都可以通過DockerRun 命令來實現。
3 結語
Docker技術以及特有的技術優勢迅速的發展和廣泛的應用,近年來大量的開源項目和創業公司都與Docker技術有著密切的聯系,Amazon、Microsoft、紅帽、Rackspace、google、IBM也也對容器技術上加磅予以了支持,而且Docker技術已經得到了虛擬化巨頭 Vmware的認可與支持。當前默認使用的Docker主要是AUFS、LXC,但并不對這二者進行強制綁定。