使用docker搭建游戏私服之win7下部署docker环境

最近在忙着搭建游戏私服的事情,因此前面的关于游戏业务篇师徒系统的内容会迟一点写,这个坑怎么说都还是要填的,不要错过任何一次记录的机会。

简单介绍一下搭建游戏私服的需求,这主要是给策划和测试使用的,因为每个策划关注的内容,每个测试测试的点都不一样,都需要去修改测试服务器的配置或者策划表,以达到他们想要测试或验证的目的,这就不能都在一台测试服去频繁改动,当然也不可能为每个策划或者测试都配一台服务器(不要钱呀)。那么可不可以在他们的机器去搭建环境,在他们自己的机器部署游戏服务器呢?当然是可以的,不过这会搞死程序(O(∩_∩)O),比如说我们的游戏服务器使用的java,你感受到了为那么多个策划测试去部署java环境以及服务器依赖的组件的恐怖了吗!!!

真要这么做会有很多后续问题需要程序去收尾,这当然不是我们想要做的,于是我在接受到这个需求的时候立马想到了可以使用Docker解决这个问题,只要在机器上部署好了Docker环境,游戏服务器打包成docker镜像,需要使用的时候载入即可,镜像里面就是完整的游戏服务器内容,只依赖docker环境,不依赖其他任何外部条件,这样我们需要做的工作就是为策划的机器搭建docker环境,以及发布我们的游戏服镜像。

既然使用了docker,为什么要在windows下使用呢?因为策划测试用的都是windows呀(O(∩_∩)O),镜像还是会发布在linux。

docker是什么?docker的应用以及非常广了,就不再这里介绍了,不知道的同学可以看看这个:http://www.docker.org.cn/book/docker/what-is-docker-16.html

本文主要介绍的在win7安装时遇到的问题以及简单使用。

docker.png

1 下载与安装Docker Toolbox

首先介绍一下docker在windows的支持,引用Docker 中文指南的描述:

因为Docker 引擎使用的是Linux内核特性,所以我们需要在 Windows 上使用一个轻量级的虚拟机 (VM) 来运行 Docker。我们使用 Windows的Docker客户端来控制 Docker 虚拟化引擎的构建、运行和管理 。
为了简化这个过程,我们设计了一个叫 Boot2Docker 的应用程序,你可以通过它来安装虚拟机和运行 Docker。
虽然你使用的是 Windows 的 Docker 客户端,但是 docker 引擎容器依然是运行在 Linux 宿主主机上(现在是通过Virtual box)。

目前docker对win10的支持已经做的很好了,但是对于低版本的win7相对来说还是有很多问题,win10直接下载https://www.docker.com/docker-windows Docker for Windows直接安装即可,但是win7的安装方法完全不同。

首先我们需要下载官方提供的Docker Toolbox安装包,地址为:https://www.docker.com/products/docker-toolbox
该安装包含了所需要的所有内容。

然后点击安装,出现如图示:


安装界面1.png
安装界面2.png

安装路径可以选择其它盘,我安装在了D盘。


安装界面3.png

这是安装包具备的组件,其中Docker client,Docker Machine是一定要安装的,Virtualbox和Git如果事先安装了可以不勾,不过virtualbox需要5.0版本以上,版本4是不行的,Kitematic是Docker的图形化管理界面,也勾上吧,虽然我不用。

安装界面4.png

最后一直Next,点finish就完成了安装。

2 初始化Docker ToolBox

安装完毕后会在桌面出现三个快捷方式:

快捷方式

其中Docker Quickstart Terminal是初始化脚本,可以去安装目录查看所有的组件:

安装目录.png

里面的start.sh就是桌面上的Docker Quickstart Terminal,可以看到是这是一个shell脚本,也就是需要bash来执行,因此在安装的时候如果win7没有安装Git的话一定要勾上,并且记住其安装位置,一般会在:

bash

在执行这个脚本之前,我们先打开该脚本简单看看其做了什么事:

start.sh.png

简单理解一下发现脚本主要初始化了各个工具的状态,以及设置了代理,其中virtualbox是第一个被检查的,因为需要通过VBoxManage创建虚拟机,因此在执行脚本之前我们先看看virtualbox是否正常,打开桌面的:

Paste_Image.png

如果出现下图所示

Paste_Image.png

那么恭喜你,可以进入下一步执行脚本了。(第一次的打开是都没有的,只要打开不报错就表示虚拟机没问题)
但是有部分机器可能会出现一些错误,比如我的机器就出现了:

Paste_Image.png

获取 VirtualBox COM 对象失败,应用程序将被中断。
这个错误的解决方法有几种,
(1)兼容性问题

Paste_Image.png

右击virtualbox图标属性中,兼容模式运行这个程序,选择除了win7之外的版本。

(2)a. 打开开始菜单----然后点击运行---输入
"D:\Program Files\Oracle\VirtualBox\VBoxSVC.exe“ /reregserver
然后按回车,(注意virtualbox的安装目录,我这里安装在D:\Program Files\Oracle\VirtualBox目录,视情况而定,改成自己的目录)
b.再打开开始菜单---运行---输入
regsvr32 "C:\Program Files\Oracle\VirtualBox\VBoxC.dll"
regsvr32如果提示不存在可以去找一下自己系统的存放路径,使用绝对路径来使用,一般会在:

Paste_Image.png

(3)修改注册表,一般这个方法是最有效的
引用这位博主的博文:http://blog.csdn.net/zp_00000/article/details/70207445

主要是修改修改注册表中如下的两项:

HKEY_CLASSES_ROOT\CLSID\{00020420-0000-0000-C000-000000000046}
HKEY_CLASSES_ROOT\CLSID\{00020424-0000-0000-C000-000000000046}

分别修改上面两项中的 InprocServer32的默认值为
C:\Windows\system32\oleaut32.dll
具体操作可以跳转到上面链接,我这里就不赘述了。

virtualBox可以正常运行之后我们点击执行启动脚本,可以点击桌面上的快捷方式也可以点击start.sh,我启动的是桌面的,
启动后如图示;

Paste_Image.png

这个过程会提示创建虚拟机,ssh等内容,在创建虚拟机过程时需要提供boot2docker.iso镜像,路径默认是在

C:\Users\用户名\.docker\machine\cache

启动脚本时会提示找不到,需要在线下载,这个过程会非常慢,其实Docker ToolBox安装包是已经提供了boot2docker.iso了的,

Paste_Image.png

我们只要手动将该文件拷贝到指定目录再重新去启动就不需要再联网下载了。

可能还会有同学拷贝了boot2docker.iso镜像,启动脚本时会提示该镜像不是最新的版本,并且会告诉你最新的版本,还是需要联网下载,这个如果是在外网搭建的话就直接让其联网下载,不过可能会很慢,因为我是在内网搭建,所以需要在外网下载好最新的boot2docker.iso镜像,再拷贝到

C:\Users\用户名\.docker\machine\cache

下载路径为:https://github.com/boot2docker/boot2docker/releases
选择最新的:

Paste_Image.png

再次启动start.sh脚本,这个时候等待其初始化完毕即可,应该不会再遇到什么问题了,最后初始化成功如下:

Paste_Image.png

3 关注的概念

上面的步骤已经完成了docker在win7上的安装,现在已经可以使用了,在使用之前我们先理清楚需要经常关注的几个概念,Linux上使用docker和win7还是有区别的,主要是平台的问题。

Paste_Image.png

首先,我们的docker daemon是运行在virtualBox虚拟机上的,virtualbox安装了boot2docker Linux,里面集成了Docker引擎,win7主机上安装了Docker client,可以执行docker命令:

Paste_Image.png

但是是不能直接访问docker Daemon的:

Paste_Image.png

你很容易会想到,要想在win7的终端使用docker 操作镜像容器只需要通过ssh连接上虚拟机就可以实现我们想要的操作,就像连接远程服务器一样,boot2docker默认的账户和密码是docker, tcuser,虚拟机的ip为192.168.99.100如图示:

Paste_Image.png

但是这样做和直接在虚拟机安装linux,再安装docker也没什么区别是吧,为了简化这个过程,Docker官方提供了一个强大的工具:docker-machine

官方描述:

Docker Machine so you can run Docker Engine commands from Windows terminals

docker-machine 主要用于管理虚拟机,包括虚拟机的创建、删除、环境变量设置以及可以直接连接到虚拟机进行对docker的操作。

我们通过使用windows的powershell来尝试下docker-machine命令,(dos的cmd实在体验太差了),“windows” + r,输入运行程序:powershell。

比如查看当前的docker虚拟机的状态:

Paste_Image.png

可以看到当前有一台名为default的docker虚拟机在运行,设备为virtualbox,并且其ip为192.168.99.100。

查看docker虚拟机的ip可以直接通过
docker-machine ip

提示.png

在本机访问docker里面的服务不能直接通过127.0.0.1,需要通过虚拟机的ip来访问。

查看虚拟机的环境变量:

docker-machine env default
Paste_Image.png

由上面命令的提示可以知道,可以通过

docker-machine env default | Invoke-Expression

命令建立powershell与linux虚拟机的连接,就像通过ssh连接一样,但是不用通过密码验证,这个时候就可以在windows终端直接使用docker命令了:

Paste_Image.png

到了这里你应该知道要想部署镜像只需要写一个powershell脚本就能满足需求了吧(_)。

4 使用示例

docker环境搭建好之后,我们来跑一个web容器,然后在win7本地浏览器访问试试,在外网可以直接通过docker pull nginx拉取nginx镜像,我的已经拉好了,然后通过载入镜像,运行容器

docker run --name some-nginx -d -p 8080:80 nginx

-name 表示给容器取别名,用于区分,名字不能重复

-d 表示容器在后台运行

-p 表示映射本地端口8080到容器的80端口,注意这里的本地指的是虚拟机ip,不是127.0.0.1

然后我们在本地浏览器访问:

Paste_Image.png

5 映射本地目录到容器

前面提到,策划测试需要频繁去改动静态文件,比如策划表,改改道具的数量,属性等,所以需要将容器的目录映射到windows的本地文件夹,这个目录假设用来存放策划表,那么就可以实现在windows查看修改文件,而服务运行在docker容器。

docker提供了数据卷来达到映射的目的,通过-v选项指定,如果是在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目录,这样能达到映射的目的吗?答案肯定是不行的,为什么呢?因为容器是运行在virtualbox虚拟机内的,指定的 /d/users目录virtualbox是不知道的,它无法识别。

玩过虚拟机的都知道要想虚拟机和主机共享目录需要对虚拟机进行设置,将主机的目录共享到虚拟机的某个目录,这也是目录映射,然后再将该目录映射到容器,这样就达到映射本地目录到容器的目的。

我们打开virtualbox,点击“”设置“,再点击“共享文件夹”,点击右边的“+”标志

Paste_Image.png

然后设置共享文件夹的路径和名称,并且选择“自动挂载”和固定分配,然后在这个设置的共享目录里面就可以随意创建想要的目录,然后映射到容器了。

有同学不禁会问这个还要去打开图形界面设置共享文件夹很麻烦,Docker Toolbox安装完成是默认共享了c/Users到虚拟机的,所以不想重新设置可以映射/c/Users的目录,像我需要在部署的时候直接通过运行脚本的形式运行容器,就不会再去重新设置了,虽然也可以通过VBoxManage命令来直接创建共享文件夹,但是不再去研究这个了,/c/Users已经可以满足需求。

来试试:

Paste_Image.png

在Users创了Docker的目录,并新建了cv.txt文件,然后挂载到容器:

docker run -ti  -v /c/Users/docker:/home centos /bin/bash

-t 表示开启伪终端
-i 表示打开标准输入
/bin/bash 表示运行bash程序

执行成功之后会直接进入centos容器内部,然后我们去/home看看能不能找到cv.txt文件:


Paste_Image.png

发现cv.txt文件出现了容器的home目录下,然后在该目录创建一个文件,

     touch test.sh
Paste_Image.png

再看windows目录下的变化:

Paste_Image.png

大功告成!

结语:
ok,到此为止就介绍完毕了搭建过程,写的有点啰嗦,有同学可能会觉得你这个整个过程下来也是很麻烦呀,是的,第一次安装的时候确实需要费点时间的,但是只要把常见的错误总结下,安装完Docker Toolbox安装包之后的行为,可以通过脚本去控制所有的操作,这样部署docker环境策划只需要安装一个软件,执行一个脚本,以后更新游戏服的时候只需要拉取一下服务器上的镜像或者通过其他的形式去更新,这种简捷只有你真正用过了才会领略到,关于使用docker还有诸多好处,在这就不一一列举了,实在是表达能力不太好呀。

接下来还会介绍配置基础环境镜像,以及最后整个基于Docker私服的搭建过程,嗯,在这里又埋了一个坑了,一定会填的O(∩_∩)O。

以上是在win7部署docker的过程,希望对大家有所帮助,有什么问题可以留言讨论,大家一起学习。

Regards,
codjust.

参考文章:
http://blog.csdn.net/tina_ttl/article/details/51372604
http://www.jianshu.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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,399评论 15 147
  • 1. 简介 Docker整个体系类似于手机系统,应用与主机、应用之间都是相互隔离,采用沙盒模式运行,一键式安装和卸...
    保持微笑_Ivan阅读 772评论 0 0
  • 0x01 核心概念 Docker镜像类似于虚拟机镜像,可以理解为一个面向Docker引擎的只读模板,包含了文件系统...
    闲云逸心阅读 4,575评论 0 9
  • 以下原文转载于(https://docs.docker.com/docker-for-mac/)(想找中文版的最新...
    Veekend阅读 7,485评论 0 17
  • 期末考试前有一位学生问我absurd是什么意思,我随口答道"荒谬的"。这件事触发了一系列思考:为什么absurd...
    刘老师专栏阅读 448评论 0 0