国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

游戲開發(fā) 應(yīng)用Docker實(shí)現(xiàn)開發(fā)環(huán)境

2019-11-08 02:01:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
作者簡(jiǎn)介:陳霈霖,金山西山居資深Unity開發(fā)工程師,Unity開發(fā)框架KSFramework作者,關(guān)注Web開發(fā)全棧、DevOps最近,跟一個(gè)大學(xué)金融系的同學(xué)交流,發(fā)現(xiàn)他對(duì)科技發(fā)展的動(dòng)態(tài)非常了解,然而對(duì)于一些技術(shù)關(guān)鍵字的應(yīng)用并不是很理解。對(duì)于普通不懂技術(shù)的小白來(lái)說(shuō),如果去咨詢一些IT行業(yè)技術(shù)大牛,他們往往會(huì)獲得一個(gè)一臉茫然的回答。比如說(shuō),他問(wèn)我“云計(jì)算”是什么?百度百科:云計(jì)算(cloud computing)是基于互聯(lián)網(wǎng)的相關(guān)服務(wù)的增加、使用和交付模式,通常涉及通過(guò)互聯(lián)網(wǎng)來(lái)提供動(dòng)態(tài)易擴(kuò)展且經(jīng)常是虛擬化的資源。別說(shuō)一個(gè)技術(shù)小白了,就算現(xiàn)在我看完這句話,我也是一臉茫然,難為大家了。站在技術(shù)小白的角度,去看看網(wǎng)上的一些“云計(jì)算”的解釋,你會(huì)發(fā)現(xiàn),還是那么的難以理解。用產(chǎn)品的口吻來(lái)說(shuō):用戶體驗(yàn)不好。我嘗試給他作出類比:“古時(shí)候,人們家里做一口井,水從井里打出來(lái),而現(xiàn)在,我們扭開水龍頭,水就來(lái)了; 10年前,你要裝軟件,得跑去電腦城買光碟,而現(xiàn)在,連上網(wǎng)打開應(yīng)用商店,軟件盡在眼前——這就是云計(jì)算”。當(dāng)然了,本來(lái)“云計(jì)算”就是一個(gè)很廣的問(wèn)題,這樣的解釋無(wú)非是拿出其中之一的應(yīng)用場(chǎng)景作類比。但是它能幫助普通人更好的理解。我覺得這是一個(gè)非常有趣的過(guò)程:用跨界思維,用擬物或擬人的方式,去提煉簡(jiǎn)化一些看起來(lái)很復(fù)雜、枯燥的技術(shù)關(guān)鍵詞。Docker是什么?回歸正題,我們討論Docker。估計(jì)喜歡瀏覽技術(shù)新聞資訊站的同學(xué),都會(huì)知道Docker——傳說(shuō)中改變世界的東西,它改變了應(yīng)用的部署運(yùn)維。那么Docker是什么?來(lái)看看百度百科:Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的linux機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。當(dāng)初,看完它的解釋后,我的第一反應(yīng)依舊是蒙圈,因?yàn)樗覀兡X海中常見的物理機(jī)、虛擬機(jī)的概念相比,是一種未曾想象過(guò)的新事物。鑒于所在工作環(huán)境周圍,還沒見過(guò)應(yīng)用Docker在開發(fā)環(huán)境的同學(xué)(希望大牛云集的項(xiàng)目不要鄙視),而我又覺得用通俗化的思路去解釋Docker思維是有價(jià)值的一件事,這也是本文的成文目的。圖片描述Docker圖標(biāo),小鯨魚這是Docker的官方圖標(biāo)——一只大鯨魚,上面有各種各樣的集裝箱;鯨魚就像一個(gè)操作系統(tǒng),上面裝著各種各樣的集裝箱——軟件。也許你會(huì)問(wèn),這不跟我們iphone應(yīng)用一樣嗎?手機(jī)操作系統(tǒng)(鯨魚),里面有各種各樣的App(集裝箱)。但是,仔細(xì)想想,iPhone上的App,Android上能運(yùn)行嗎?——不行。因?yàn)閕Phone使用IPA格式的App包裝方法,而Android使用APK格式的App包裝方法,兩者部署上是非常的不一樣的。能不能在Android上,運(yùn)行iPhone應(yīng)用,而又不使用損耗資源的虛擬機(jī)技術(shù)? 這就是Docker——它應(yīng)用在PC平臺(tái)上的,可以讓不同的操作系統(tǒng)平臺(tái),占用很少的資源,運(yùn)行同樣的軟件程序。圖片描述它就像一個(gè)提供開發(fā)型軟件的應(yīng)用商店。以往,我們需要安裝MySQL數(shù)據(jù)庫(kù),我們首先要想,我的操作系統(tǒng)是Windows?我的CPU是64位? 然后我們找到了MySQL Windows 64位版本進(jìn)行下載,然后開始安裝,安裝在C盤?安裝完成后,把數(shù)據(jù)庫(kù)賬號(hào)密碼設(shè)置好?而在Docker時(shí)代,我們只需要下載MySQL的Docker鏡像安裝就可以了。這個(gè)思路推而廣之,Android上利用Docker運(yùn)行iPhone應(yīng)用什么時(shí)候可以做到?這是技術(shù)上可行的,但這里不作過(guò)多幻想了。Docker不是什么新生事物,早在2013年就誕生了,而它的核心技術(shù)cgroup早在2006年就寫進(jìn)Linux內(nèi)核了,直到這2年,才漸漸開始廣泛的應(yīng)用。Docker常見的場(chǎng)景,是部署和運(yùn)維。今天,我們拋開技術(shù)細(xì)節(jié)、理論、運(yùn)維需求,簡(jiǎn)單談?wù)凞ocker怎么應(yīng)用到我們?nèi)粘?a >游戲開發(fā)環(huán)境當(dāng)中,并讓團(tuán)隊(duì)的工作流程起到什么樣的優(yōu)化。快速搭建MySQL+Redis開發(fā)環(huán)境Laradock是一個(gè)php的Docker開發(fā)環(huán)境,使用它可以極其方便的快速搭建PHP開發(fā)環(huán)境。 它不但包含了PHP語(yǔ)言執(zhí)行環(huán)境,還包括了一系列相關(guān)工具,其中包括我們非常常用的MySQL、Redis。在Laradock的官方文檔中,就有這樣的一句話:Use Docker first and learn about it later. 先使用Docker,然后再學(xué)習(xí)它。是的,先使用它,然后再深入學(xué)習(xí)Docker的一些很原理,一個(gè)自上而下的學(xué)習(xí)過(guò)程,可以讓你更加快速的理解和應(yīng)用Docker。應(yīng)用Laradock是一個(gè)很好的Docker學(xué)習(xí)起點(diǎn)。要使用Laradock,首先你得安裝Docker。 一般有可以選擇下載Windows版Docker或下載Mac版Docker,跟著安裝步驟安裝即可。而在國(guó)內(nèi),訪問(wèn)Docker的鏡像倉(cāng)庫(kù)非常的慢,因此,需要設(shè)置國(guó)內(nèi)的加速鏡像倉(cāng)庫(kù)。圖片描述小鯨魚托盤圖標(biāo)安裝好Docker以后,會(huì)有小鯨魚的圖標(biāo)出現(xiàn)在系統(tǒng)托盤上。右擊出現(xiàn)菜單(macOS系統(tǒng)則是左擊),并選擇“Settings”。圖片描述Docker加速器Windows環(huán)境時(shí),選中“Docker Daemon”界面,往”registry-mirrors”字段里添加鏡像倉(cāng)庫(kù)的地址。為什么要配置鏡像倉(cāng)庫(kù)地址?像前面所說(shuō)的,Docker有點(diǎn)像應(yīng)用商店——把需要的開發(fā)軟件,下載并安裝。因此鏡像倉(cāng)庫(kù)(Docker Hub)上儲(chǔ)存著各種各樣的“鏡像”,可理解成別人預(yù)先制作好的開發(fā)軟件。包括我們常見的MySQL、CentOS,其官方都會(huì)維護(hù)一份Docker鏡像。使用Laradock,你可以使用它在GitHub上托管的源碼:git clone https://github.com/laradock/laradockcd laradockdocker-compose up -d nginx mysql redis memcached或者,如果連命令都不想輸入(或者git都還沒安裝),下載https://github.com/mr-kelly/laradock/archive/master.zip ,解壓后,在安裝好Windows環(huán)境雙擊執(zhí)行start.bat批處理。 圖片描述這樣的一條命令,呼叫Laradock下載、啟動(dòng)了nginx、MySQL、redis、memcached四個(gè)主要容器。這幾個(gè)不同的Docker容器互相組合,并映射端口到本地。比如把localhost:80端口映射到nginx容器的80端口,把localhost:3306端口映射到MySQL容器的3306端口。這時(shí)候,使用你的MySQL數(shù)據(jù)庫(kù)工具(比如Navicat),輸入連接地址localhost,賬號(hào)root,密碼root,你就能連上了MySQL容器中的MySQL數(shù)據(jù)庫(kù)程序了。為什么我會(huì)使用Laradock?在以往,我一般會(huì)使用XAMPP來(lái)當(dāng)作我的PHP HTTP開發(fā)環(huán)境——它內(nèi)置了Apache、MySQL等開發(fā)組件,并且能以“綠色”軟件的方式安裝運(yùn)行在我的電腦上。 直到有一次,XAMPP在我的macOS上,出現(xiàn)phPRedis擴(kuò)展無(wú)法訪問(wèn)Redis的問(wèn)題,折騰很久也沒找到具體的原因,最終轉(zhuǎn)而使用Docker搭建開發(fā)環(huán)境。在日常的工作中,我們其實(shí)經(jīng)常遇到這種情況:因?yàn)橐恍└鷺I(yè)務(wù)工作的一些小問(wèn)題,比如裝系統(tǒng)啊、環(huán)境配置的坑啊等等,會(huì)耗費(fèi)我們非常多的精力。要真正的應(yīng)用Docker到您的開發(fā)環(huán)境,需要根據(jù)項(xiàng)目業(yè)務(wù)、技術(shù)選型,來(lái)自定義Docker鏡像,比如說(shuō),一個(gè)使用java+MySQL的項(xiàng)目,除了MySQL鏡像外,還需要Java運(yùn)行時(shí)鏡像,多個(gè)鏡像互相組合。可能你會(huì)疑惑,為什么要弄成多個(gè)鏡像?使用一個(gè)Linux發(fā)行版鏡像,然后在上面安裝好Java、MySQL,再制作一個(gè)完整的鏡像不就行了嗎? 是的,這也是可行的,只是說(shuō)這樣做法,類似于編程開發(fā)中的“耦合度高”,就是當(dāng)這樣一個(gè)完整的開發(fā)環(huán)境鏡像在某一天需要修改時(shí),比如說(shuō)其中的MySQL版本更新了,就需要對(duì)這個(gè)鏡像進(jìn)行重新制作。而拆分成多個(gè)鏡像互相組合,則只需要使用官方對(duì)應(yīng)版本的新鏡像即可。怎么使用Docker進(jìn)行鏡像的制作,官方的文檔很多,這里就不重復(fù)“造輪子”了。Laradock的Github地址laradock/laradock: A Docker PHP development environment. ,上面有其更加詳細(xì)的使用方法。應(yīng)用Docker開發(fā)環(huán)境的場(chǎng)景一個(gè)新人入職新人工程師走進(jìn)公司,會(huì)有一個(gè)熟悉工作環(huán)境的過(guò)程,其中一個(gè)耗時(shí)的環(huán)節(jié),就是安裝開發(fā)環(huán)境。這是一個(gè)非常折騰人的過(guò)程,如果你是使用大型IDE的開發(fā)者,比如說(shuō)安裝MySQL、SQLServer、Android SDK等大型開發(fā)軟件,這將是一個(gè)耗時(shí)的過(guò)程——首先你得找到軟件包,然后再進(jìn)入漫長(zhǎng)的安裝過(guò)程。最常見的實(shí)踐是公司內(nèi)部共享,把這些常用軟件都共享出來(lái),讓大家安裝。然而大家的習(xí)慣不同的,操作系統(tǒng)也不同,過(guò)程中依然會(huì)遇到種種兼容問(wèn)題。曾經(jīng)一個(gè)做Android開發(fā)的朋友,在入職公司的第一周內(nèi)——花了一周的時(shí)間,終于把開發(fā)環(huán)境搭建完成,讓Java工程編譯通過(guò)。游戲策劃跑單服游戲團(tuán)隊(duì)開發(fā)的過(guò)程中,免不了出現(xiàn)非技術(shù)人員需要在自己機(jī)器上啟動(dòng)游戲服務(wù)器進(jìn)行測(cè)試的情況。因此,“搭建開發(fā)環(huán)境”這個(gè)技能,會(huì)出現(xiàn)非技術(shù)人員身上。跟程序員相比,非技術(shù)人員“搭建開發(fā)環(huán)境”或“配置服務(wù)器環(huán)境”是相對(duì)更加難的事情,他們最需要的是有一種“雙擊就能運(yùn)行”的單服運(yùn)行體驗(yàn)。 有一些非技術(shù)人員和程序員之間對(duì)話,是我們經(jīng)常聽見的:“嗯,這個(gè)功能我提交前測(cè)試是正常的——你的環(huán)境干凈嗎?需要的數(shù)據(jù)都干凈地重新生成了嗎?第三方庫(kù)的二進(jìn)制文件更新了嗎?你們幾個(gè)人測(cè)試的版本一致嗎?要不你 Cleanup / 重啟 / 重新保存 / 重新建個(gè)賬號(hào)試試?”(引自厚積薄發(fā) | 游戲引擎技術(shù)點(diǎn)滴)然而實(shí)際的開發(fā)過(guò)程中,程序、策劃之間是缺乏換位思考的,程序員更喜歡直接在自己的工作上開碼,而不是為非自己工作范圍內(nèi)的體驗(yàn)進(jìn)行優(yōu)化。因此,“技術(shù)流”策劃甚是常見,不但了解軟連接硬鏈接的創(chuàng)建刪除、還熟悉各種各樣的SQL數(shù)據(jù)庫(kù)、還會(huì)通過(guò)Visual Studio編譯程序,甚至有很多都能直接編程的。開發(fā)軟件那么能不能把裝好軟件的開發(fā)機(jī)整個(gè)做一個(gè)Ghost系統(tǒng)鏡像?這確實(shí)是我前兩年項(xiàng)目所使用的方法:在一臺(tái)電腦上,裝好所有開發(fā)環(huán)境軟件,然后使用Ghost打包一個(gè)系統(tǒng)鏡像。想法很美好,但是實(shí)際過(guò)程卻很難執(zhí)行。一個(gè)鏡像大小動(dòng)輒10多GB的占用,克隆慢,恢復(fù)鏡像也慢;更要命的是,開發(fā)環(huán)境在研發(fā)過(guò)程中經(jīng)常的變化,比方說(shuō)想把舊有鏡像中的MySQL 4升級(jí)成MySQL 5,怎么做? 不停的重新構(gòu)建虛擬機(jī)鏡像? 太艱難。后來(lái)我為了達(dá)到這樣的目的,完整的MySQL執(zhí)行程序、MongoDB執(zhí)行程序直接放到SVN上傳。從程序員角度來(lái)看,這是骯臟的,把一些無(wú)關(guān)重要的二進(jìn)制文件進(jìn)入到了代碼庫(kù);但是從用戶體驗(yàn)的角度來(lái)看,這是提高了非技術(shù)人員的使用體驗(yàn)。類似這個(gè)情況如果應(yīng)用Docker后,我們大可以只需要把MySQL或MongoDB的Dockerfile定義文件上傳到SVN,非技術(shù)人員在首次啟動(dòng)時(shí)就會(huì)自動(dòng)從容器倉(cāng)庫(kù)(內(nèi)網(wǎng)或外網(wǎng)均可)拉取到對(duì)應(yīng)的容器并啟動(dòng),快速并且規(guī)避兼容性問(wèn)題。一些Linux-only的程序redis對(duì)Windows的支持非常有限,skynet游戲框架不支持Windows平臺(tái),但是對(duì)于使用Windows的人來(lái)說(shuō),會(huì)使用一臺(tái)虛擬機(jī)來(lái)進(jìn)行開發(fā)。而使用Docker,則可以改善這樣的開發(fā)環(huán)境:部署一個(gè)Linux容器,并把本地代碼文件映射到容器中,做到使用本地環(huán)境編輯代碼、使用Docker運(yùn)行程序;Redis官方提供Docker版本,體積非常小,讓W(xué)indows下運(yùn)行不再困難。導(dǎo)入真實(shí)玩家數(shù)據(jù)在項(xiàng)目運(yùn)營(yíng)中,出現(xiàn)的一些BUG,我們希望能模擬玩家的數(shù)據(jù)進(jìn)行測(cè)試,這時(shí)候需要把一些玩家的數(shù)據(jù)導(dǎo)入,進(jìn)行測(cè)試。一般來(lái)說(shuō),我們需要把數(shù)據(jù)庫(kù)的數(shù)據(jù)導(dǎo)出,然后再在開發(fā)環(huán)境中導(dǎo)入。而如果運(yùn)營(yíng)的項(xiàng)目是使用Docker容器進(jìn)行部署的,那我們只需要把這個(gè)容器整個(gè)拖回到本地執(zhí)行,我們就能完整的模擬到真實(shí)數(shù)據(jù)環(huán)境了。 同樣,應(yīng)用這樣的思路也可以進(jìn)行數(shù)據(jù)庫(kù)的備份。DevOps說(shuō)起Docker,總是免不了DevOps——開發(fā)運(yùn)維一體化。這是一個(gè)很大很抽象的思想話題,但我們這里只簡(jiǎn)單的介紹其中一種應(yīng)用:開發(fā)所使用的Docker容器,直接丟到生產(chǎn)服務(wù)器,極簡(jiǎn)部署。比方說(shuō),我所在項(xiàng)目使用C#進(jìn)行游戲服務(wù)器的開發(fā),在Windows上使用.net Framework跑,實(shí)際運(yùn)維環(huán)境則使用Mono。也就是說(shuō),實(shí)際運(yùn)維環(huán)境中,如果出現(xiàn)了有.net Framework和Mono不同兼容性的BUG,這些BUG對(duì)開發(fā)人員來(lái)說(shuō)都是前所未見、難以理解的——因?yàn)殚_發(fā)環(huán)境,跟運(yùn)營(yíng)環(huán)境,是完全不一樣的,這會(huì)引領(lǐng)開發(fā)人員進(jìn)入另一場(chǎng)爬坑游戲。Docker原理Docker的兩大核心基礎(chǔ)技術(shù)是namespace和cgroup,它們?cè)缭?006年的就被寫進(jìn)如Linux內(nèi)核。圖片描述抽象來(lái)說(shuō),跟虛擬機(jī)不一樣的是,虛擬機(jī)技術(shù),把CPU、內(nèi)存等所有硬件用軟件化進(jìn)行虛擬,形成一個(gè)虛擬的計(jì)算機(jī)環(huán)境;而Docker,則有點(diǎn)像“CPU中的虛擬CPU”、“內(nèi)存中的虛擬內(nèi)存”來(lái)對(duì)計(jì)算機(jī)進(jìn)行資源隔離。Vagrant在使用Docker之前,我一直使用Vagrant來(lái)進(jìn)行開發(fā)環(huán)境快速部署。它們的目的很相像,但是又不是那么一回事。Vagrant說(shuō)白了,就是一個(gè)VirtualBox虛擬機(jī)的快速管理工具。以往使用虛擬機(jī),我們需要安裝VirtualBox,需要下載Linux發(fā)行版鏡像,需要安裝,安裝后再安裝各種開發(fā)軟件。而使用Vagrant,就像Docker一樣,只需要一條命令,就可以完成以上所有的工作了。 只是,說(shuō)白了,Vagrant就是一個(gè)虛擬機(jī)管理工具,它就類似于你使用了一個(gè)CentOS Docker容器,然后在里面安裝好所有的開發(fā)軟件。在Web開發(fā)領(lǐng)域,看到很多程序員已經(jīng)應(yīng)用上Docker用于開發(fā)環(huán)境了;目前身邊的游戲開發(fā)中還沒看到,也希望Docker慢慢普及開來(lái)。本文只是非常片面的展現(xiàn)了Docker應(yīng)用的冰山一角——搭建簡(jiǎn)單開發(fā)環(huán)境。謹(jǐn)供你參考。SDCC 2017·上海站將于2017年3月17-19日登陸申城,三大技術(shù)峰會(huì)24位嘉賓,匯聚國(guó)內(nèi)一線的互聯(lián)網(wǎng)公司大牛,暢談運(yùn)維、數(shù)據(jù)庫(kù)和架構(gòu)的熱門話題和技術(shù)熱點(diǎn),精益運(yùn)維發(fā)起人&優(yōu)維科技CEO王津銀、MongoDB 大中華區(qū)首席架構(gòu)師唐建法和華為軟件API開放平臺(tái)架構(gòu)師李林鋒等親臨現(xiàn)場(chǎng)。3月5日前門票八折優(yōu)惠中,5人以上團(tuán)購(gòu)立減400元,詳情點(diǎn)擊注冊(cè)參會(huì)
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 会昌县| 中西区| 天峻县| 镇康县| 朝阳区| 竹北市| 石狮市| 子洲县| 司法| 天等县| 大理市| 类乌齐县| 曲周县| 东乌| 大埔县| 松阳县| 麟游县| 晋中市| 临桂县| 保定市| 镇江市| 宁陵县| 郑州市| 甘孜县| 观塘区| 环江| 中宁县| 淮安市| 长泰县| 大余县| 阜平县| 加查县| 新田县| 新沂市| 嘉义市| 临海市| 自贡市| 黄大仙区| 屯留县| 镇赉县| 临城县|