宋佳
1.云技術及Docker的優勢
云主機作為云計算的產物,憑借其服務低成本,高可靠,按需租用,易管理的優勢可全面地滿足中小型公司和企業對主機租用的需求。從一定程度上講,云主機就是一種在一組集群物理節點上通過虛擬化技術而實現的虛擬主機,它作為按需租用的解決方案,可以在集群中大規模統一調度。普通用戶完全可以像操作普通主機一樣去進行操作。
云主機相對于傳統物理主機,用戶不需要提供硬件設備,降低了后期維護的成本。用戶按需付費,并且可以進行自助操作,簡單方便。用戶不需要自行部署主機環境,需要做的只是按照需求申請特定類型的操作系統和環境,云主機的操作系統以及軟件環境都由云主機平臺進行維護和管理,在資源不足時,只需申請資源變更即可[1]。云主機更加安全可靠,云主機是基于集群技術實現的,節點間具有硬件冗余,可以增加可靠性。另外,云主機還有自動遷移的功能,如果集群中一臺節點需要升級或者資源緊缺,該節點上的云主機可以遷移至其他資源寬裕的節點上,保證業務能夠正常運行。隨著應用場景的越來越復雜化,云主機系統也隨之顯現以下幾個特點:
(1)環境多樣。用戶可以根據自身需求自助選擇不同類型的系統環境,比如ubuntud、debian或者centos來應對各種復雜場景。另外,用戶也可以使用云主機系統部署自動化集成和部署項目,提高項目開發、測試、運維的效率。
(2)資源可控。云主機系統可以實現對云主機的資源進行控制,比如限制CPU核數、內存大小、磁盤容量等。另外,存儲模式也可以進行控制,通過云主機的資源控制可以達到優化系統性能的目的。
(3)高效可伸縮。云主機是一種在一組集群物理節點上通過虛擬化技術而實現的虛擬主機,能夠盡可能地發揮集群的優勢,使得集群資源得到充分利用,系統顯得更加高效。
云計算提供的服務被劃分成了三個層次,目前,按照這個經典的三層模型,眾多計算機行業巨頭已經建立了一批“重型”云平臺,但是這種傳統的云平臺很難把握對其中的應用的管控。在這個時候,Docker的容器思想給所有人一個驚喜,Docker模糊了IaaS和PaaS間的明確的界限,為云計算的發展提供了新的方向[2]?;诠俜降亩x,Docker是世界領先的“軟件集裝箱”平臺。開發人員使用Docker與同事協作開發;運營商使用Docker在獨立容器中并行運行和管理應用程序,以獲得更好的計算密度;企業使用Docker構建敏捷軟件交付管道,以更快、更安全、更可靠地為Linux和Windows Server應用程序提供新功能。
2.云主機上Docker的搭建
目前大部分云主機的虛擬化采用傳統的虛擬化技術,Docker 容器技術逐漸模糊了IaaS和PaaS間分明的間隔,其輕量級虛擬化的特性一步步地把傳統的應用開發和運維機制變成了一種全新的方式。本人通過在linux服務器上通過docker實現多個系統環境的搭建與部署,進而提升用戶對于云服務器的使用率,實現資源的最大利用。同時通過Docker關于鏡像和容器的備份和恢復以及容器和鏡像的創建,以達到開發環境和測試環境完全一致的目的地。
1.Docker技術
Docker 是一個開源的應用容器引擎,是一個基于操作系統虛擬化的開源引擎,遵從Apache2.0協議。Docker使用經典的C/S架構。讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。Dokcer的守護程序主要負責運行和分發Docker容器。
2.Docker鏡像及容器
如圖1所示,Docker的鏡像和容器采用的是分層結構存儲,Docker的鏡像中并不存在完整的linux的內核,里面包含的是Docker容器所需的文件系統結構。簡言之,Docker 容器文件系統包括DockerFile、Docker鏡像、Docker容器;DockerFile是軟件的原材料,Docker鏡像是軟件的交付品,而Docker容器則可以認為是軟件的運行態。從應用軟件的角度來看,DockerFile、Docker鏡像與Docker容器分別代表軟件的三個不同階段,DockerFile面向開發,Docker鏡像成為交付標準,Docker容器則涉及部署與運維,三者缺一不可,合力充當Docker體系的基石。
1.系統需求分析
在一臺云虛擬主機上通過Docker虛擬多個系統應用環境,達到對虛擬機系統資源的最大利用。
2.服務器操作系統安裝要求
一臺云虛擬主機(系統版本Centos7.0)。
3.服務器軟件列表
所有的應用軟件都封裝在DOCKER中(見表1)。
4.服務器配置
服務器建議配置如下(見表2)。
5.通過Docker滿足生產測試一致
(1)首先,創建了新的網段,即docker-meta并分配了對應的ip地址,如下所示(見圖2)。
這樣一來,我們只講我們生產環境部分的容器放在該網段中,并且該網段的容器可以進行相互訪問。
(2)我們通過Docker將之前在實際情況下需要三臺服務器進行安裝的應用安裝到對應到對應系統的Docker容器中(見圖3)。
如圖3中所示,我們將生產環境中的應用程序分別封裝到了三個對應的容器,即7dfee9b4d44d、96878dae9eb9和dee8f23b43e3。對于三個應用所在的容器我們可理解為相當于三個在云服務器上虛擬出來的虛擬主機,類似于vmware上虛擬機,但是容器相對于vmware上的虛擬機來說是非常輕量級的。通過docker口令將容器需要訪問的端口映射在服務器對應的端口,類似”0.0.0.0:3333->3333/tcp”這樣的顯示就是將容器7dfee9b4d44d的3333端口映射到服務器的3333端口,當服務器以為的用戶需要訪問容器7dfee9b4d44d中3333端口對應的應用時,只需要訪問云服務器對應的地址下的3333端口就可以訪問此應用??梢酝ㄟ^在云服務器上配置相應的白名單來決定允許哪些ip下的用戶可以訪問該應用。
(3)在云服務器上可以通過Docker口令備份Docker容器,再恢復出一個容器。我們可以將云服務器中生產環境下使用的容器備份到對應的文件(見圖4)。
然后再在云服務器上設置不同于生產的網段和端口映射進行恢復。這樣用于生產和測試的環境完全相同。這樣開發和測試可以使用完全相同的環境進行測試,也節省了因為搭建服務器,或者系統版本不同導致測試結果而浪費的時間。
(4)在不同的服務器上進行容器恢復,將容器文件上傳到安裝有docker的服務器上,然后通過docker命令直接恢復文件備份前系統中運行的完全一致的容器。
本文通過對Docker官方文檔的學習,在云服務器上實現了Docker創建生產環境下容器,以及Docker容器的網絡配置;以及通過Docker實現容器的快速備份、遷移和還原操作,從而實現在生產和測試環境下應用程序和環境的一致性。后續將考慮使用Docker Swarm實現Docker集群配置。
[1]林 慰.傳統IDC與云主機結合的前景[J].數字通信世界,2015(8).
[2]浙江大學SEL實驗室.Docker容器與容器云[M].北京:人民郵電出版社,2015,28-80.