張 濤 劉彩云 汪 翔
(1.銅陵職業(yè)技術(shù)學(xué)院信息工程系,安徽 銅陵 244061;2.銅陵學(xué)院數(shù)學(xué)與計(jì)算機(jī)學(xué)院,安徽 銅陵 244061)
隨著云計(jì)算、大數(shù)據(jù)等新一代IT技術(shù)的興起,傳統(tǒng)的教育教學(xué)方式也在不斷地向智慧教學(xué)方式轉(zhuǎn)變。基于新興IT技術(shù)的智慧教學(xué)平臺(tái)建設(shè),可進(jìn)一步提升教育教學(xué)質(zhì)量和實(shí)踐教學(xué)能力,構(gòu)建高效、靈活的智慧課堂,彌補(bǔ)傳統(tǒng)教育教學(xué)尤其是實(shí)驗(yàn)實(shí)訓(xùn)教學(xué)方面存在的不足。在現(xiàn)代計(jì)算機(jī)教育教學(xué)中,教師在教學(xué)過程中可能要在不同的軟件版本、不同的軟件整合方案中進(jìn)行演示教學(xué),稍不注意可能就會(huì)導(dǎo)致錯(cuò)誤;在實(shí)驗(yàn)軟件安裝時(shí),不同軟件、不同的軟件版本可能也會(huì)存在沖突;新的軟件可能在老舊電腦上無法流暢運(yùn)行;完成實(shí)訓(xùn)項(xiàng)目可能需要多個(gè)組件相互協(xié)作,學(xué)生在實(shí)驗(yàn)環(huán)境安裝和配置中花費(fèi)較多時(shí)間,效率不高;學(xué)生在實(shí)驗(yàn)實(shí)訓(xùn)室之外不能繼續(xù)完成實(shí)驗(yàn),不能隨時(shí)隨地學(xué)習(xí)。本文就相關(guān)問題進(jìn)行研究探討,基于Docker技術(shù)進(jìn)行智慧教學(xué)平臺(tái)構(gòu)建,進(jìn)而通過基于該平臺(tái)的高可用Web系統(tǒng)自動(dòng)化部署實(shí)踐,探索解決問題的可行性。
面對(duì)上述當(dāng)前計(jì)算機(jī)教育教學(xué)中存在的問題,可以通過輕量級(jí)的Docker技術(shù)進(jìn)行智慧教學(xué)PaaS(Platform as a Service)平臺(tái)構(gòu)建,提供優(yōu)于傳統(tǒng)虛擬機(jī)的Docker容器沙箱環(huán)境。[1]契合OpeanStack云計(jì)算環(huán)境,教師、學(xué)生可在獨(dú)立的Docker容器環(huán)境中運(yùn)行和部署相關(guān)軟件,不同的容器環(huán)境相互隔離、易于構(gòu)建,能較好地解決軟件安裝配置繁瑣、軟件沖突、軟件版本不一致、機(jī)器性能差導(dǎo)致的軟件運(yùn)行不流暢等問題,[2]使得運(yùn)行環(huán)境多樣化,提升計(jì)算機(jī)資源的利用效率,減少物理軟件平臺(tái)消耗,提高教育教學(xué)尤其是實(shí)驗(yàn)實(shí)訓(xùn)教學(xué)的效率。學(xué)生在課余時(shí)間也可以通過提供的云平臺(tái)接口方便地通過Docker鏡像在自己的計(jì)算機(jī)上構(gòu)建實(shí)訓(xùn)環(huán)境,實(shí)現(xiàn)隨時(shí)隨地可學(xué)。
Docker是云計(jì)算PaaS平臺(tái)提供商dotCloud開源的一個(gè)基于 LXC 的高級(jí)容器引擎,當(dāng)前主流的開源應(yīng)用容器引擎,基于容器技術(shù)實(shí)現(xiàn)高效的應(yīng)用運(yùn)行平臺(tái)。[3]在智慧教學(xué)平臺(tái)構(gòu)建中,主要是基于Docker創(chuàng)建軟件部署和運(yùn)行環(huán)境的?;贒ocker可以把應(yīng)用及其依賴封裝到一個(gè)輕量級(jí)、可移植的容器中,打包封裝后可以在任何Docker平臺(tái)上都獨(dú)立、穩(wěn)定運(yùn)行。Docker打包封裝后的鏡像保存著容器運(yùn)行所需的運(yùn)行環(huán)境及其配置信息,鏡像來自于存儲(chǔ)鏡像的倉庫,并且采用分層存儲(chǔ)架構(gòu),提高其復(fù)用性。
相對(duì)于傳統(tǒng)的VM(Virtual Machine),Docker具有以下優(yōu)點(diǎn):更快的啟動(dòng)速度,容器可以秒級(jí)啟動(dòng),而VM通常要更久;更小的性能開銷,Docker不需要傳統(tǒng)VM所需的額外的CPU和內(nèi)存完成操作系統(tǒng)功能;更高的資源利用率,一臺(tái)普通電腦可運(yùn)行上千個(gè)容器,而VM則做不到。[4]基于這些特性,可依托Docker容器PaaS平臺(tái)構(gòu)建輕量、快速、高效、易用的智慧教學(xué)平臺(tái)。Docker容器直接復(fù)用主機(jī)操作系統(tǒng)資源,在Docker Engine層面實(shí)現(xiàn)高效的調(diào)度和隔離。Docker 容器基于LXC,通過Namespaces進(jìn)行權(quán)限的控制和隔離,通過Cgroups進(jìn)行資源的配置。
Docker服務(wù)的組成主要包括:
(1)Docker daemon服務(wù)器:后臺(tái)運(yùn)行,用于管理Docker對(duì)象。
(2)Docker Client客 戶 端:命 令 行(CLI)交互客戶端,可使用REST API接口訪問Docker daemon。智慧教學(xué)平臺(tái)可使用Docker提供的客戶端命令行實(shí)現(xiàn)Docker容器、鏡像等對(duì)象的管理。
(3)Docker Image鏡像:一個(gè)只讀模板,用于創(chuàng)建Docker容器,由Dockerfile文本描述鏡像的內(nèi)容。智慧教學(xué)平臺(tái)就是基于Dockerfile來構(gòu)建不同的應(yīng)用鏡像達(dá)到運(yùn)行環(huán)境多樣化的,可基于不同的鏡像快速構(gòu)建出自己需要的應(yīng)用環(huán)境。
(4)Docker容器:一個(gè)鏡像的運(yùn)行實(shí)例。可通過docker pull命令從鏡像倉庫中拉去鏡像到本地,通過docker run命令可運(yùn)行執(zhí)行的鏡像。在智慧教學(xué)平臺(tái)中即為運(yùn)行不同應(yīng)用環(huán)境的容器。
(5)Docker Registry倉庫:即Docker鏡像庫,其本身也是一個(gè)容器。Docker Hub是Docker公司提供的互聯(lián)網(wǎng)公共鏡像倉庫。可以構(gòu)建自己本地的鏡像倉庫。在智慧教學(xué)平臺(tái)中,搭建自己的鏡像倉庫,存放不同的應(yīng)用鏡像??梢酝ㄟ^ <倉庫名>:<標(biāo)簽>的格式來指定具體是哪個(gè)版本的鏡像。
(6)Docker Container容器:獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用(即創(chuàng)建的獨(dú)立的工作環(huán)境)。在智慧教學(xué)平臺(tái)中可構(gòu)建不同類型的應(yīng)用容器,為實(shí)訓(xùn)教學(xué)提供平臺(tái)支持。
云計(jì)算提供一種基于互聯(lián)網(wǎng)的交付服務(wù)模式,通常是提供動(dòng)態(tài)可擴(kuò)展虛擬化的資源對(duì)象,以IaaS、PaaS、SaaS等服務(wù)形式提供大規(guī)模的計(jì)算服務(wù)和應(yīng)用。OpenStack是一個(gè)開源的云計(jì)算管理平臺(tái)項(xiàng)目,為私有云和公有云提供可擴(kuò)展的彈性的云計(jì)算服務(wù)。OpenStack提供了基礎(chǔ)設(shè)施即服務(wù)(IaaS)的解決方案,每個(gè)服務(wù)提供API以進(jìn)行集成,是目前廣泛收到支持的開源云平臺(tái)。為構(gòu)建易于彈性擴(kuò)展、具有一定運(yùn)算能力的智慧教學(xué)平臺(tái),可通過OpenStack云平臺(tái)構(gòu)建Docker運(yùn)行環(huán)境,提升計(jì)算機(jī)資源的利用效率。OpenStack和Docker分別偏向云計(jì)算架構(gòu)中的IaaS(資源層)和PaaS(應(yīng)用層),[5]兩者有深度結(jié)合的基礎(chǔ)。
OpenStack主要提供計(jì)算、網(wǎng)絡(luò)、存儲(chǔ)三大資源服務(wù)能力。Swift對(duì)象存儲(chǔ)是OpenStack提供的高可用分布式對(duì)象存儲(chǔ)服務(wù),通過在軟件層面引入一致性散列技術(shù)和數(shù)據(jù)冗余,來達(dá)到高可用和可伸縮性。Docker Registry倉庫默認(rèn)是使用本地文件系統(tǒng)存儲(chǔ)鏡像文件,默認(rèn)存儲(chǔ)在/var/lib/registry目錄下。此種存儲(chǔ)方式當(dāng)前不支持自動(dòng)復(fù)制和同步鏡像功能,鏡像存儲(chǔ)的可靠性尚無法保證。由于Docker Registry支持多種分布式存儲(chǔ)后端,可把OpenStack的Swift對(duì)象存儲(chǔ)作為底層的存儲(chǔ)系統(tǒng),進(jìn)而保證鏡像數(shù)據(jù)的可靠性存儲(chǔ)。
基于Docker的智慧教學(xué)平臺(tái)研究以O(shè)penStack云平臺(tái)作為底層的計(jì)算支撐,方便智慧教學(xué)平臺(tái)的存儲(chǔ)和擴(kuò)充,提供一個(gè)可持續(xù)集成的云計(jì)算環(huán)境。通過在云平臺(tái)提供的計(jì)算環(huán)境中部署Docker環(huán)境,構(gòu)建和運(yùn)行自建的實(shí)訓(xùn)環(huán)境的Docker鏡像封裝,學(xué)生可以方便地訪問Docker實(shí)訓(xùn)環(huán)境,可進(jìn)行快捷、高效、可重復(fù)的實(shí)訓(xùn)教學(xué)。作為示例,基于Docker技術(shù)的高可用Web系統(tǒng)自動(dòng)化部署智慧教學(xué)平臺(tái)系統(tǒng)的架構(gòu)設(shè)計(jì)如圖1所示,在云平臺(tái)中構(gòu)建Docker運(yùn)行環(huán)境,基于Docker技術(shù)構(gòu)建滿足不同實(shí)訓(xùn)需求的Docker鏡像(如:SQL Server、Linux、Web、MySQL等),實(shí)訓(xùn)時(shí)直接拉取鏡像、啟動(dòng)容器即可進(jìn)行實(shí)訓(xùn),可滿足不同版本、不同實(shí)訓(xùn)環(huán)境以及錯(cuò)誤及時(shí)恢復(fù)、多次重復(fù)實(shí)訓(xùn)的要求。
圖1 智慧教學(xué)平臺(tái)系統(tǒng)架構(gòu)設(shè)計(jì)
基于上述的平臺(tái)架構(gòu)設(shè)想,契合動(dòng)態(tài)網(wǎng)頁設(shè)計(jì)的課程教學(xué)(需要安裝SQL Server、Tomcat、JDK等實(shí)訓(xùn)環(huán)境)需求進(jìn)行平臺(tái)的設(shè)計(jì)、研究和實(shí)踐。
當(dāng)前,隨著社會(huì)信息化進(jìn)程的進(jìn)一步深化,企業(yè)、單位和個(gè)人都將所屬資源通過web進(jìn)行展現(xiàn),提升自身的社會(huì)影響力。對(duì)應(yīng)中小型企業(yè),企業(yè)形象的展示可基于快速開發(fā)模型實(shí)現(xiàn),節(jié)約成本、靈活高效。在計(jì)算機(jī)類專業(yè)的實(shí)踐教學(xué)中,動(dòng)態(tài)網(wǎng)頁設(shè)計(jì)通常是計(jì)算機(jī)專業(yè)的基礎(chǔ)課,能緊密契合信息化社會(huì)的職業(yè)崗位需求。智慧教學(xué)平臺(tái)的設(shè)計(jì)實(shí)踐結(jié)合高校、學(xué)生、企業(yè)經(jīng)常關(guān)注的項(xiàng)目需求,開發(fā)了一個(gè)展示企業(yè)、單位和個(gè)人信息的開發(fā)平臺(tái)模板,能快速地實(shí)現(xiàn)web應(yīng)用開發(fā)。易淘電子商城項(xiàng)目能夠?qū)崿F(xiàn)產(chǎn)品信息的展示和商品的分類瀏覽。智慧圖書信息系統(tǒng)項(xiàng)目實(shí)現(xiàn)了圖書信息的展示和交流功能。通過智慧教學(xué)平臺(tái)進(jìn)行實(shí)訓(xùn)教學(xué)環(huán)境和運(yùn)行環(huán)境部署。
智慧圖書管理系統(tǒng)提供圖書的展示、閱讀、分類等功能,具體功能模塊如圖2所示。
圖2 智慧圖書管理系統(tǒng)
易淘電子商城實(shí)現(xiàn)商品信息的管理、展覽、分類等功能,具體功能模塊如圖3所示。
圖3 易淘電子商城系統(tǒng)
契合搭建好的OpenStack云平臺(tái),結(jié)合圖1的系統(tǒng)架構(gòu)以及Docker平臺(tái)和應(yīng)用部署的需要,設(shè)計(jì)和實(shí)現(xiàn)基于Docker的智慧教學(xué)平臺(tái),通過鏡像部署相關(guān)的SQL Server、Tomcat、Nginx、JDK等容器環(huán)境,方便實(shí)訓(xùn)和開發(fā),實(shí)現(xiàn)高可用Web系統(tǒng)自動(dòng)化部署平臺(tái),簡(jiǎn)化配置、代碼流水線管理、提高開發(fā)和實(shí)訓(xùn)效率,同時(shí),為基于Docker環(huán)境的應(yīng)用系統(tǒng)自動(dòng)伸縮和應(yīng)用集群構(gòu)建提供一種靈活部署模式。實(shí)訓(xùn)平臺(tái)主要技術(shù)需求如下:
(1) 基于Docker平臺(tái)實(shí)現(xiàn)應(yīng)用程序的鏡像的自動(dòng)化制作。
(2)基于Docker平臺(tái)實(shí)現(xiàn)鏡像的運(yùn)行和數(shù)據(jù)交互功能。
(3) 基于Docker平臺(tái)實(shí)現(xiàn)運(yùn)行的web容器的高可用和集群負(fù)載均衡功能。
(4)基于企業(yè)級(jí)框架開發(fā)web應(yīng)用,實(shí)現(xiàn)易淘電子商城、智慧圖書信息系統(tǒng)項(xiàng)目的開發(fā)。
(5)基于Docker平臺(tái)實(shí)現(xiàn)web應(yīng)用的鏡像制作、運(yùn)行、高可用和集群負(fù)載均衡等功能。
Docker平臺(tái)基于常規(guī)的構(gòu)建方法進(jìn)行設(shè)計(jì)和構(gòu)建,提供平臺(tái)支撐運(yùn)行環(huán)境,具體設(shè)計(jì)架構(gòu)如下圖4所示。
圖4 技術(shù)設(shè)計(jì)架構(gòu)
實(shí)訓(xùn)完成,部署成功后,Web應(yīng)用使用數(shù)據(jù)庫容器提供數(shù)據(jù)支撐,用戶訪問web應(yīng)用時(shí),用戶的訪問可均衡地分布到web集群容器中,實(shí)現(xiàn)負(fù)載均衡,同時(shí),如果某個(gè)web運(yùn)行容器出現(xiàn)故障了,其他web容器也能保證訪問正常進(jìn)行,實(shí)現(xiàn)訪問的高可用。Web容器的構(gòu)建基于自動(dòng)化構(gòu)建的web鏡像實(shí)現(xiàn)。應(yīng)用系統(tǒng)開發(fā)完成后,制作Docker鏡像,基于容器運(yùn)行具體應(yīng)用,可構(gòu)筑云平臺(tái)web站點(diǎn)集群。相比于傳統(tǒng)的實(shí)訓(xùn)教學(xué)方式,基于Docker的智慧教學(xué)平臺(tái)更節(jié)約資源、方便、快捷、高效,功能整合更容易、規(guī)范,實(shí)訓(xùn)課實(shí)現(xiàn)便捷的可重復(fù)性。
智慧教學(xué)平臺(tái)基于Docker開源的容器引擎,搭建雙節(jié)點(diǎn)的Docker平臺(tái),基于Dockerfile實(shí)現(xiàn)應(yīng)用系統(tǒng)鏡像的自動(dòng)部署和制作,基于Nginx引擎鏡像實(shí)現(xiàn)應(yīng)用系統(tǒng)負(fù)載均衡和高可用運(yùn)行,實(shí)現(xiàn)更快地打包、測(cè)試以及部署應(yīng)用程序。應(yīng)用系統(tǒng)的開發(fā)基于Java平臺(tái)的Struts、Spring、Hibernate開源框架實(shí)現(xiàn)了電子商城應(yīng)用、智慧圖書站等應(yīng)用的開發(fā),在Docker平臺(tái)上進(jìn)行了良好的部署和運(yùn)行,為企業(yè)基于Docker的應(yīng)用提供了有意義的實(shí)踐。智慧教學(xué)平臺(tái)具體設(shè)計(jì)部署見圖1所示。
智慧教學(xué)平臺(tái)網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)如表1所示。
表1 智慧教學(xué)平臺(tái)網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)
Docker鏡像自動(dòng)化部署Dockerfile基本命令如下:
基于Nginx引擎鏡像實(shí)現(xiàn)應(yīng)用系統(tǒng)負(fù)載均衡和高可用運(yùn)行的關(guān)鍵技術(shù)配置如下:
平臺(tái)的部署步驟如下:
(1)搭建OpenStack云平臺(tái)并按規(guī)劃啟動(dòng)虛擬主機(jī)(測(cè)試基于CentOS 7操作系統(tǒng))。
(2)基于yum源安裝Docker平臺(tái):
(3)基于docker load、tag、push命令上傳倉庫部署使用的鏡像。
(4)拉取SQL Server鏡 像: docker pull mcr.microsoft.com/mssql/server:2017-latest。運(yùn)行SQL Server鏡像(為了便于數(shù)據(jù)的持久化,這里使用了共享卷):
(5)上傳web應(yīng)用所使用的數(shù)據(jù)庫到Docker宿主主機(jī),進(jìn)入數(shù)據(jù)庫容器,附加數(shù)據(jù)庫:
(6)上傳web應(yīng)用構(gòu)建所使用的源文件,參考3.1設(shè)計(jì)說明,編寫Dockerfile文件,構(gòu)建web應(yīng)用:
(7)啟動(dòng)web應(yīng)用鏡像(這里可以根據(jù)多起幾個(gè)web應(yīng)用鏡像):
(8)拉取nginx鏡像,創(chuàng)建nginx容器(注意端口是否被占用):
根據(jù)3.1設(shè)計(jì)里的說明,進(jìn)入nginx容器配置nginx.conf文件,啟動(dòng)nginx引擎,實(shí)現(xiàn)高可用Web系統(tǒng)自動(dòng)化部署實(shí)訓(xùn)。
容器鏡像啟用后,可以通過瀏覽器訪問web站點(diǎn),用戶操作web頁面即可進(jìn)行相關(guān)的操作。這種靈活、輕量、資源隔離的應(yīng)用部署方式,在更快地打包、測(cè)試以及部署應(yīng)用程序方面具有較好的應(yīng)用價(jià)值,摒棄了傳統(tǒng)物理機(jī)實(shí)訓(xùn)環(huán)境帶來的弊端。
智慧教學(xué)平臺(tái)基于實(shí)際的教學(xué)實(shí)訓(xùn)項(xiàng)目進(jìn)行研究和測(cè)試,基于Docker平臺(tái)進(jìn)行高可用Web系統(tǒng)自動(dòng)化部署平臺(tái)實(shí)踐,實(shí)踐測(cè)試項(xiàng)包括:
(1)Web項(xiàng)目的自動(dòng)化構(gòu)建:Dockerfile編寫是否正確,在綁定端口是要注意是否已經(jīng)被占用。
(2)SQL Server鏡像的運(yùn)行:?jiǎn)?dòng)時(shí)密碼的設(shè)置是否符合規(guī)則,進(jìn)入容器運(yùn)行SQL Server客戶端命令,能否正確附加數(shù)據(jù)庫(要注意數(shù)據(jù)庫的版本問題)。
(3)Web項(xiàng)目鏡像的運(yùn)行:web應(yīng)用能否正常啟動(dòng),要特別注意數(shù)據(jù)庫的配置信息,如不能正常啟動(dòng),可以進(jìn)行tomcat服務(wù)器的log目錄,查看具體的出錯(cuò)信息,進(jìn)行修改。測(cè)試時(shí)出現(xiàn)問題最多的就是數(shù)據(jù)庫信息不正確,導(dǎo)致應(yīng)用程序啟動(dòng)時(shí)初始化失敗。
(4)Docker負(fù)載均衡測(cè)試:Nginx的配置文件是否正確,特別是服務(wù)端口號(hào)的問題,至少啟動(dòng)兩個(gè)web應(yīng)用實(shí)例,通過curl命令多次訪問服務(wù)器,查看其輸出結(jié)果。
(5)Docker平臺(tái)高可用測(cè)試:停止1個(gè)web應(yīng)用容器,查看網(wǎng)站是否還能訪問成功,經(jīng)測(cè)試,可以正常訪問。
測(cè)試中,與虛擬機(jī)運(yùn)行web應(yīng)用進(jìn)行性能比較,Docker平臺(tái)在應(yīng)用啟動(dòng)上有很好的表現(xiàn),具有很好的靈活性,為智慧教學(xué)實(shí)訓(xùn)項(xiàng)目提供了技術(shù)支撐。
在傳統(tǒng)的基于物理機(jī)的學(xué)生實(shí)訓(xùn)教學(xué)中,經(jīng)常會(huì)出現(xiàn)版本沖突、軟件不兼容、環(huán)境配置復(fù)雜、實(shí)訓(xùn)失敗后無法及時(shí)恢復(fù)實(shí)訓(xùn)、實(shí)訓(xùn)受時(shí)空限制等問題。新一代信息技術(shù)的發(fā)展為智慧教學(xué)平臺(tái)的構(gòu)建提供了有力的技術(shù)支撐,可彌補(bǔ)傳統(tǒng)實(shí)訓(xùn)教學(xué)環(huán)境的不足。本文對(duì)基于云計(jì)算、Docker技術(shù)的智慧教學(xué)平臺(tái)進(jìn)行了研究和教學(xué)實(shí)踐,在動(dòng)態(tài)網(wǎng)頁設(shè)計(jì)課程教學(xué)中結(jié)合企業(yè)項(xiàng)目需求對(duì)中小型企業(yè)靈活部署web應(yīng)用提供了一種有意義的實(shí)踐,在教學(xué)中,可以為學(xué)生快速提供實(shí)驗(yàn)環(huán)境并進(jìn)行資源隔離,學(xué)生可以得到獨(dú)立的運(yùn)行環(huán)境。隨著Docker技術(shù)的不斷發(fā)展,基于Docker平臺(tái)的應(yīng)用部署將會(huì)得到極大地使用。
平臺(tái)的后續(xù)研究也在積極實(shí)施中,后面將基于物理機(jī)實(shí)現(xiàn)云平臺(tái)的分布式部署,同時(shí)設(shè)計(jì)容器運(yùn)行狀態(tài)感知技術(shù),實(shí)施容器的彈性管理,同時(shí)對(duì)容器和服務(wù)器的熱遷移技術(shù)也可進(jìn)一步升級(jí)演化。