最近在忙著搭建游戲私服的事情煌恢,因此前面的關(guān)于游戲業(yè)務(wù)篇師徒系統(tǒng)的內(nèi)容會遲一點(diǎn)寫骗卜,這個坑怎么說都還是要填的宠页,不要錯過任何一次記錄的機(jī)會。
簡單介紹一下搭建游戲私服的需求寇仓,這主要是給策劃和測試使用的举户,因?yàn)槊總€策劃關(guān)注的內(nèi)容,每個測試測試的點(diǎn)都不一樣遍烦,都需要去修改測試服務(wù)器的配置或者策劃表俭嘁,以達(dá)到他們想要測試或驗(yàn)證的目的,這就不能都在一臺測試服去頻繁改動服猪,當(dāng)然也不可能為每個策劃或者測試都配一臺服務(wù)器(不要錢呀)供填。那么可不可以在他們的機(jī)器去搭建環(huán)境,在他們自己的機(jī)器部署游戲服務(wù)器呢罢猪?當(dāng)然是可以的捕虽,不過這會搞死程序(O(∩_∩)O),比如說我們的游戲服務(wù)器使用的java坡脐,你感受到了為那么多個策劃測試去部署java環(huán)境以及服務(wù)器依賴的組件的恐怖了嗎P顾健!!
真要這么做會有很多后續(xù)問題需要程序去收尾晌端,這當(dāng)然不是我們想要做的捅暴,于是我在接受到這個需求的時候立馬想到了可以使用Docker解決這個問題,只要在機(jī)器上部署好了Docker環(huán)境咧纠,游戲服務(wù)器打包成docker鏡像蓬痒,需要使用的時候載入即可,鏡像里面就是完整的游戲服務(wù)器內(nèi)容漆羔,只依賴docker環(huán)境梧奢,不依賴其他任何外部條件,這樣我們需要做的工作就是為策劃的機(jī)器搭建docker環(huán)境演痒,以及發(fā)布我們的游戲服鏡像亲轨。
既然使用了docker,為什么要在windows下使用呢鸟顺?因?yàn)椴邉潨y試用的都是windows呀(O(∩_∩)O)惦蚊,鏡像還是會發(fā)布在linux。
docker是什么讯嫂?docker的應(yīng)用以及非常廣了蹦锋,就不再這里介紹了,不知道的同學(xué)可以看看這個:http://www.docker.org.cn/book/docker/what-is-docker-16.html
本文主要介紹的在win7安裝時遇到的問題以及簡單使用欧芽。
1 下載與安裝Docker Toolbox
首先介紹一下docker在windows的支持莉掂,引用Docker 中文指南的描述:
因?yàn)镈ocker 引擎使用的是Linux內(nèi)核特性,所以我們需要在 Windows 上使用一個輕量級的虛擬機(jī) (VM) 來運(yùn)行 Docker千扔。我們使用 Windows的Docker客戶端來控制 Docker 虛擬化引擎的構(gòu)建憎妙、運(yùn)行和管理 。
為了簡化這個過程昏鹃,我們設(shè)計(jì)了一個叫 Boot2Docker 的應(yīng)用程序,你可以通過它來安裝虛擬機(jī)和運(yùn)行 Docker诀诊。
雖然你使用的是 Windows 的 Docker 客戶端洞渤,但是 docker 引擎容器依然是運(yùn)行在 Linux 宿主主機(jī)上(現(xiàn)在是通過Virtual box)。
目前docker對win10的支持已經(jīng)做的很好了属瓣,但是對于低版本的win7相對來說還是有很多問題载迄,win10直接下載https://www.docker.com/docker-windows Docker for Windows直接安裝即可,但是win7的安裝方法完全不同抡蛙。
首先我們需要下載官方提供的Docker Toolbox安裝包护昧,地址為:https://www.docker.com/products/docker-toolbox
該安裝包含了所需要的所有內(nèi)容。
然后點(diǎn)擊安裝粗截,出現(xiàn)如圖示:
安裝路徑可以選擇其它盤惋耙,我安裝在了D盤。
這是安裝包具備的組件,其中Docker client绽榛,Docker Machine是一定要安裝的湿酸,Virtualbox和Git如果事先安裝了可以不勾,不過virtualbox需要5.0版本以上灭美,版本4是不行的惑畴,Kitematic是Docker的圖形化管理界面区宇,也勾上吧,雖然我不用。
最后一直Next凿掂,點(diǎn)finish就完成了安裝。
2 初始化Docker ToolBox
安裝完畢后會在桌面出現(xiàn)三個快捷方式:
其中Docker Quickstart Terminal是初始化腳本场绿,可以去安裝目錄查看所有的組件:
里面的start.sh就是桌面上的Docker Quickstart Terminal聂儒,可以看到是這是一個shell腳本,也就是需要bash來執(zhí)行傀顾,因此在安裝的時候如果win7沒有安裝Git的話一定要勾上襟铭,并且記住其安裝位置,一般會在:
在執(zhí)行這個腳本之前短曾,我們先打開該腳本簡單看看其做了什么事:
簡單理解一下發(fā)現(xiàn)腳本主要初始化了各個工具的狀態(tài)寒砖,以及設(shè)置了代理,其中virtualbox是第一個被檢查的嫉拐,因?yàn)樾枰ㄟ^VBoxManage創(chuàng)建虛擬機(jī)哩都,因此在執(zhí)行腳本之前我們先看看virtualbox是否正常,打開桌面的:
如果出現(xiàn)下圖所示
那么恭喜你婉徘,可以進(jìn)入下一步執(zhí)行腳本了漠嵌。(第一次的打開是都沒有的,只要打開不報(bào)錯就表示虛擬機(jī)沒問題)
但是有部分機(jī)器可能會出現(xiàn)一些錯誤盖呼,比如我的機(jī)器就出現(xiàn)了:
獲取 VirtualBox COM 對象失敗儒鹿,應(yīng)用程序?qū)⒈恢袛唷?br>
這個錯誤的解決方法有幾種,
(1)兼容性問題
右擊virtualbox圖標(biāo)屬性中几晤,兼容模式運(yùn)行這個程序约炎,選擇除了win7之外的版本。
(2)a. 打開開始菜單----然后點(diǎn)擊運(yùn)行---輸入
"D:\Program Files\Oracle\VirtualBox\VBoxSVC.exe“ /reregserver
然后按回車蟹瘾,(注意virtualbox的安裝目錄,我這里安裝在D:\Program Files\Oracle\VirtualBox目錄,視情況而定圾浅,改成自己的目錄)
b.再打開開始菜單---運(yùn)行---輸入
regsvr32 "C:\Program Files\Oracle\VirtualBox\VBoxC.dll"
regsvr32如果提示不存在可以去找一下自己系統(tǒng)的存放路徑,使用絕對路徑來使用憾朴,一般會在:
(3)修改注冊表狸捕,一般這個方法是最有效的
引用這位博主的博文:http://blog.csdn.net/zp_00000/article/details/70207445
主要是修改修改注冊表中如下的兩項(xiàng):
HKEY_CLASSES_ROOT\CLSID\{00020420-0000-0000-C000-000000000046}
HKEY_CLASSES_ROOT\CLSID\{00020424-0000-0000-C000-000000000046}
分別修改上面兩項(xiàng)中的 InprocServer32的默認(rèn)值為
C:\Windows\system32\oleaut32.dll
具體操作可以跳轉(zhuǎn)到上面鏈接,我這里就不贅述了众雷。
virtualBox可以正常運(yùn)行之后我們點(diǎn)擊執(zhí)行啟動腳本灸拍,可以點(diǎn)擊桌面上的快捷方式也可以點(diǎn)擊start.sh做祝,我啟動的是桌面的,
啟動后如圖示;
這個過程會提示創(chuàng)建虛擬機(jī)株搔,ssh等內(nèi)容剖淀,在創(chuàng)建虛擬機(jī)過程時需要提供boot2docker.iso鏡像,路徑默認(rèn)是在
C:\Users\用戶名\.docker\machine\cache
啟動腳本時會提示找不到纤房,需要在線下載纵隔,這個過程會非常慢,其實(shí)Docker ToolBox安裝包是已經(jīng)提供了boot2docker.iso了的炮姨,
我們只要手動將該文件拷貝到指定目錄再重新去啟動就不需要再聯(lián)網(wǎng)下載了捌刮。
可能還會有同學(xué)拷貝了boot2docker.iso鏡像,啟動腳本時會提示該鏡像不是最新的版本舒岸,并且會告訴你最新的版本绅作,還是需要聯(lián)網(wǎng)下載,這個如果是在外網(wǎng)搭建的話就直接讓其聯(lián)網(wǎng)下載蛾派,不過可能會很慢俄认,因?yàn)槲沂窃趦?nèi)網(wǎng)搭建,所以需要在外網(wǎng)下載好最新的boot2docker.iso鏡像洪乍,再拷貝到
C:\Users\用戶名\.docker\machine\cache
下載路徑為:https://github.com/boot2docker/boot2docker/releases
選擇最新的:
再次啟動start.sh腳本眯杏,這個時候等待其初始化完畢即可,應(yīng)該不會再遇到什么問題了壳澳,最后初始化成功如下:
3 關(guān)注的概念
上面的步驟已經(jīng)完成了docker在win7上的安裝岂贩,現(xiàn)在已經(jīng)可以使用了,在使用之前我們先理清楚需要經(jīng)常關(guān)注的幾個概念巷波,Linux上使用docker和win7還是有區(qū)別的萎津,主要是平臺的問題。
首先抹镊,我們的docker daemon是運(yùn)行在virtualBox虛擬機(jī)上的锉屈,virtualbox安裝了boot2docker Linux,里面集成了Docker引擎垮耳,win7主機(jī)上安裝了Docker client颈渊,可以執(zhí)行docker命令:
但是是不能直接訪問docker Daemon的:
你很容易會想到,要想在win7的終端使用docker 操作鏡像容器只需要通過ssh連接上虛擬機(jī)就可以實(shí)現(xiàn)我們想要的操作氨菇,就像連接遠(yuǎn)程服務(wù)器一樣儡炼,boot2docker默認(rèn)的賬戶和密碼是docker, tcuser妓湘,虛擬機(jī)的ip為192.168.99.100如圖示:
但是這樣做和直接在虛擬機(jī)安裝linux查蓉,再安裝docker也沒什么區(qū)別是吧,為了簡化這個過程榜贴,Docker官方提供了一個強(qiáng)大的工具:docker-machine
官方描述:
Docker Machine so you can run Docker Engine commands from Windows terminals
docker-machine 主要用于管理虛擬機(jī)豌研,包括虛擬機(jī)的創(chuàng)建妹田、刪除、環(huán)境變量設(shè)置以及可以直接連接到虛擬機(jī)進(jìn)行對docker的操作鹃共。
我們通過使用windows的powershell來嘗試下docker-machine命令鬼佣,(dos的cmd實(shí)在體驗(yàn)太差了),“windows” + r霜浴,輸入運(yùn)行程序:powershell晶衷。
比如查看當(dāng)前的docker虛擬機(jī)的狀態(tài):
可以看到當(dāng)前有一臺名為default的docker虛擬機(jī)在運(yùn)行,設(shè)備為virtualbox阴孟,并且其ip為192.168.99.100晌纫。
查看docker虛擬機(jī)的ip可以直接通過
docker-machine ip
在本機(jī)訪問docker里面的服務(wù)不能直接通過127.0.0.1,需要通過虛擬機(jī)的ip來訪問永丝。
查看虛擬機(jī)的環(huán)境變量:
docker-machine env default
由上面命令的提示可以知道锹漱,可以通過
docker-machine env default | Invoke-Expression
命令建立powershell與linux虛擬機(jī)的連接,就像通過ssh連接一樣慕嚷,但是不用通過密碼驗(yàn)證哥牍,這個時候就可以在windows終端直接使用docker命令了:
到了這里你應(yīng)該知道要想部署鏡像只需要寫一個powershell腳本就能滿足需求了吧(_)。
4 使用示例
docker環(huán)境搭建好之后喝检,我們來跑一個web容器嗅辣,然后在win7本地瀏覽器訪問試試,在外網(wǎng)可以直接通過docker pull nginx
拉取nginx鏡像蛇耀,我的已經(jīng)拉好了辩诞,然后通過載入鏡像,運(yùn)行容器
docker run --name some-nginx -d -p 8080:80 nginx
-name 表示給容器取別名纺涤,用于區(qū)分译暂,名字不能重復(fù)
-d 表示容器在后臺運(yùn)行
-p 表示映射本地端口8080到容器的80端口,注意這里的本地指的是虛擬機(jī)ip撩炊,不是127.0.0.1
然后我們在本地瀏覽器訪問:
5 映射本地目錄到容器
前面提到外永,策劃測試需要頻繁去改動靜態(tài)文件,比如策劃表拧咳,改改道具的數(shù)量伯顶,屬性等,所以需要將容器的目錄映射到windows的本地文件夾骆膝,這個目錄假設(shè)用來存放策劃表祭衩,那么就可以實(shí)現(xiàn)在windows查看修改文件,而服務(wù)運(yùn)行在docker容器阅签。
docker提供了數(shù)據(jù)卷來達(dá)到映射的目的掐暮,通過-v選項(xiàng)指定,如果是在Linux上使用docker政钟,比如想要映射本地/home/tmp目錄到容器的/tmp路克,可以這樣:
docker run --name some-nginx -v /home/tmp:/tmp -d -p 8080:80 nginx
但是在windows能不能直接在powershell直接通過-v指定本地目錄呢樟结?比如
docker run -ti -v /d/users:/tmp centos /bin/bash
映射d盤的users目錄,這樣能達(dá)到映射的目的嗎精算?答案肯定是不行的瓢宦,為什么呢?因?yàn)槿萜魇沁\(yùn)行在virtualbox虛擬機(jī)內(nèi)的灰羽,指定的 /d/users目錄virtualbox是不知道的驮履,它無法識別。
玩過虛擬機(jī)的都知道要想虛擬機(jī)和主機(jī)共享目錄需要對虛擬機(jī)進(jìn)行設(shè)置廉嚼,將主機(jī)的目錄共享到虛擬機(jī)的某個目錄疲吸,這也是目錄映射,然后再將該目錄映射到容器前鹅,這樣就達(dá)到映射本地目錄到容器的目的摘悴。
我們打開virtualbox,點(diǎn)擊“”設(shè)置“舰绘,再點(diǎn)擊“共享文件夾”蹂喻,點(diǎn)擊右邊的“+”標(biāo)志
然后設(shè)置共享文件夾的路徑和名稱,并且選擇“自動掛載”和固定分配捂寿,然后在這個設(shè)置的共享目錄里面就可以隨意創(chuàng)建想要的目錄口四,然后映射到容器了。
有同學(xué)不禁會問這個還要去打開圖形界面設(shè)置共享文件夾很麻煩秦陋,Docker Toolbox安裝完成是默認(rèn)共享了c/Users到虛擬機(jī)的蔓彩,所以不想重新設(shè)置可以映射/c/Users的目錄,像我需要在部署的時候直接通過運(yùn)行腳本的形式運(yùn)行容器驳概,就不會再去重新設(shè)置了赤嚼,雖然也可以通過VBoxManage命令來直接創(chuàng)建共享文件夾,但是不再去研究這個了顺又,/c/Users已經(jīng)可以滿足需求更卒。
來試試:
在Users創(chuàng)了Docker的目錄,并新建了cv.txt文件稚照,然后掛載到容器:
docker run -ti -v /c/Users/docker:/home centos /bin/bash
-t 表示開啟偽終端
-i 表示打開標(biāo)準(zhǔn)輸入
/bin/bash 表示運(yùn)行bash程序
執(zhí)行成功之后會直接進(jìn)入centos容器內(nèi)部蹂空,然后我們?nèi)?home看看能不能找到cv.txt文件:
發(fā)現(xiàn)cv.txt文件出現(xiàn)了容器的home目錄下,然后在該目錄創(chuàng)建一個文件果录,
touch test.sh
再看windows目錄下的變化:
大功告成上枕!
結(jié)語:
ok,到此為止就介紹完畢了搭建過程弱恒,寫的有點(diǎn)啰嗦辨萍,有同學(xué)可能會覺得你這個整個過程下來也是很麻煩呀,是的斤彼,第一次安裝的時候確實(shí)需要費(fèi)點(diǎn)時間的分瘦,但是只要把常見的錯誤總結(jié)下,安裝完Docker Toolbox安裝包之后的行為琉苇,可以通過腳本去控制所有的操作嘲玫,這樣部署docker環(huán)境策劃只需要安裝一個軟件,執(zhí)行一個腳本并扇,以后更新游戲服的時候只需要拉取一下服務(wù)器上的鏡像或者通過其他的形式去更新去团,這種簡捷只有你真正用過了才會領(lǐng)略到,關(guān)于使用docker還有諸多好處穷蛹,在這就不一一列舉了土陪,實(shí)在是表達(dá)能力不太好呀。
接下來還會介紹配置基礎(chǔ)環(huán)境鏡像肴熏,以及最后整個基于Docker私服的搭建過程鬼雀,嗯,在這里又埋了一個坑了蛙吏,一定會填的O(∩_∩)O源哩。
以上是在win7部署docker的過程,希望對大家有所幫助鸦做,有什么問題可以留言討論励烦,大家一起學(xué)習(xí)。
Regards,
codjust.
參考文章:
http://blog.csdn.net/tina_ttl/article/details/51372604
http://www.reibang.com/p/d809971b1fc1
http://www.cnblogs.com/studyzy/p/6113221.html
https://bjddd192.github.io/docker/2017/02/28/win7%E4%B8%8B%E4%BD%BF%E7%94%A8docker-toolbox.html
http://www.widuu.com/chinese_docker/installation/windows.html