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