Docker技術(shù)在高校教學(xué)平臺(tái)建設(shè)的應(yīng)用
時(shí)間:2022-08-10 03:36:14
導(dǎo)語(yǔ):Docker技術(shù)在高校教學(xué)平臺(tái)建設(shè)的應(yīng)用一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
摘要:高校信息化建設(shè)是多方面的,設(shè)計(jì)基于docker容器技術(shù)搭建高校教學(xué)平臺(tái),開(kāi)發(fā)人員將完成的平臺(tái)功能代碼打成jar包,使用Dockerfile構(gòu)建鏡像,操作和維護(hù)人員都不必在集群中的每臺(tái)服務(wù)器上安裝環(huán)境,而是直接使用提供的鏡像進(jìn)行部署,為高校教學(xué)平臺(tái)建設(shè)提供可行的解決方案。
關(guān)鍵詞:Docker容器;信息平臺(tái);部署
一款產(chǎn)品從開(kāi)發(fā)到上線,操作系統(tǒng)、運(yùn)行環(huán)境、應(yīng)用配置的兼容性都需要考慮,往往會(huì)出現(xiàn)開(kāi)發(fā)人員將代碼交付運(yùn)維人員進(jìn)行部署時(shí),運(yùn)維人員沒(méi)辦法正確部署的問(wèn)題,如果代碼沒(méi)有改動(dòng),這種問(wèn)題一般就由環(huán)境和配置引起,開(kāi)發(fā)人員在Windows環(huán)境下開(kāi)發(fā),運(yùn)維人員在Linux環(huán)境下部署,免不了出現(xiàn)一些環(huán)境和配置文件上的不兼容。特別是各種版本的迭代之后,不同版本環(huán)境的兼容,對(duì)運(yùn)維人員都是考驗(yàn)。另外,現(xiàn)在的服務(wù)器都不再是單臺(tái)部署,基本上都是集群,運(yùn)維人員在部署應(yīng)用程序時(shí)在每臺(tái)服務(wù)器上都要安裝一遍環(huán)境,工作量很大。
1為什么使用docker
開(kāi)發(fā)人員不再只是交付自己的代碼或代碼封包,而是將運(yùn)行環(huán)境(配置、系統(tǒng)、數(shù)據(jù)等)也一起封裝交付給運(yùn)維人員。這樣一來(lái),運(yùn)維人員也不用在集群中的每臺(tái)服務(wù)器上都安裝一遍環(huán)境,而是直接使用封裝好的軟件部署。Docker的主要目標(biāo)是“在任何地方構(gòu)建,交付和運(yùn)行任何應(yīng)用程序”,即通過(guò)對(duì)應(yīng)用程序組件的生命周期進(jìn)行管理,例如打包,分發(fā),部署和操作,以便用戶的APP(可以是WEB應(yīng)用程序或數(shù)據(jù)庫(kù)應(yīng)用程序等)及其操作環(huán)境可以實(shí)現(xiàn)“可在任何地方運(yùn)行的程序包”[1]。Linux容器技術(shù)已經(jīng)實(shí)現(xiàn)了上述目標(biāo),Docker是在容器技術(shù)的基礎(chǔ)上開(kāi)發(fā)并運(yùn)行應(yīng)用程序,并且在任何操作系統(tǒng)上都將保持一致,從而實(shí)現(xiàn)了跨平臺(tái)、跨服務(wù)器,只需配置一次環(huán)境,然后切換到其他環(huán)境即可一鍵成功部署。Docker是開(kāi)發(fā)、運(yùn)行和維護(hù)(DevOps/開(kāi)發(fā),自運(yùn)行和維護(hù))的方法,即開(kāi)發(fā)人員自己負(fù)責(zé)運(yùn)行和維護(hù)工作。方便做持續(xù)集成并有助于整體的容器虛擬化技術(shù),可以實(shí)現(xiàn)“一次構(gòu)建,隨處運(yùn)行”。使用Docker開(kāi)發(fā)與自運(yùn)維的好處是:更快的部署和交付,更短的升級(jí)和擴(kuò)容縮,更容易運(yùn)維與高效的計(jì)算機(jī)資源利用[2]。
1.1傳統(tǒng)虛擬化技術(shù)和容器虛擬化技術(shù)
傳統(tǒng)虛擬化是一種環(huán)境安裝解決方案。它可以在一個(gè)操作系統(tǒng)中運(yùn)行另一個(gè)操作系統(tǒng),例如Windows系統(tǒng)中的Linux系統(tǒng),虛擬機(jī)中提供的應(yīng)用程序無(wú)法感知虛擬環(huán)境,因?yàn)樘摂M機(jī)與真實(shí)系統(tǒng)完全相同。但是,對(duì)于底層系統(tǒng),虛擬機(jī)只是一個(gè)普通文件,可以在不需要時(shí)直接將其刪除。傳統(tǒng)虛擬化也有明顯的缺點(diǎn):首先,虛擬化啟動(dòng)時(shí)間太長(zhǎng)(分鐘級(jí)別),用戶必須等待很長(zhǎng)時(shí)間;其次,虛擬化會(huì)虛擬化基礎(chǔ)硬件,因此會(huì)消耗更多資源。傳統(tǒng)的虛擬化技術(shù)是虛擬化一組硬件,然后在其上運(yùn)行完整的操作系統(tǒng),最后在該操作系統(tǒng)上運(yùn)行所需的應(yīng)用程序進(jìn)程。容器虛擬化技術(shù)應(yīng)用進(jìn)程直接在主機(jī)的內(nèi)核上運(yùn)行[3]。該容器沒(méi)有自己的內(nèi)核,也沒(méi)有硬件虛擬化。因此,容器比傳統(tǒng)的虛擬化輕,Linux容器不模擬完整的操作系統(tǒng),而是隔離進(jìn)程。容器允許將軟件操作所需的所有資源打包到一個(gè)隔離的容器中。與虛擬化不同,容器不需要與完整的操作系統(tǒng)捆綁在一起,僅需要軟件工作所需的庫(kù)資源和設(shè)置即可。這使系統(tǒng)更高效輕便,并確保可以一致地執(zhí)行每個(gè)環(huán)境中提供的資源。每個(gè)容器彼此隔離,并且每個(gè)容器都有自己的文件系統(tǒng)。容器不會(huì)相互影響,可以區(qū)分計(jì)算資源。由于容器虛擬化技術(shù)不再虛擬化基礎(chǔ)硬件,因此容器的啟動(dòng)時(shí)間很短(秒級(jí)),并且需要的資源也更少。
1.2Docer核心技術(shù)——鏡像技術(shù)
代碼或代碼編譯后生成的可執(zhí)行文件都不能視為“應(yīng)用程序”,因?yàn)樗鼈兛赡軣o(wú)法在不同的平臺(tái)上運(yùn)行,Docker提出了一個(gè)概念:鏡像文件就是應(yīng)用程序即是Docker的核心。鏡像技術(shù)打破了“代碼即應(yīng)用”的傳統(tǒng)概念。鏡像始于系統(tǒng)環(huán)境,從下至上打包應(yīng)用程序,然后將應(yīng)用程序和環(huán)境打包到一個(gè)鏡像中。鏡像(Image)是容器的模板,并且具有寫保護(hù)。鏡像可用于創(chuàng)建Docker容器,容器(Container)是鏡像操作的一個(gè)實(shí)例。Docker使用容器獨(dú)立運(yùn)行一個(gè)或多個(gè)應(yīng)用程序??梢詥?dòng),停止和刪除容器。每個(gè)容器彼此隔離。容器的頂層是可讀寫的,而鏡像是只讀的。倉(cāng)庫(kù)(Repository)是集中存儲(chǔ)鏡像文件的地方,倉(cāng)庫(kù)分為兩種形式:公共倉(cāng)庫(kù)(public)和私人倉(cāng)庫(kù)(private),倉(cāng)庫(kù)注冊(cè)服務(wù)器通常存儲(chǔ)多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)包含多個(gè)鏡像,并且每個(gè)鏡像都有不同的名稱[4]。
2Docker技術(shù)在教學(xué)平臺(tái)中的應(yīng)用
容器云管理,是對(duì)實(shí)驗(yàn)室所有服務(wù)器資源,結(jié)合Docker容器技術(shù),進(jìn)行云化處理,使得服務(wù)器資源(服務(wù)器中的軟件、系統(tǒng)、CPU、內(nèi)存、存儲(chǔ)、網(wǎng)絡(luò)等)成為可管理及維護(hù)的云計(jì)算服務(wù)中心。提供計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)、安全等方面的功能和應(yīng)用,一方面實(shí)現(xiàn)更加精細(xì)化的資源管理,控制成本,提供資源利用率,另一方面基于Docker容器技術(shù),極大加快實(shí)訓(xùn)平臺(tái)搭建、啟動(dòng)速度,提高平臺(tái)穩(wěn)定性及彈性伸縮能力[5]。以安全、簡(jiǎn)單、智能為設(shè)計(jì)理念,帶來(lái)穩(wěn)定、高效、高性能、快速的教學(xué)平臺(tái)基礎(chǔ)設(shè)施建設(shè)和云解決方案。Docker資源管理平臺(tái)如圖1所示。
3教學(xué)平臺(tái)建設(shè)
教學(xué)平臺(tái)主要功能模塊有課程與教學(xué)管理模塊、預(yù)約與實(shí)驗(yàn)管理模塊、虛擬化資源管理模塊、平臺(tái)系統(tǒng)管理模塊。其中課程與教學(xué)管理模塊主要功能包括課程分配、實(shí)驗(yàn)報(bào)告管理、實(shí)驗(yàn)管理、學(xué)情管理、課程管理、教學(xué)統(tǒng)計(jì)分析等。預(yù)約與實(shí)驗(yàn)室管理主要包括實(shí)驗(yàn)管理、上課預(yù)約管理、實(shí)驗(yàn)室管理、個(gè)人預(yù)約管理、實(shí)驗(yàn)室開(kāi)放管理、自習(xí)開(kāi)放管理等。虛擬化資源管理主要包括實(shí)驗(yàn)?zāi)0骞芾?、虛擬機(jī)實(shí)驗(yàn)管理、資源監(jiān)控管理、多機(jī)環(huán)境管理、資源分區(qū)管理、計(jì)算方案管理。平臺(tái)系統(tǒng)管理主要包括基礎(chǔ)數(shù)據(jù)管理、授權(quán)管理、用戶角色管理、周次課節(jié)管理、組織架構(gòu)管理、學(xué)年學(xué)期管理[6]?;诮虒W(xué)平臺(tái)設(shè)計(jì)開(kāi)發(fā)代碼為java,需構(gòu)建jdk鏡像,先從官網(wǎng)下載jdk,創(chuàng)建Dockerfile:FROMcentos7RUNmkdir/usr/local/javaADDjdk-8u141-linux-x64.tar.gz/usr/local/java/ENVJAVA_HOME/usr/local/java/jdkENVJRE_HOME${JAVA_HOME}/jreENVCLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/libENVPATH${JAVA_HOME}/bin:$PATH使用dockerbuild-tjdk:1.8.構(gòu)建jdk鏡像。
3.1平臺(tái)功能實(shí)現(xiàn)
平臺(tái)系統(tǒng)用戶有管理員、教師、學(xué)生三種角色。管理員角色主要對(duì)云資源進(jìn)行管理;教師角對(duì)課程管理;學(xué)生角色主要對(duì)學(xué)生操作實(shí)驗(yàn)管理。各角色協(xié)同操作,完成實(shí)驗(yàn)課程,學(xué)上機(jī)實(shí)訓(xùn)等功能。據(jù)平臺(tái)功能將各個(gè)寫好的代碼打包成jar包,基于jdk鏡像構(gòu)建用戶(userblock)的鏡像Dockerfile:FROMjdk:1.8ENVhome/usr/local/appRUNmkdir-p"$home"ENVPATH$home/bin:$PATHADD*.tar$homeWORKDIR$homeEXPOSE8090ENTRYPOINT["java","-jar","teacher.jar"]運(yùn)行教師容器:dockerrun--nameteacher-d-p8090:8090\-v/etc/localtime:/etc/localtime:ro\--log-optmax-size=100m--log-optmax-file=2--restart=alwaysteacher用戶通過(guò)網(wǎng)絡(luò),使用各種PC瀏覽器或移動(dòng)終端設(shè)備進(jìn)入實(shí)驗(yàn)教學(xué)平臺(tái),通過(guò)統(tǒng)一身份認(rèn)證、訪問(wèn)控制等安全策略控制后,為管理員、老師、學(xué)生提供完善的實(shí)驗(yàn)教學(xué)管理功能。
3.2平臺(tái)更新
當(dāng)平臺(tái)服務(wù)的配置發(fā)生更改時(shí),可使用docker-composeup命令更新配置,此時(shí),Compose會(huì)刪除舊容器并創(chuàng)建新容器,新容器會(huì)以不同的IP地址加入網(wǎng)絡(luò),名稱保持不變,任何指向舊容起的連接都會(huì)被關(guān)閉,重新找到新容器并連接上去。服務(wù)之間可以使用服務(wù)名稱相互訪問(wèn),links允許定義一個(gè)別名,從而使用該別名訪問(wèn)其它服務(wù)bashversion:'2'services:web:build:.links:-"db:database"db:image:postgres。
3.3平臺(tái)管理
使用Elasticsearch、Logstash和Kibana收集平臺(tái)日志,使用docker-compose,docker-compose.ymlversion:'3'services:elasticsearch:image:docker.elastic.co/elasticsearch/elasticsearch:7.10.0container_name:elasticsearchhostname:elasticsearchenvironment:-ELASTIC_PASSWORD=test-xpack.security.enabled=testvolumes:-/user/elk/es/data:/usr/share/elasticsearch/data-/user/elk/es/plugins:/usr/share/elasticsearch/pluginsports:-9200:9200-9300:9300restart:alwayslogging:options:max-size:"200m"kibana:image:docker.elastic.co/kibana/kibana:7.10.0environment:-ELASTICSEARCH_HOSTS=elasticsearch:9200container_name:kibanavolumes:-/user/elk/kibana/config:/usr/share/kibana/configlinks:-elasticsearch:elasticsearchrestart:alwayslogging:options:max-size:"200m"ports:-"5601:5601"logstash:image:docker.elastic.co/logstash/logstash:7.10.0container_name:logstashcommand:logstash-f/etc/logstash/conf.d/logstash.confvolumes:-/user/elk/logstash/config:/etc/logstash/conf.dports:-"5044:5044"-"9600:9600"restart:alwaysenvironment:-node.name=192.168.1.100-xpack.monitoring.elasticsearch.username=test-xpack.monitoring.elasticsearch.password=testlinks:-elasticsearch:elasticsearchlogging:options:max-size:"200m"并用Docker-composeup-d集群?jiǎn)?dòng)?;谝陨系姆椒ǎ蓪⒔虒W(xué)平臺(tái)其他功能模塊創(chuàng)建集成多個(gè)組件組成的鏡像進(jìn)行服務(wù)部署,實(shí)現(xiàn)高校教學(xué)平臺(tái)建設(shè)。
4結(jié)束語(yǔ)
教學(xué)平臺(tái)建設(shè)是信息化教學(xué)的重要組成部分,為教學(xué)提供軟件支撐。在Centos服務(wù)器中安裝Docker,將實(shí)現(xiàn)的功能打包、然后構(gòu)建成容器,實(shí)現(xiàn)了多節(jié)點(diǎn)集群上的部署,與傳統(tǒng)的方式,即將所有功能代碼放到Tomcat或Nginx等Web服務(wù)器相比,部署更加簡(jiǎn)單,后期維護(hù)成本更低,更加符合高內(nèi)聚低耦合的思想。教學(xué)平臺(tái)使用鏡像進(jìn)行部署,為高校教學(xué)平臺(tái)建設(shè)提供了可行的技術(shù)方案。
參考文獻(xiàn):
[1]彭勇,謝劍,童遙,等.一種基于Docker的數(shù)據(jù)中心云平臺(tái)實(shí)現(xiàn)方法及系統(tǒng)[J].中興通訊技術(shù).2017(02):60-62.
[2]伍陽(yáng).基于Docker的虛擬化技術(shù)研究[J].信息技術(shù).2016(01):121-123+128.
[3]董昕,郭勇,王杰.基于DevOps能力模型的持續(xù)集成方法[J].計(jì)算機(jī)工程與設(shè)計(jì).2018(07):1930-1937.
[4]應(yīng)毅,劉亞軍,俞琰.利用Docker容器技術(shù)構(gòu)建大數(shù)據(jù)實(shí)驗(yàn)室[J].實(shí)驗(yàn)室研究與探索.2018(02):264-268.
[5]李小孟.基于Docker容器技術(shù)的云實(shí)訓(xùn)平臺(tái)建設(shè)[J].電腦編程技巧與維護(hù)2020(07):105-106+115.
[6]謝超群.Docker容器技術(shù)在高校數(shù)據(jù)中心的應(yīng)用[J].貴陽(yáng)學(xué)院學(xué)報(bào)(自然科學(xué)版).2015(04):27-29.
作者:葉惠仙 游金水 單位:福建農(nóng)業(yè)職業(yè)技術(shù)學(xué)院 福建省職業(yè)技術(shù)教育中心