孫雅妮
(四川信息職業(yè)技術(shù)學(xué)院,四川 廣元 628040)
當(dāng)前的Web應(yīng)用多采用LAMP架構(gòu),LAMP架構(gòu)通常包括Linux操作系統(tǒng)、Apache、MariaDB和PHP。服務(wù)器處理一次Web頁面請求的過程是由Apache接收請求,通過CGI接口訪問PHP的應(yīng)用程序,然后由PHP應(yīng)用程序調(diào)用PHP解釋器執(zhí)行PHP代碼,接下來由PHP程序訪問調(diào)用數(shù)據(jù)庫,最后將結(jié)果反饋給Web頁面。
實(shí)現(xiàn)LAMP架構(gòu)的傳統(tǒng)做法是將服務(wù)器資源進(jìn)行虛擬化,基于虛擬化資源池創(chuàng)建虛擬機(jī),在虛擬機(jī)上部署Web和數(shù)據(jù)庫服務(wù)。傳統(tǒng)的虛擬機(jī)技術(shù)與Docker相比,前者明顯占用了較多的系統(tǒng)資源,而Docker在啟動速度、信息隔離和資源消耗方面的優(yōu)勢十分明顯[1-2]。本文提出一種基于容器實(shí)現(xiàn)LAMP,采用在Docker中基于LAMP架構(gòu)部署Web應(yīng)用,提升Web應(yīng)用的部署效率,降低物理資源消耗。
根據(jù)官方定義,Docker是以Docker容器為資源分割和調(diào)度的基本單位,封裝整個(gè)軟件運(yùn)行環(huán)境,是為開發(fā)者和系統(tǒng)管理員設(shè)計(jì)的,是一個(gè)用于構(gòu)建、發(fā)布和運(yùn)行分布式應(yīng)用的平臺[3]。它是一個(gè)開源的容器引擎,可以方便地對容器進(jìn)行管理,或者說Docker是一個(gè)開源的輕量級虛擬化容器管理引擎。它由Docker Inc.公司(前dotC1oud公司,PaaS市場中的老牌提供商)的團(tuán)隊(duì)編寫、發(fā)行,并將其源代碼放在GitHub上。Docker基于Go語言開發(fā)并遵從Apache2.0協(xié)議[4]。
Docker提出的“Build,Ship and Run Any APP,Anywhere”就是Docker最具競爭力的優(yōu)勢。它通過將運(yùn)行環(huán)境和應(yīng)用程序打包到一起,解決部署應(yīng)用對環(huán)境依賴的問題,真正做到快平臺的分發(fā)和使用[5]。Docker是容器化技術(shù)的一種實(shí)現(xiàn),它與傳統(tǒng)的虛擬機(jī)架構(gòu)有所不同。兩種架構(gòu)對比如圖1所示。
圖1 容器和傳統(tǒng)虛擬機(jī)架構(gòu)對比
從對比圖1可以看出,傳統(tǒng)虛擬機(jī)架構(gòu)中每一個(gè)VM都會運(yùn)行一個(gè)完整的Guest OS,多個(gè)服務(wù)的部署需要多臺VM。容器省略了操作系統(tǒng),整個(gè)層級更簡化,可以在單個(gè)Host OS上運(yùn)行多個(gè)應(yīng)用,共用宿主機(jī)的操作系統(tǒng)和運(yùn)行時(shí)庫[6]。Docker技術(shù)的應(yīng)用優(yōu)勢主要在于簡化部署、虛擬高效化、微服務(wù)化以及易于遷移和擴(kuò)展四個(gè)方面[7]。
本文要部署的Web應(yīng)用是云計(jì)算虛擬仿真實(shí)訓(xùn)平臺,該實(shí)訓(xùn)平臺是基于LAMP(Linux+Apache+MariaDB+PHP)實(shí)現(xiàn)的,其中Linux采用CentOS 7以上系統(tǒng)。
基于Docker搭建云計(jì)算虛擬仿真實(shí)訓(xùn)平臺需要首先在CentOS 7宿主機(jī)上安裝Docker Engine完成容器環(huán)境的部署,其次部署數(shù)據(jù)庫容器和Web容器,然后配置Web容器能夠訪問數(shù)據(jù)庫容器,最后部署和發(fā)布云計(jì)算虛擬仿真實(shí)訓(xùn)平臺這個(gè)Web應(yīng)用。基于Docker的Web應(yīng)用架構(gòu)如圖2所示。
圖2 基于Docker的Web應(yīng)用架構(gòu)圖
安裝一臺Host主機(jī),本文中Host主機(jī)選用CentOS 7.4操作系統(tǒng);配置此主機(jī)的網(wǎng)絡(luò),使得能夠連通互聯(lián)網(wǎng)。
3.2.1 Docker安裝
配置Docker的yum源,并且查看所有倉庫中所有Docker版本,選擇社區(qū)版安裝,執(zhí)行以下命令。
安裝并啟動Docker,完成后查看Docker版本,執(zhí)行以下命令。
3.2.2 配置Docker鏡像加速器
默認(rèn)情況下,Docker從Docker Hub上下載鏡像,但國內(nèi)訪問Docker Hub的速度很不穩(wěn)定,有時(shí)甚至出現(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,進(jìn)入容器安裝、配置及初始化數(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鏡像運(yùn)行容器,執(zhí)行以下命令,結(jié)果如圖5所示。
圖5 創(chuàng)建Web容器
(2)從圖5可知,Web容器縮略編號為elec087e0fb,進(jìn)入容器安裝并且開啟HTTP服務(wù),測試Web服務(wù)是否正常運(yùn)行執(zhí)行以下命令。
(1)將Web應(yīng)用壓縮包yun.zip拷貝至數(shù)據(jù)卷webdata中并解壓,進(jìn)入Web容器,安裝PHP執(zhí)行以下命令。
(2)在Web容器中配置連接數(shù)據(jù)庫文件conn.php,文件內(nèi)容如下。
(3)在數(shù)據(jù)庫容器中上傳并導(dǎo)入數(shù)據(jù)庫文件,執(zhí)行以下命令。
(4)在與Host主機(jī)網(wǎng)絡(luò)連通的任何一臺主機(jī)的瀏覽器中輸入Host的IP地址進(jìn)行測試,論文中使用的IP地址為192.168.59.153。登錄http://192.168.59.153/yun/login.html,如圖6所示。
從圖6可以看出,Web應(yīng)用發(fā)布成功。值得注意的是,因?yàn)閯?chuàng)建Web容器時(shí)將容器的80端口映射到了Host主機(jī)的80端口,所以訪問Host主機(jī)就相當(dāng)于訪問Web容器的Web應(yīng)用。
圖6 Web應(yīng)用發(fā)布測試
利用Docker來部署LAMP和利用傳統(tǒng)虛擬機(jī)來部署LAMP相比,容器啟動服務(wù)的速度更快,而且容器相對虛擬機(jī)更輕量級,單個(gè)Host主機(jī)可以運(yùn)行多個(gè)容器,而傳統(tǒng)虛擬機(jī)一般一個(gè)虛擬機(jī)部署單個(gè)服務(wù),無法擴(kuò)展性能,并且容器的虛擬化性能接近于原生。