葛育佳 李亮 陸冬磊
摘要:隨著大學(xué)計(jì)算機(jī)專(zhuān)業(yè)學(xué)習(xí)進(jìn)度的增加,專(zhuān)業(yè)課越來(lái)越多,專(zhuān)業(yè)課上所需要的軟件也越來(lái)越多,軟件所需要的環(huán)境也越來(lái)越復(fù)雜,軟件運(yùn)行環(huán)境在軟件中扮演著重要角色,他肩負(fù)著保證軟件正常運(yùn)行的重任,但是不同的軟件所需要的兼容性不同,所需要的環(huán)境也不同,將不同的軟件安裝在同一個(gè)系統(tǒng)上極易出現(xiàn)環(huán)境不兼容導(dǎo)致程序崩潰,如果使用虛擬機(jī)分軟件安裝虛擬系統(tǒng),會(huì)導(dǎo)致極大的資源浪費(fèi)和資源占用,電腦的性能將急劇下降,本文基于docker并結(jié)合實(shí)際案例就解決單臺(tái)電腦同時(shí)運(yùn)行不同環(huán)境的軟件導(dǎo)致性能下降問(wèn)題進(jìn)行了探討和分析,通過(guò)本文的論述為廣大計(jì)算機(jī)專(zhuān)業(yè)的教師和學(xué)生提供參考和建議。
關(guān)鍵詞:Docker;容器;服務(wù)器;云平臺(tái)
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2019)04-0230-03
Abstract: With the increase of the learning progress of computer specialty in universities, more and more specialized courses, more and more software needed in specialized courses, and more and more complex environment needed for software, the software running environment plays an important role in software. He shoulders the responsibility of ensuring the normal operation of software, but different softwares. The compatibility of software is different and the environment is different. Installing different software on the same system is very easy to cause program crash. If the virtual system is installed with the Sub-Software of virtual machine, it will lead to a great waste of resources and resource occupancy, and the performance of computer will decline dramatically. Based on docker and practical cases, this paper discusses and analyses how to solve the problem of performance degradation caused by software running in different environments on a single computer at the same time, and provides reference and suggestions for teachers and students of computer specialty through the discussion in this paper.
Key words: Docker; container; server; cloud platform
在教學(xué)活動(dòng)中,經(jīng)常會(huì)出現(xiàn)這種情況:某些課上需要用到兩個(gè)環(huán)境相沖突的軟件,這時(shí)就需要重啟電腦,但是重啟電腦很耗費(fèi)時(shí)間,使用虛擬機(jī)虛擬兩臺(tái)計(jì)算機(jī)雖然可以讓兩個(gè)軟件同時(shí)運(yùn)行,但是性能會(huì)大打折扣,也會(huì)造成物理機(jī)的資源浪費(fèi),本文就相關(guān)問(wèn)題進(jìn)行探討,并就使用docker技術(shù)解決此問(wèn)題進(jìn)行實(shí)驗(yàn),探索解決該問(wèn)題的可行性。
1 Docker簡(jiǎn)介
Docker是基于linux內(nèi)核的類(lèi)似于虛擬機(jī)的開(kāi)源的容器引擎,能夠?qū)崿F(xiàn)虛擬化的系統(tǒng)及操作,其實(shí)docker本身不是容器,實(shí)質(zhì)為版本管理工具,根據(jù)Apache2.0協(xié)議實(shí)現(xiàn),最初利用Go語(yǔ)言編寫(xiě)[1][2]。2013年,由dotCloud公司對(duì)外公布了開(kāi)源項(xiàng)目Docker,不斷簡(jiǎn)化容器方案。Docker可以解決統(tǒng)一化方式管理全部容器的困難,并且提升了性能和高可擴(kuò)展能力。Docker容器的發(fā)明是采用集裝箱思想,為應(yīng)用提供了基于容器的運(yùn)輸系統(tǒng)。Docker將任何應(yīng)用和依賴封裝成輕量級(jí)、自包含、可移植的容器。
2 項(xiàng)目設(shè)計(jì)
2.1工作方式
Docker在創(chuàng)建容器的時(shí)候,它會(huì)加載指定的僅讀鏡像,而且在鏡像上會(huì)加入一個(gè)可讀可寫(xiě)的一層(就是把該鏡像所在的目錄復(fù)制一份到/var/lib/docker/aufs/mnt下的以ID號(hào)碼為文件夾名稱的目錄。使用chroot命令即可進(jìn)入此文件夾,其目錄結(jié)構(gòu)與容器里面的目錄一致)。
若在正在運(yùn)行中的容器中改動(dòng)現(xiàn)有的一個(gè)已存在的文件,那么該文件將會(huì)從鏡像的只讀層復(fù)制到讀寫(xiě)層,實(shí)際上該鏡像上的文件仍沒(méi)有改動(dòng),只是鏡像中的該文件已經(jīng)被讀寫(xiě)層鏡像中修改過(guò)的文件所隱藏。若刪除現(xiàn)有的docker容器并使用原來(lái)的鏡像再一次創(chuàng)建容器并使用時(shí),之前所做的修改將無(wú)法保存。
2.2工作流程
(1)創(chuàng)建鏡像,通過(guò)創(chuàng)建Dockerfile文件,將mysql容器配置的數(shù)據(jù)文件存放于此。
(2)生成容器,將所有的鏡像文件整合到一起生成Docker容器,安放、運(yùn)維、測(cè)試都在容器中進(jìn)行。
(3)鏡像的上傳與下載,通過(guò)docker官方提供的平臺(tái)進(jìn)行使用與傳播。
2.3 Docker安全性
在使用Docker時(shí)采用不恰當(dāng)?shù)陌踩绞娇赡軙?huì)將威脅到主機(jī)的安全。而對(duì)于docker有兩個(gè)關(guān)鍵的技術(shù):“一個(gè)是linux容器技術(shù),另一個(gè)是docker鏡像技術(shù)。”[3]其中,Namespace用于實(shí)現(xiàn)操作系統(tǒng)之間的資源互相隔絕,為進(jìn)程提供了不一樣的命名空間;DDoS拒絕服務(wù)即為多租戶的系統(tǒng)中最常見(jiàn)的黑客攻擊方式,一個(gè)進(jìn)程或一組進(jìn)程企圖消耗當(dāng)前系統(tǒng)的所有可用資源,來(lái)達(dá)到干擾其他正常進(jìn)程操作的目的;Capability的能力機(jī)制是linux內(nèi)核本身所支持的安全性特征,可在進(jìn)程和文件中實(shí)現(xiàn)更細(xì)精度的權(quán)限管理;用戶也可以選擇啟用現(xiàn)有的安全軟件或安全機(jī)制來(lái)加固Docker的安全,比如SELinux等;Docker容器是通過(guò)Docker的鏡像來(lái)啟動(dòng)的,如果鏡像的本身含有安全漏洞或者攻擊者將精心設(shè)計(jì)的木馬植入鏡像,那么它帶來(lái)的危害可能會(huì)像病毒般迅速的傳播。[4]
3 環(huán)境配置
3.1虛擬機(jī)配置
虛擬機(jī)使用了VMware15,如同主機(jī),可以簡(jiǎn)單地虛擬出所有的主流系統(tǒng)。首先,先安裝VMware15,創(chuàng)建典型虛擬機(jī)。再用CentOS 7 安裝鏡像進(jìn)行安裝,之后在對(duì)硬件進(jìn)行配置,分配內(nèi)存、CPU、硬盤(pán)等,然后用在實(shí)體機(jī)安裝系統(tǒng)的方式安裝CentOS 7在虛擬機(jī)上。安裝完成后,在剛剛裝好的centos7的終端內(nèi)使用linux shell命令,來(lái)進(jìn)行系統(tǒng)操作。
3.2 Docker安裝
迄今為止,CentOS只在內(nèi)核的發(fā)行版本中支持Docker。在CentOS 7上,Docker運(yùn)行的前提是需要為64位操作系統(tǒng)且內(nèi)核版本需要在3.10及以上版本才可以運(yùn)行。使用uname -r 命令確認(rèn)當(dāng)前的系統(tǒng)內(nèi)核版本。先用yum install -y yum-utils device-mapper-persistent-data lvm2命令安裝一些必要的系統(tǒng)工具;如圖1所示:
再使用yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo命令添加軟件源信息;如圖2所示:
4 項(xiàng)目實(shí)現(xiàn)
在Linux中使用vim編輯器創(chuàng)建docker鏡像,在docker hub下拉取mysql鏡像,完成上傳docker hub與下載等一系列操作。之后測(cè)試鏡像在容器中運(yùn)行的情況。
4.1創(chuàng)建鏡像
首先,創(chuàng)建目錄和一個(gè)Dockerfile文件,其中包含一些創(chuàng)建鏡像的指令。使用以下三條命令完成以上動(dòng)作:mkdirmysql cd mysql vim Dockerfile。在Dockerfile中的每一條指令都是創(chuàng)建鏡像中的一個(gè)層。在Dockerfile中使用#來(lái)注釋?zhuān)現(xiàn)ROM命令意義是使用哪一個(gè)鏡像作為基礎(chǔ)鏡像(即父鏡像),以RUN為首的指令則會(huì)在創(chuàng)建過(guò)程中進(jìn)行運(yùn)行操作。Dockerfile文件可以在網(wǎng)上下載或者自己編寫(xiě),之后使用Dockerbuild命令來(lái)創(chuàng)建鏡像。
4.2運(yùn)行容器
可以將Docker容器理解為將一個(gè)進(jìn)程在一個(gè)封閉且安全的環(huán)境中運(yùn)行。此環(huán)境包含了此進(jìn)程運(yùn)行所不可或缺的資源,包括系統(tǒng)類(lèi)庫(kù)、shell腳本、文件系統(tǒng)等等。此環(huán)境默許不會(huì)運(yùn)行任何的程序,需要在環(huán)境中啟動(dòng)一個(gè)進(jìn)程來(lái)打開(kāi)這一容器。此進(jìn)程也是該容器的惟一的進(jìn)程,當(dāng)該進(jìn)程結(jié)束時(shí),容器也將會(huì)完全停止。首先創(chuàng)建容器需要有鏡像文件,可以通過(guò)Docker鏡像文件來(lái)使用Docker run命令,鏡像文件即可運(yùn)行成為Docker容器。啟動(dòng)容器,在容器之中運(yùn)行相應(yīng)的程序就可以達(dá)到快速的部署以及應(yīng)用的隔離。通過(guò)命令將之前創(chuàng)建的boyan_py和busybox兩個(gè)鏡像運(yùn)行成為容器。命令為docker run -d -it boyan_py;docker run busybox。容器成功運(yùn)行之后,運(yùn)行MySQL,進(jìn)行簡(jiǎn)單的測(cè)試,檢測(cè)MYSQL的可行性以及容器是否已經(jīng)安裝完成。
4.3開(kāi)源共享
在修改過(guò)某一個(gè)容器后,通過(guò)運(yùn)行Docker中的commit命令,保存對(duì)容器中數(shù)據(jù)的修改。在Docker里保存目前狀態(tài)的整個(gè)行為稱為托付,原理和虛擬機(jī)的快照功能相類(lèi)似,Docker為了把保存修改后的容器與沒(méi)有保存的舊容器相區(qū)別,就會(huì)產(chǎn)生新的版本號(hào)??梢允褂胐ockerps -l命令來(lái)獲得容器的id,通過(guò)輸入命令:$docker commit 83ae boyan/centos:7.1,可以把這個(gè)鏡像保存在boyan下的centos:7.1文件。不需要拷貝完整的id,只需要開(kāi)頭的三至四個(gè)字母就可以將其區(qū)分開(kāi)。之后可以通過(guò)docker push命令,將某一個(gè)鏡像發(fā)布到官方的檢索網(wǎng)站,通過(guò)分享到類(lèi)似的開(kāi)源平臺(tái),在一方面可以重新使用,在另一方面也可以分享該鏡像使用,達(dá)到再發(fā)行的目的,提高使用效率,也可以避免重復(fù)勞動(dòng)。通過(guò)docker images命令就可以列出所有已經(jīng)安裝的鏡像。
5 調(diào)試和運(yùn)行
5.1 拉取共享鏡像
在此前已經(jīng)安裝好的VMware 15 上創(chuàng)建第二臺(tái)虛擬機(jī),配置與第一臺(tái)保持一致。在剛剛創(chuàng)建好的新虛擬機(jī)中安裝與之前相同的Linux系統(tǒng),在登錄之后就安裝Docker,安裝方法與之前虛擬機(jī)相同。新虛擬機(jī)創(chuàng)建好Docker后,拉取之前上傳好的鏡像文件,拉取回本地的鏡像文件的文件名應(yīng)與上傳時(shí)保持一致。[5]
5.2 檢測(cè)拉取鏡像的可用性
可以使用docker run命令來(lái)運(yùn)行剛剛拉取的鏡像文件,讓其創(chuàng)建好docker的容器,創(chuàng)建好容器后,在這個(gè)容器中開(kāi)始檢驗(yàn)MySQL程序功能,以此來(lái)測(cè)試該容器的穩(wěn)定性與性能。
6 結(jié)束語(yǔ)
MySQL程序的成功運(yùn)行,證明了系統(tǒng)運(yùn)維的可行性。本篇文章通過(guò)創(chuàng)建鏡像,運(yùn)行容器以及鏡像共享,成功驗(yàn)證了Docker容器的輕量級(jí)特點(diǎn)和快速部署特點(diǎn),展現(xiàn)了Docker類(lèi)似于集裝箱和虛擬機(jī)的技術(shù)在運(yùn)維平臺(tái)的搭建中廣泛的應(yīng)用前景。伴隨著互聯(lián)網(wǎng)時(shí)代的飛速發(fā)展,程序開(kāi)發(fā)項(xiàng)目和運(yùn)維項(xiàng)目的日益增多,快捷且方便地搭建運(yùn)行環(huán)境必將成為未來(lái)的趨勢(shì)。Docker環(huán)境成功降低了開(kāi)發(fā)人員的勞動(dòng)強(qiáng)度,簡(jiǎn)化了與測(cè)試人員以及維護(hù)工程師的配合,方便于集成環(huán)境中開(kāi)展驗(yàn)證和部署工作。目前Docker集中在linux系統(tǒng)上,在未來(lái)還需要考慮Docker在MAC OS 以及Windows系統(tǒng)中的應(yīng)用和安全共享,平臺(tái)移植,安全機(jī)制等方面的應(yīng)用。
參考文獻(xiàn):
[1]易升海,彭江強(qiáng),卿勇軍,伍琪.淺析Docker容器技術(shù)的發(fā)展前景[J].電信工程技術(shù)與標(biāo)準(zhǔn)化,2018.
[2]楊浚.淺析Docker的資源隔離和限制[J].科技尚品,2016.
[3]宋佳.云主機(jī)上Docker的搭建[J].求知,2018.
[4]周婧. 基于Docker技術(shù)的安全性研究綜述[J].商情,2016.
[5]張延冬,邢艷芳.基于Docker的運(yùn)維平臺(tái)設(shè)計(jì)[J].計(jì)算機(jī)時(shí)代,2018.
【通聯(lián)編輯:王力】