孫雅妮
(四川信息職業(yè)技術(shù)學院,四川 廣元 628040)
當前的Web應用多采用LAMP架構(gòu),LAMP架構(gòu)通常包括Linux操作系統(tǒng)、Apache、MariaDB和PHP。服務器處理一次Web頁面請求的過程是由Apache接收請求,通過CGI接口訪問PHP的應用程序,然后由PHP應用程序調(diào)用PHP解釋器執(zhí)行PHP代碼,接下來由PHP程序訪問調(diào)用數(shù)據(jù)庫,最后將結(jié)果反饋給Web頁面。
實現(xiàn)LAMP架構(gòu)的傳統(tǒng)做法是將服務器資源進行虛擬化,基于虛擬化資源池創(chuàng)建虛擬機,在虛擬機上部署Web和數(shù)據(jù)庫服務。傳統(tǒng)的虛擬機技術(shù)與Docker相比,前者明顯占用了較多的系統(tǒng)資源,而Docker在啟動速度、信息隔離和資源消耗方面的優(yōu)勢十分明顯[1-2]。本文提出一種基于容器實現(xiàn)LAMP,采用在Docker中基于LAMP架構(gòu)部署Web應用,提升Web應用的部署效率,降低物理資源消耗。
根據(jù)官方定義,Docker是以Docker容器為資源分割和調(diào)度的基本單位,封裝整個軟件運行環(huán)境,是為開發(fā)者和系統(tǒng)管理員設計的,是一個用于構(gòu)建、發(fā)布和運行分布式應用的平臺[3]。它是一個開源的容器引擎,可以方便地對容器進行管理,或者說Docker是一個開源的輕量級虛擬化容器管理引擎。它由Docker Inc.公司(前dotC1oud公司,PaaS市場中的老牌提供商)的團隊編寫、發(fā)行,并將其源代碼放在GitHub上。Docker基于Go語言開發(fā)并遵從Apache2.0協(xié)議[4]。
Docker提出的“Build,Ship and Run Any APP,Anywhere”就是Docker最具競爭力的優(yōu)勢。它通過將運行環(huán)境和應用程序打包到一起,解決部署應用對環(huán)境依賴的問題,真正做到快平臺的分發(fā)和使用[5]。Docker是容器化技術(shù)的一種實現(xiàn),它與傳統(tǒng)的虛擬機架構(gòu)有所不同。兩種架構(gòu)對比如圖1所示。

圖1 容器和傳統(tǒng)虛擬機架構(gòu)對比
從對比圖1可以看出,傳統(tǒng)虛擬機架構(gòu)中每一個VM都會運行一個完整的Guest OS,多個服務的部署需要多臺VM。容器省略了操作系統(tǒng),整個層級更簡化,可以在單個Host OS上運行多個應用,共用宿主機的操作系統(tǒng)和運行時庫[6]。Docker技術(shù)的應用優(yōu)勢主要在于簡化部署、虛擬高效化、微服務化以及易于遷移和擴展四個方面[7]。
本文要部署的Web應用是云計算虛擬仿真實訓平臺,該實訓平臺是基于LAMP(Linux+Apache+MariaDB+PHP)實現(xiàn)的,其中Linux采用CentOS 7以上系統(tǒng)。
基于Docker搭建云計算虛擬仿真實訓平臺需要首先在CentOS 7宿主機上安裝Docker Engine完成容器環(huán)境的部署,其次部署數(shù)據(jù)庫容器和Web容器,然后配置Web容器能夠訪問數(shù)據(jù)庫容器,最后部署和發(fā)布云計算虛擬仿真實訓平臺這個Web應用。基于Docker的Web應用架構(gòu)如圖2所示。

圖2 基于Docker的Web應用架構(gòu)圖
安裝一臺Host主機,本文中Host主機選用CentOS 7.4操作系統(tǒng);配置此主機的網(wǎng)絡,使得能夠連通互聯(lián)網(wǎng)。
3.2.1 Docker安裝
配置Docker的yum源,并且查看所有倉庫中所有Docker版本,選擇社區(qū)版安裝,執(zhí)行以下命令。

安裝并啟動Docker,完成后查看Docker版本,執(zhí)行以下命令。

3.2.2 配置Docker鏡像加速器
默認情況下,Docker從Docker Hub上下載鏡像,但國內(nèi)訪問Docker Hub的速度很不穩(wěn)定,有時甚至出現(xiàn)連接不上的情況。文中為Docker配置網(wǎng)易鏡像加速器,從而解決鏡像下載慢的問題。網(wǎng)易鏡像加速器的配置是創(chuàng)建或修改/etc/docker/daemon.json文件,文件內(nèi)容修改如下:

daemon.json文件修改完成后,需要重新啟動Docker。
(1)先從Docker Hub中拉取CentOS鏡像,再創(chuàng)建數(shù)據(jù)庫容器的數(shù)據(jù)卷mysqldata,并基于CentOS鏡像創(chuàng)建數(shù)據(jù)庫容器,執(zhí)行以下命令,結(jié)果如圖3所示。


圖3 創(chuàng)建數(shù)據(jù)庫容器
(2)由圖3可知,數(shù)據(jù)庫容器縮略編號為b56ac22b6c62,進入容器安裝、配置及初始化數(shù)據(jù)庫執(zhí)行以下命令。

(3)創(chuàng)建數(shù)據(jù)庫及數(shù)據(jù)庫用戶,數(shù)據(jù)庫名為yun,結(jié)果如圖4所示。

圖4 創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫用戶
(1)創(chuàng)建Web容器的數(shù)據(jù)卷webdatadata,并基于CentOS鏡像運行容器,執(zhí)行以下命令,結(jié)果如圖5所示。


圖5 創(chuàng)建Web容器
(2)從圖5可知,Web容器縮略編號為elec087e0fb,進入容器安裝并且開啟HTTP服務,測試Web服務是否正常運行執(zhí)行以下命令。

(1)將Web應用壓縮包yun.zip拷貝至數(shù)據(jù)卷webdata中并解壓,進入Web容器,安裝PHP執(zhí)行以下命令。


(2)在Web容器中配置連接數(shù)據(jù)庫文件conn.php,文件內(nèi)容如下。

(3)在數(shù)據(jù)庫容器中上傳并導入數(shù)據(jù)庫文件,執(zhí)行以下命令。

(4)在與Host主機網(wǎng)絡連通的任何一臺主機的瀏覽器中輸入Host的IP地址進行測試,論文中使用的IP地址為192.168.59.153。登錄http://192.168.59.153/yun/login.html,如圖6所示。
從圖6可以看出,Web應用發(fā)布成功。值得注意的是,因為創(chuàng)建Web容器時將容器的80端口映射到了Host主機的80端口,所以訪問Host主機就相當于訪問Web容器的Web應用。

圖6 Web應用發(fā)布測試
利用Docker來部署LAMP和利用傳統(tǒng)虛擬機來部署LAMP相比,容器啟動服務的速度更快,而且容器相對虛擬機更輕量級,單個Host主機可以運行多個容器,而傳統(tǒng)虛擬機一般一個虛擬機部署單個服務,無法擴展性能,并且容器的虛擬化性能接近于原生。