張皓瑜,吳合力,張雨平
(四川旅游學(xué)院,四川 成都 610100)
目前在云計(jì)算技術(shù)的高速發(fā)展的背景下,高校對(duì)于容器化技術(shù)培養(yǎng)的課程主要依賴于“授課為主,實(shí)驗(yàn)為輔”的教學(xué)方式。在實(shí)驗(yàn)環(huán)節(jié),避免不了需要學(xué)生搭建Docker 相關(guān)的實(shí)驗(yàn)環(huán)境,并且在Docker 環(huán)境搭建之前,還需要學(xué)生完成Linux 虛擬機(jī)的安裝,那么對(duì)于學(xué)生而言,在實(shí)驗(yàn)教學(xué)環(huán)節(jié)中,Docker 環(huán)境搭建困難、配置復(fù)雜、效果差、資源占用多等諸多問題都會(huì)降低學(xué)生對(duì)于該課程的學(xué)習(xí)效率,那么針對(duì)以上出現(xiàn)的各類問題,Docker 的在線實(shí)驗(yàn)教學(xué)可以很大程度上有效解決。
從DockerCon 2017 會(huì)議之后,Marcos Nils 和 Jonathan Leibiusky 決定共同打造一款可以在瀏覽器上幫助大家學(xué)習(xí)Docker 的產(chǎn)品,PWD(Play With Docker)便由此誕生,PWD 是一種利用云主機(jī)搭建的實(shí)驗(yàn)環(huán)境,具有簡(jiǎn)便性、開源性、搭建即用的特點(diǎn),Docker 在線實(shí)驗(yàn)便是基于PWD 進(jìn)行開發(fā)的實(shí)驗(yàn)教學(xué)平臺(tái),學(xué)生用戶可以進(jìn)行拉取鏡像、構(gòu)建容器、運(yùn)行Docker 容器等Docker 命令相關(guān)的操作,甚至可以在實(shí)驗(yàn)平臺(tái)借助于Docker Swarm 技術(shù)搭建集群。Docker在線實(shí)驗(yàn)平臺(tái)借助于LXC(Linux container)內(nèi)核虛擬化技術(shù)和AUFS(advance multi-layered unification filesystem)分層鏡像方法,可以在幾乎沒有額外開銷的前提下提供資源隔離的應(yīng)用運(yùn)行環(huán)境,并且具有啟動(dòng)速度快和資源占用少的優(yōu)點(diǎn)。一臺(tái)普通服務(wù)器能夠運(yùn)行數(shù)百個(gè)容器(container)。
Docker 是一種開源的高級(jí)虛擬化技術(shù)引擎,讓開發(fā)者可以打包業(yè)務(wù)相關(guān)的應(yīng)用以及依賴到一個(gè)可移植的鏡像中,然后發(fā)布到任何流行的Linux 或Windows 操作系統(tǒng)的機(jī)器上。Docker 所擁有的高度隔離性、高效率、高資源利用率、強(qiáng)擴(kuò)展性、輕量等特點(diǎn),極大地減少了用戶成本,滿足了用戶各式各樣的環(huán)境配置需求。
Docker 虛擬化技術(shù)有三大核心基礎(chǔ)概念:容器(Container),鏡像(Image),倉庫(Repository)
(1)容器(Container):Docker 每運(yùn)行一個(gè)輕量進(jìn)程都與其他進(jìn)程互不干擾,可以理解為就像一個(gè)個(gè)小的盒子,因此稱之為容器,容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口,籠統(tǒng)一點(diǎn)的表現(xiàn)方式就是盒子與盒子之間相互隔離,互不干涉。
(2)鏡像(Image):用戶可以在容器中,添加新的環(huán)境,搭配新的配置,放入容器中,進(jìn)行打包再次整合為一個(gè)新的鏡像,鏡像是一種特殊的文件存儲(chǔ)方式以及不一樣的冗余類型,可以把一個(gè)鏡像看成一個(gè)完整磁盤的副本。Docker虛擬化技術(shù)里面,啟用Docker 容器的基礎(chǔ)便是鏡像,鏡像中包含了各式各樣容器必備的程序和相關(guān)配置環(huán)境,同時(shí),開發(fā)人員也可以自己定義容器相關(guān)的程序以及環(huán)境,并且,用戶也很容易通過互聯(lián)網(wǎng)下載他人分享的鏡像文件,通過簡(jiǎn)單的命令創(chuàng)建所需的容器。
(3)倉庫(Repository):顧名思義,存放物品的地方,這里的物品指的便是鏡像,所以也稱之為鏡像倉庫,它采用一種集中式的存放方式,每當(dāng)用戶需要相關(guān)鏡像時(shí),只需從中直接使用。同時(shí),每個(gè)用戶都擁有自己獨(dú)立的鏡像倉庫,也可以把自己的鏡像上傳進(jìn)鏡像倉庫中,用戶倉庫中的鏡像可以選擇性的對(duì)外開放,對(duì)于初學(xué)者而言,十分簡(jiǎn)單,快捷,只需輸入幾條簡(jiǎn)單的拉取鏡像命令便能從其他用戶倉庫中直接拉取相應(yīng)的鏡像。
客戶端可以通過瀏覽器訪問Docker 在線實(shí)驗(yàn)平臺(tái),當(dāng)客戶開啟一個(gè)實(shí)驗(yàn)室(Create a new instance),終端會(huì)給客戶端一個(gè)獨(dú)立的Session,每一個(gè)客戶端都有一個(gè)獨(dú)立的URL。在線實(shí)驗(yàn)室的工作環(huán)境,其實(shí)是一個(gè)獨(dú)立的鏡像(Image)開啟的容器(Container),其背后設(shè)計(jì)到的技術(shù)便是Dind(Docker in Docker),完成實(shí)驗(yàn)室開啟后,便能正常使用Docker 環(huán)境,進(jìn)行實(shí)驗(yàn)教學(xué)任務(wù)。Docker 在線實(shí)驗(yàn)平臺(tái)提供了一個(gè)非常方便的實(shí)驗(yàn)環(huán)境,用戶不僅僅可以嘗試學(xué)習(xí)Docker 技術(shù),還可以快速創(chuàng)建服務(wù)節(jié)點(diǎn),無需安裝SSH 客戶端,自動(dòng)實(shí)現(xiàn)打開外部服務(wù)端口,并且提供一鍵搭建集群的功能,高效的完成教學(xué)任務(wù)。Docker 在線實(shí)驗(yàn)教學(xué)平臺(tái)示意圖如圖1所示。
圖1 Docker 在線實(shí)驗(yàn)平臺(tái)示意圖
在部署相關(guān)后臺(tái)系統(tǒng)時(shí),可預(yù)先在云服務(wù)器搭建好后臺(tái)系統(tǒng)所需要的Mysql 數(shù)據(jù)庫、Redis 服務(wù)器等相關(guān)環(huán)境,以便更加方便、快捷的練習(xí),在實(shí)際的操作生產(chǎn)過程中,可以使用Docker-compose 進(jìn)行相關(guān)環(huán)境的搭建,Docker-compose可以籠統(tǒng)理解為一個(gè)yml 的腳本文件,以下實(shí)驗(yàn)步驟是以部署旅游景區(qū)后臺(tái)管理系統(tǒng)來進(jìn)行研究,僅提供參考練習(xí)。
2.2.1 利用Docker-compose 創(chuàng)建Mysql 容器
在root 目錄下創(chuàng)建docker,通過mkdir docker 命令,在docker 目錄下創(chuàng)建mysql,通過mkdirmysql 命令,創(chuàng)建docker-compose.yml 文件,使用vim docker-compose.yml 命令,編寫docker-compose 文件進(jìn)行相關(guān)環(huán)境的配置,創(chuàng)建完成使用守護(hù)式運(yùn)行的方式docker-compose up -d 進(jìn)行啟動(dòng)。創(chuàng)建Mysql 容器部分命令如圖2所示。
圖2 創(chuàng)建MySQL 容器命令
2.2.2 利用docker-compose 創(chuàng)建redis 容器
在docker 目錄下創(chuàng)建redis,通過mkdirredis 命令,同時(shí)創(chuàng)建docker-compose.yml 文件,使用vim docker-compose.yml 進(jìn)行編寫相關(guān)的環(huán)境配置,文件創(chuàng)建完成dockercompose up -d 進(jìn)行啟動(dòng),配置命令如圖3所示。
圖3 創(chuàng)建Redis 容器命令
2.2.3 后臺(tái)管理程序與后臺(tái)程序打包docker
容器創(chuàng)建成功后,還須將后臺(tái)管理程序與數(shù)據(jù)庫建立連接,之后即可將整個(gè)程序進(jìn)行打包,在項(xiàng)目打包前須將項(xiàng)目中需要引用后端程序的地方改成服務(wù)器地址及相應(yīng)端口。后臺(tái)程序與數(shù)據(jù)庫連接配置如圖4所示。
圖4 后臺(tái)系統(tǒng)配置文件
2.2.4 在云端創(chuàng)建java、nginx 容器
項(xiàng)目的發(fā)布可依賴Nginx 實(shí)現(xiàn),需要先創(chuàng)建Nginx 容器。將打包好的后臺(tái)管理系統(tǒng)放在Nginx 服務(wù)器的HTML目錄內(nèi),配置nginx.conf 文件,完成Nginx 代理的配置。配置Nginx 文件如圖5所示。
圖5 配置Nginx.conf 文件
之后配置dockerfile 與docker-compose 文件,便可使用docker-compose up -d 命令基于docker 運(yùn)行項(xiàng)目。
2.2.5 訪問端口測(cè)試
旅游景區(qū)后臺(tái)管理系統(tǒng)部署完成以后,可以通過之前配置的服務(wù)器地址與端口進(jìn)行訪問,打開配置的瀏覽器,測(cè)試平臺(tái)運(yùn)行是否正常。如圖6所示。
圖6 旅游景區(qū)后臺(tái)管理系統(tǒng)頁面
以容器化技術(shù)為核心的Docker 引領(lǐng)了一場(chǎng)影響了整個(gè)IT界的技術(shù)革新,不僅在徹底改變著應(yīng)用開發(fā)和發(fā)布的方式,同時(shí)改變著云計(jì)算領(lǐng)域的運(yùn)行規(guī)則,并且以Docker 技術(shù)為代表的容器技術(shù)漸漸成為微服務(wù)架構(gòu)實(shí)現(xiàn)過程中的重要手段,通過Docker 在線實(shí)驗(yàn)平臺(tái),能讓學(xué)生更加充分、細(xì)致的了解到Docker 虛擬化技術(shù)的核心,并且借助于Docker本身具有的高效,輕便,可移植的特性,極大的減小了學(xué)生的學(xué)習(xí)成本,提高了學(xué)生的專業(yè)技術(shù),有效的鍛煉了學(xué)生的學(xué)習(xí)思維。
利用Docker 在線實(shí)驗(yàn)平臺(tái),充分體現(xiàn)了學(xué)?!耙越虒W(xué)為主,實(shí)驗(yàn)為輔”的教學(xué)經(jīng)驗(yàn)思想,同時(shí)增加了老師的教學(xué)效果,提高學(xué)生的學(xué)習(xí)興趣,并且在如今應(yīng)用本身的發(fā)展背景下,Docker 在業(yè)界的廣泛應(yīng)用,很可能成為應(yīng)用市場(chǎng)的標(biāo)準(zhǔn)化,利用Docker 在線實(shí)驗(yàn)平臺(tái)的教學(xué),不僅僅增強(qiáng)了學(xué)生的專業(yè)知識(shí)技能,同時(shí)也能讓學(xué)生提前了解行業(yè),提高了學(xué)生的就業(yè)概率。