喻衣鑫 湯東
關(guān)鍵詞:Docker虛擬化容器Linux大數(shù)據(jù)
在智能時(shí)代的今天,物、云、大、智融入生活的方方面面———從產(chǎn)品營(yíng)銷至信息服務(wù),從日常生活應(yīng)用至高端科學(xué)研究。物聯(lián)網(wǎng)(產(chǎn)生數(shù)據(jù))、云計(jì)算(承載數(shù)據(jù))、大數(shù)據(jù)(挖掘數(shù)據(jù))和人工智能(學(xué)習(xí)數(shù)據(jù))相輔相成、彼此依附、相互助力,合力搭檔在一起更有力量:給未來多一些可能,才能給未知多一些可能性。對(duì)于這些技術(shù)的基礎(chǔ)學(xué)習(xí)(包括Linux操作系統(tǒng)基礎(chǔ)學(xué)習(xí)、Hadoop技術(shù)學(xué)習(xí)等),都需要進(jìn)行環(huán)境平臺(tái)的搭建,正所謂“工欲善其事,必先利其器”。
1現(xiàn)有Linux相關(guān)教學(xué)存在的問題
筆者在教學(xué)過程中為不同專業(yè)、不同層次的學(xué)生進(jìn)行過Linux相關(guān)課程的教學(xué),當(dāng)然也在不同的環(huán)境、場(chǎng)合進(jìn)行了課程教學(xué),難免會(huì)遇到諸多的問題,如學(xué)生無計(jì)算機(jī)基礎(chǔ)、未接觸過計(jì)算機(jī)以及軟硬件滯后、不兼容等。
1.1專業(yè)及層次問題
在云計(jì)算技術(shù)應(yīng)用專業(yè)中,教學(xué)側(cè)重Linux的基本應(yīng)用、Shell/Python腳本的自動(dòng)化運(yùn)維開發(fā)以及網(wǎng)絡(luò)服務(wù)的配置管理等;在大數(shù)據(jù)技術(shù)專業(yè)中,教學(xué)側(cè)重服務(wù)的基礎(chǔ)應(yīng)用、Python/Java在Linux上的基礎(chǔ)應(yīng)用、正則表達(dá)式以及Hadoop環(huán)境搭建配置等,為后期部署Hadoop環(huán)境并進(jìn)行技術(shù)的學(xué)習(xí)打好基礎(chǔ);在計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)專業(yè)中,教學(xué)側(cè)重Linux基本應(yīng)用、Shell腳本、軟件安裝以及各種網(wǎng)絡(luò)服務(wù)配置與管理等。
層次較低的學(xué)生側(cè)重基礎(chǔ)的夯實(shí)教學(xué),層次較高的學(xué)生側(cè)重專業(yè)引導(dǎo),以期進(jìn)行后續(xù)的相關(guān)專業(yè)技術(shù)應(yīng)用。
1.2軟硬件問題
由于學(xué)?;蛘邆€(gè)人計(jì)算機(jī)多以Windows系統(tǒng)為主,不同的場(chǎng)所安裝的軟件版本可能存在差異。同時(shí),由于維護(hù)不及時(shí),很多軟件未能實(shí)現(xiàn)實(shí)時(shí)更新,當(dāng)然還可能存在兼容性問題。
專業(yè)及層次問題、軟硬件問題都為L(zhǎng)inux相關(guān)課程教學(xué)帶來了困難和挑戰(zhàn)。
2容器技術(shù)
Docker容器技術(shù)對(duì)傳統(tǒng)基于虛擬機(jī)的環(huán)境部署帶來了挑戰(zhàn),其誕生于2013年,自開源后就深受關(guān)注和討論,它的理念就是:“一次構(gòu)建,到處運(yùn)行”。在Docker中有兩個(gè)重要概念:Image(鏡像)和Container(容器),Docker可利用Image快速構(gòu)建出Container,容器不需要為每個(gè)應(yīng)用分配單獨(dú)的操作系統(tǒng),所以容器會(huì)擁有更高的資源使用效率[1]。以下是Docker深受歡迎的三個(gè)特性。
2.1輕便性
Docker可以安裝在Windows/Linux環(huán)境下,并能虛擬出比VMware/VirtualBox虛擬機(jī)更輕的容器。容器中也可以安裝Linux系統(tǒng),主機(jī)運(yùn)行容器的速度很快,在硬件資源較好的情況下運(yùn)行,完全無法感知其是虛擬出的系統(tǒng)。
2.2靈活性
針對(duì)不同的專業(yè)通過定制Image(鏡像)即可解決相關(guān)問題,并能通過啟動(dòng)定制的Image完成相應(yīng)的專業(yè)課程教學(xué)任務(wù)。
比如在Hadoop技術(shù)的學(xué)習(xí)中,首先需要進(jìn)行Java的安裝,因?yàn)楹芏嘟M件都是基于Java開發(fā)的。此時(shí)可以利用Docker基于基礎(chǔ)Image創(chuàng)建容器來進(jìn)行Java的安裝,Image在被修改定制后保存成新的Image,這樣就能極大的簡(jiǎn)化相關(guān)課程環(huán)境的部署。
2.3快速部署
利用傳統(tǒng)虛擬機(jī)的形式進(jìn)行實(shí)驗(yàn),需要將環(huán)境搭建到虛擬機(jī)鏡像中,并通過克隆/復(fù)制等方式進(jìn)行移植。此方式雖然可以免去重復(fù)的搭建動(dòng)作,但由于虛擬機(jī)是將整個(gè)系統(tǒng)運(yùn)行在虛擬的硬件平臺(tái)上,所以開啟虛擬機(jī)的時(shí)間會(huì)隨著部署虛擬機(jī)數(shù)量的增加而延長(zhǎng)。
比如在Hadoop集群和ZooKeeper集群的部署中,只需要定制好Image。由于Docker啟動(dòng)時(shí)間以秒為單位,且一臺(tái)計(jì)算機(jī)機(jī)能同時(shí)運(yùn)行幾十個(gè)容器,所以Docker在時(shí)間上的優(yōu)勢(shì)就凸顯無疑。當(dāng)出現(xiàn)錯(cuò)誤時(shí),重新部署相應(yīng)鏡像即可解決。當(dāng)然Docker還有其他的特性以及劣勢(shì),此處不過多闡述。
3以云計(jì)算技術(shù)應(yīng)用專業(yè)課程為側(cè)重點(diǎn)進(jìn)行Docker鏡像定制
云計(jì)算技術(shù)應(yīng)用專業(yè)的側(cè)重點(diǎn)就是服務(wù)基礎(chǔ)應(yīng)用,接下來以Web服務(wù)器為例進(jìn)行Docker的使用闡述。
3.1搜索下載apache基礎(chǔ)系統(tǒng)鏡像
3.2新建并啟動(dòng)容器,映射本地IP的80端口到容器的80端口
[root@localhost~]#ipaddr|grep"192"∥本地主機(jī)IP
inet192.168.222.206/24brd192.168.222.255scopeglobaldynamicens33
[root@localhost~]#dockerrun?it?p80:80httpd/bin/bash
root@5f5d1a5eb346:/usr/local/apache2#bin/httpd∥啟動(dòng)容器里httpd服務(wù)
3.3打開Web進(jìn)行訪問驗(yàn)證
通過訪問本機(jī)的80端口訪問容器里面所啟動(dòng)的Web服務(wù),如圖1所示。
3.4定制httpd的Docker鏡像
為讓Docker容器在后臺(tái)運(yùn)行,同時(shí)使容器里的Web服務(wù)正常運(yùn)行,且監(jiān)聽80端口,可以通過Dockerfile創(chuàng)建鏡像[2]。
3.5再次打開Web進(jìn)行訪問
在定制鏡像的時(shí)候,CMD["/usr/local/apache2/bin/httpd","?D","FOREGROUND"]是讓啟動(dòng)Docker容器的時(shí)候執(zhí)行/usr/local/apache2/bin/httpd–DFOREGROUND命令,同時(shí)通過?d參數(shù)讓容器后臺(tái)運(yùn)行,并映射本機(jī)88端口到容器80端口,訪問結(jié)果如圖2所示。
4以大數(shù)據(jù)技術(shù)專業(yè)Hadoop課程為側(cè)重點(diǎn)進(jìn)行舉例
大數(shù)據(jù)技術(shù)專業(yè)的側(cè)重點(diǎn)就是Hadoop環(huán)境搭建配置,接下來以Docker容器通過獨(dú)立IP暴露給局域網(wǎng)的方法進(jìn)行舉例。
現(xiàn)有局域網(wǎng)IP網(wǎng)段為:192.168.1.0/24;安裝有Docker的Linux環(huán)境:Linux的IP為192.168.1.250,docker的網(wǎng)橋網(wǎng)關(guān)為172.17.0.1/24。想實(shí)現(xiàn)快速構(gòu)建N3個(gè)Hadoop系統(tǒng)(1主,2備)可供N個(gè)學(xué)生進(jìn)行Hadoop環(huán)境搭建練習(xí)。
定制與Hadoop相關(guān)的Docker鏡像———安裝Java、SSH以及放入Hadoop相關(guān)文件,并進(jìn)行定制操作;配置宿主機(jī)Linux系統(tǒng)的防火墻和SELinux,或者暫時(shí)關(guān)閉它們;編寫Shell/Python腳本,實(shí)現(xiàn)批量創(chuàng)建多個(gè)以學(xué)生學(xué)號(hào)ID編號(hào)的多個(gè)容器。后續(xù),學(xué)生按照編號(hào)規(guī)則通過SSH遠(yuǎn)程登錄進(jìn)行Hadoop環(huán)境的搭建練習(xí)。
最后,在局域網(wǎng)中的Windows宿主機(jī)的CMD中增加如下命令:route ADD 172.17.0.0 MASK 255.255.0.0 192.168.1.250。通過以上配置操作,可以實(shí)現(xiàn)批量、快速構(gòu)建N3個(gè)Hadoop系統(tǒng),讓學(xué)生更快掌握后續(xù)相關(guān)的技術(shù)點(diǎn),而非每次都從頭再來,既能保證一次性成功,又節(jié)約了學(xué)習(xí)新知識(shí)的時(shí)間。
5結(jié)語
計(jì)算機(jī)技術(shù)更新?lián)Q代越來越快、分支越來越多,為了讓學(xué)生在學(xué)校學(xué)習(xí)的知識(shí)不太過于滯后,利用Docker技術(shù)的好處毋庸置疑[3]。不管是對(duì)Linux基礎(chǔ)/服務(wù)器環(huán)境的搭建,還是對(duì)大數(shù)據(jù)Hadoop環(huán)境的部署,都較為方便、快捷。