最近在忙著搭建游戲私服的事情,因此前面的關(guān)于游戲業(yè)務(wù)篇師徒系統(tǒng)的內(nèi)容會(huì)遲一點(diǎn)寫(xiě),這個(gè)坑怎么說(shuō)都還是要填的,不要錯(cuò)過(guò)任何一次記錄的機(jī)會(huì)。
簡(jiǎn)單介紹一下搭建游戲私服的需求,這主要是給策劃和測(cè)試使用的,因?yàn)槊總€(gè)策劃關(guān)注的內(nèi)容,每個(gè)測(cè)試測(cè)試的點(diǎn)都不一樣,都需要去修改測(cè)試服務(wù)器的配置或者策劃表,以達(dá)到他們想要測(cè)試或驗(yàn)證的目的,這就不能都在一臺(tái)測(cè)試服去頻繁改動(dòng),當(dāng)然也不可能為每個(gè)策劃或者測(cè)試都配一臺(tái)服務(wù)器(不要錢(qián)呀)。那么可不可以在他們的機(jī)器去搭建環(huán)境,在他們自己的機(jī)器部署游戲服務(wù)器呢?當(dāng)然是可以的,不過(guò)這會(huì)搞死程序(O(∩_∩)O),比如說(shuō)我們的游戲服務(wù)器使用的java,你感受到了為那么多個(gè)策劃測(cè)試去部署java環(huán)境以及服務(wù)器依賴(lài)的組件的恐怖了嗎!!!
真要這么做會(huì)有很多后續(xù)問(wèn)題需要程序去收尾,這當(dāng)然不是我們想要做的,于是我在接受到這個(gè)需求的時(shí)候立馬想到了可以使用Docker解決這個(gè)問(wèn)題,只要在機(jī)器上部署好了Docker環(huán)境,游戲服務(wù)器打包成docker鏡像,需要使用的時(shí)候載入即可,鏡像里面就是完整的游戲服務(wù)器內(nèi)容,只依賴(lài)docker環(huán)境,不依賴(lài)其他任何外部條件,這樣我們需要做的工作就是為策劃的機(jī)器搭建docker環(huán)境,以及發(fā)布我們的游戲服鏡像。
既然使用了docker,為什么要在windows下使用呢?因?yàn)椴邉潨y(cè)試用的都是windows呀(O(∩_∩)O),鏡像還是會(huì)發(fā)布在linux。
docker是什么?docker的應(yīng)用以及非常廣了,就不再這里介紹了,不知道的同學(xué)可以看看這個(gè):http://www.docker.org.cn/book/docker/what-is-docker-16.html
本文主要介紹的在win7安裝時(shí)遇到的問(wèn)題以及簡(jiǎn)單使用。
1 下載與安裝Docker Toolbox
首先介紹一下docker在windows的支持,引用Docker 中文指南的描述:
因?yàn)镈ocker 引擎使用的是Linux內(nèi)核特性,所以我們需要在 Windows 上使用一個(gè)輕量級(jí)的虛擬機(jī) (VM) 來(lái)運(yùn)行 Docker。我們使用 Windows的Docker客戶(hù)端來(lái)控制 Docker 虛擬化引擎的構(gòu)建、運(yùn)行和管理 。
為了簡(jiǎn)化這個(gè)過(guò)程,我們?cè)O(shè)計(jì)了一個(gè)叫 Boot2Docker 的應(yīng)用程序,你可以通過(guò)它來(lái)安裝虛擬機(jī)和運(yùn)行 Docker。
雖然你使用的是 Windows 的 Docker 客戶(hù)端,但是 docker 引擎容器依然是運(yùn)行在 Linux 宿主主機(jī)上(現(xiàn)在是通過(guò)Virtual box)。
目前docker對(duì)win10的支持已經(jīng)做的很好了,但是對(duì)于低版本的win7相對(duì)來(lái)說(shuō)還是有很多問(wèn)題,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)如圖示:
安裝路徑可以選擇其它盤(pán),我安裝在了D盤(pán)。
這是安裝包具備的組件,其中Docker client,Docker Machine是一定要安裝的,Virtualbox和Git如果事先安裝了可以不勾,不過(guò)virtualbox需要5.0版本以上,版本4是不行的,Kitematic是Docker的圖形化管理界面,也勾上吧,雖然我不用。
最后一直Next,點(diǎn)finish就完成了安裝。
2 初始化Docker ToolBox
安裝完畢后會(huì)在桌面出現(xiàn)三個(gè)快捷方式:
其中Docker Quickstart Terminal是初始化腳本,可以去安裝目錄查看所有的組件:
里面的start.sh就是桌面上的Docker Quickstart Terminal,可以看到是這是一個(gè)shell腳本,也就是需要bash來(lái)執(zhí)行,因此在安裝的時(shí)候如果win7沒(méi)有安裝Git的話(huà)一定要勾上,并且記住其安裝位置,一般會(huì)在:
在執(zhí)行這個(gè)腳本之前,我們先打開(kāi)該腳本簡(jiǎn)單看看其做了什么事:
簡(jiǎn)單理解一下發(fā)現(xiàn)腳本主要初始化了各個(gè)工具的狀態(tài),以及設(shè)置了代理,其中virtualbox是第一個(gè)被檢查的,因?yàn)樾枰ㄟ^(guò)VBoxManage創(chuàng)建虛擬機(jī),因此在執(zhí)行腳本之前我們先看看virtualbox是否正常,打開(kāi)桌面的:
如果出現(xiàn)下圖所示
那么恭喜你,可以進(jìn)入下一步執(zhí)行腳本了。(第一次的打開(kāi)是都沒(méi)有的,只要打開(kāi)不報(bào)錯(cuò)就表示虛擬機(jī)沒(méi)問(wèn)題)
但是有部分機(jī)器可能會(huì)出現(xiàn)一些錯(cuò)誤,比如我的機(jī)器就出現(xiàn)了:
獲取 VirtualBox COM 對(duì)象失敗,應(yīng)用程序?qū)⒈恢袛唷?br>
這個(gè)錯(cuò)誤的解決方法有幾種,
(1)兼容性問(wèn)題
右擊virtualbox圖標(biāo)屬性中,兼容模式運(yùn)行這個(gè)程序,選擇除了win7之外的版本。
(2)a. 打開(kāi)開(kāi)始菜單----然后點(diǎn)擊運(yùn)行---輸入
"D:\Program Files\Oracle\VirtualBox\VBoxSVC.exe“ /reregserver
然后按回車(chē),(注意virtualbox的安裝目錄,我這里安裝在D:\Program Files\Oracle\VirtualBox目錄,視情況而定,改成自己的目錄)
b.再打開(kāi)開(kāi)始菜單---運(yùn)行---輸入
regsvr32 "C:\Program Files\Oracle\VirtualBox\VBoxC.dll"
regsvr32如果提示不存在可以去找一下自己系統(tǒng)的存放路徑,使用絕對(duì)路徑來(lái)使用,一般會(huì)在:
(3)修改注冊(cè)表,一般這個(gè)方法是最有效的
引用這位博主的博文:http://blog.csdn.net/zp_00000/article/details/70207445
主要是修改修改注冊(cè)表中如下的兩項(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í)行啟動(dòng)腳本,可以點(diǎn)擊桌面上的快捷方式也可以點(diǎn)擊start.sh,我啟動(dòng)的是桌面的,
啟動(dòng)后如圖示;
這個(gè)過(guò)程會(huì)提示創(chuàng)建虛擬機(jī),ssh等內(nèi)容,在創(chuàng)建虛擬機(jī)過(guò)程時(shí)需要提供boot2docker.iso鏡像,路徑默認(rèn)是在
C:\Users\用戶(hù)名\.docker\machine\cache
啟動(dòng)腳本時(shí)會(huì)提示找不到,需要在線(xiàn)下載,這個(gè)過(guò)程會(huì)非常慢,其實(shí)Docker ToolBox安裝包是已經(jīng)提供了boot2docker.iso了的,
我們只要手動(dòng)將該文件拷貝到指定目錄再重新去啟動(dòng)就不需要再聯(lián)網(wǎng)下載了。
可能還會(huì)有同學(xué)拷貝了boot2docker.iso鏡像,啟動(dòng)腳本時(shí)會(huì)提示該鏡像不是最新的版本,并且會(huì)告訴你最新的版本,還是需要聯(lián)網(wǎng)下載,這個(gè)如果是在外網(wǎng)搭建的話(huà)就直接讓其聯(lián)網(wǎng)下載,不過(guò)可能會(huì)很慢,因?yàn)槲沂窃趦?nèi)網(wǎng)搭建,所以需要在外網(wǎng)下載好最新的boot2docker.iso鏡像,再拷貝到
C:\Users\用戶(hù)名\.docker\machine\cache
下載路徑為:https://github.com/boot2docker/boot2docker/releases
選擇最新的:
再次啟動(dòng)start.sh腳本,這個(gè)時(shí)候等待其初始化完畢即可,應(yīng)該不會(huì)再遇到什么問(wèn)題了,最后初始化成功如下:
3 關(guān)注的概念
上面的步驟已經(jīng)完成了docker在win7上的安裝,現(xiàn)在已經(jīng)可以使用了,在使用之前我們先理清楚需要經(jīng)常關(guān)注的幾個(gè)概念,Linux上使用docker和win7還是有區(qū)別的,主要是平臺(tái)的問(wèn)題。
首先,我們的docker daemon是運(yùn)行在virtualBox虛擬機(jī)上的,virtualbox安裝了boot2docker Linux,里面集成了Docker引擎,win7主機(jī)上安裝了Docker client,可以執(zhí)行docker命令:
但是是不能直接訪(fǎng)問(wèn)docker Daemon的:
你很容易會(huì)想到,要想在win7的終端使用docker 操作鏡像容器只需要通過(guò)ssh連接上虛擬機(jī)就可以實(shí)現(xiàn)我們想要的操作,就像連接遠(yuǎn)程服務(wù)器一樣,boot2docker默認(rèn)的賬戶(hù)和密碼是docker, tcuser,虛擬機(jī)的ip為192.168.99.100如圖示:
但是這樣做和直接在虛擬機(jī)安裝linux,再安裝docker也沒(méi)什么區(qū)別是吧,為了簡(jiǎn)化這個(gè)過(guò)程,Docker官方提供了一個(gè)強(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)行對(duì)docker的操作。
我們通過(guò)使用windows的powershell來(lái)嘗試下docker-machine命令,(dos的cmd實(shí)在體驗(yàn)太差了),“windows” + r,輸入運(yùn)行程序:powershell。
比如查看當(dāng)前的docker虛擬機(jī)的狀態(tài):
可以看到當(dāng)前有一臺(tái)名為default的docker虛擬機(jī)在運(yùn)行,設(shè)備為virtualbox,并且其ip為192.168.99.100。
查看docker虛擬機(jī)的ip可以直接通過(guò)
docker-machine ip
在本機(jī)訪(fǎng)問(wèn)docker里面的服務(wù)不能直接通過(guò)127.0.0.1,需要通過(guò)虛擬機(jī)的ip來(lái)訪(fǎng)問(wèn)。
查看虛擬機(jī)的環(huán)境變量:
docker-machine env default
由上面命令的提示可以知道,可以通過(guò)
docker-machine env default | Invoke-Expression
命令建立powershell與linux虛擬機(jī)的連接,就像通過(guò)ssh連接一樣,但是不用通過(guò)密碼驗(yàn)證,這個(gè)時(shí)候就可以在windows終端直接使用docker命令了:
到了這里你應(yīng)該知道要想部署鏡像只需要寫(xiě)一個(gè)powershell腳本就能滿(mǎn)足需求了吧(_)。
4 使用示例
docker環(huán)境搭建好之后,我們來(lái)跑一個(gè)web容器,然后在win7本地瀏覽器訪(fǎng)問(wèn)試試,在外網(wǎng)可以直接通過(guò)docker pull nginx
拉取nginx鏡像,我的已經(jīng)拉好了,然后通過(guò)載入鏡像,運(yùn)行容器
docker run --name some-nginx -d -p 8080:80 nginx
-name 表示給容器取別名,用于區(qū)分,名字不能重復(fù)
-d 表示容器在后臺(tái)運(yùn)行
-p 表示映射本地端口8080到容器的80端口,注意這里的本地指的是虛擬機(jī)ip,不是127.0.0.1
然后我們?cè)诒镜貫g覽器訪(fǎng)問(wèn):
5 映射本地目錄到容器
前面提到,策劃測(cè)試需要頻繁去改動(dòng)靜態(tài)文件,比如策劃表,改改道具的數(shù)量,屬性等,所以需要將容器的目錄映射到windows的本地文件夾,這個(gè)目錄假設(shè)用來(lái)存放策劃表,那么就可以實(shí)現(xiàn)在windows查看修改文件,而服務(wù)運(yùn)行在docker容器。
docker提供了數(shù)據(jù)卷來(lái)達(dá)到映射的目的,通過(guò)-v選項(xiàng)指定,如果是在Linux上使用docker,比如想要映射本地/home/tmp目錄到容器的/tmp,可以這樣:
docker run --name some-nginx -v /home/tmp:/tmp -d -p 8080:80 nginx
但是在windows能不能直接在powershell直接通過(guò)-v指定本地目錄呢?比如
docker run -ti -v /d/users:/tmp centos /bin/bash
映射d盤(pán)的users目錄,這樣能達(dá)到映射的目的嗎?答案肯定是不行的,為什么呢?因?yàn)槿萜魇沁\(yùn)行在virtualbox虛擬機(jī)內(nèi)的,指定的 /d/users目錄virtualbox是不知道的,它無(wú)法識(shí)別。
玩過(guò)虛擬機(jī)的都知道要想虛擬機(jī)和主機(jī)共享目錄需要對(duì)虛擬機(jī)進(jìn)行設(shè)置,將主機(jī)的目錄共享到虛擬機(jī)的某個(gè)目錄,這也是目錄映射,然后再將該目錄映射到容器,這樣就達(dá)到映射本地目錄到容器的目的。
我們打開(kāi)virtualbox,點(diǎn)擊“”設(shè)置“,再點(diǎn)擊“共享文件夾”,點(diǎn)擊右邊的“+”標(biāo)志
然后設(shè)置共享文件夾的路徑和名稱(chēng),并且選擇“自動(dòng)掛載”和固定分配,然后在這個(gè)設(shè)置的共享目錄里面就可以隨意創(chuàng)建想要的目錄,然后映射到容器了。
有同學(xué)不禁會(huì)問(wèn)這個(gè)還要去打開(kāi)圖形界面設(shè)置共享文件夾很麻煩,Docker Toolbox安裝完成是默認(rèn)共享了c/Users到虛擬機(jī)的,所以不想重新設(shè)置可以映射/c/Users的目錄,像我需要在部署的時(shí)候直接通過(guò)運(yùn)行腳本的形式運(yùn)行容器,就不會(huì)再去重新設(shè)置了,雖然也可以通過(guò)VBoxManage命令來(lái)直接創(chuàng)建共享文件夾,但是不再去研究這個(gè)了,/c/Users已經(jīng)可以滿(mǎn)足需求。
來(lái)試試:
在Users創(chuàng)了Docker的目錄,并新建了cv.txt文件,然后掛載到容器:
docker run -ti -v /c/Users/docker:/home centos /bin/bash
-t 表示開(kāi)啟偽終端
-i 表示打開(kāi)標(biāo)準(zhǔn)輸入
/bin/bash 表示運(yùn)行bash程序
執(zhí)行成功之后會(huì)直接進(jìn)入centos容器內(nèi)部,然后我們?nèi)?home看看能不能找到cv.txt文件:
發(fā)現(xiàn)cv.txt文件出現(xiàn)了容器的home目錄下,然后在該目錄創(chuàng)建一個(gè)文件,
touch test.sh
再看windows目錄下的變化:
大功告成!
結(jié)語(yǔ):
ok,到此為止就介紹完畢了搭建過(guò)程,寫(xiě)的有點(diǎn)啰嗦,有同學(xué)可能會(huì)覺(jué)得你這個(gè)整個(gè)過(guò)程下來(lái)也是很麻煩呀,是的,第一次安裝的時(shí)候確實(shí)需要費(fèi)點(diǎn)時(shí)間的,但是只要把常見(jiàn)的錯(cuò)誤總結(jié)下,安裝完Docker Toolbox安裝包之后的行為,可以通過(guò)腳本去控制所有的操作,這樣部署docker環(huán)境策劃只需要安裝一個(gè)軟件,執(zhí)行一個(gè)腳本,以后更新游戲服的時(shí)候只需要拉取一下服務(wù)器上的鏡像或者通過(guò)其他的形式去更新,這種簡(jiǎn)捷只有你真正用過(guò)了才會(huì)領(lǐng)略到,關(guān)于使用docker還有諸多好處,在這就不一一列舉了,實(shí)在是表達(dá)能力不太好呀。
接下來(lái)還會(huì)介紹配置基礎(chǔ)環(huán)境鏡像,以及最后整個(gè)基于Docker私服的搭建過(guò)程,嗯,在這里又埋了一個(gè)坑了,一定會(huì)填的O(∩_∩)O。
以上是在win7部署docker的過(guò)程,希望對(duì)大家有所幫助,有什么問(wèn)題可以留言討論,大家一起學(xué)習(xí)。
Regards,
codjust.
參考文章:
http://blog.csdn.net/tina_ttl/article/details/51372604
http://www.lxweimin.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