docker部署html5的游戏
背景
有一个基于godot制作的推箱子游戏,导出为html5的游戏,运行的时候需要nginx才能运行。不像导出为系统平台的二进制项目一样,可以解压就可运行。既然是基于nginx的内容,那么就可以做出docker的镜像,这样的镜像只需在导入就可以直接使用了。 本实例基于以下环境进行操作的。 打包的操作系统:CentOS 7.9.2009 Docker版本:1.13.1
准备工作
在Linux系统中,准备一个工作路径存放下图中的内容,boxman目录中是推箱子游戏项目导出的内容;Dockerfile是要构建docker的构建文件;nginx.conf文件需要用来替换nginx镜像中的配置文件。

Dockerfile文件的内容
Dockerfile文件的内容不多,主要是用于复制游戏的主题内容和nginx的配置文件到运行的容器中。还要开放nginx的80端口和设置启动容器自运行的内容。 完整的代码如下:
FROM nginx
MAINTAINER three-corner.xyz
WORKDIR /usr/src/app/
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
COPY ./boxman /usr/share/nginx/html/
RUN chown -R nginx:nginx /usr/share/nginx/html/ && chmod 744 -R /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx","-g","daemon off;"]
下面对这些代码做逐行的解说: 第一行:声明了使用nginx的镜像作为基础镜像; 第二行是作者信息的内容,也可以不写; 第四行是指定工作目录; 第六行复制nginx的配置到容器中; 第八行为复制游戏的目录到nginx的网站存放根目录中; 第十行这里写了两个命令,一个是修改网站存放根目录的所属为nginx群的nginx用户,如果不做这个修改,访问页面会报403没有权限,因为nginx镜像里面的默认配置的启动用户是nginx,而Dockerfile里面的这些操作都是root用户的,所以需要修改目录的所属。第二个命令是指定目录里面的所有文件的权限。两个权限放在一起,是因为每执行一次命令,docker就会增加一层,大小就会增加一层。 第十二行为开放容器的80端口对外,这个端口是根据nginx的配置文件里面定义的监听端口决定。
nginx的配置文件内容
下面是nginx的配置文件全部内容,将这个文件替换nginx镜像中的
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index Boxman.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
nginx的配置文件修改,其实需要改动的地方不多,就一处。 将网站的根一级下面的索引页修改一下,从原来的index.html index.htm修改为游戏的页面Boxman.html即可。其他的都可以不错改动 当然也可以视情况而定,修改一下监听的端口,但是我这个演示就不做这些改变,只是在启动的时候,修改映射出来的端口。
启动容器并测试访问
镜像的编译:
使用build命令来对镜像进行编译,记住容器名后面需要指定配置文件等内容的路径,因为我的工作路径是在DockerFile的统计,所以就指定为"."。
docker build -t g-boxman .
运行一个新的容器:
运行容器前先确定需要绑定的端口号没有被占用。-p参数是指定端口号映射的,先宿主机的端口号,冒号后面的是容器对外开放的端口号。
docker run -p <宿主机一个没有被占用的端口>:80 -d g-boxman
容器启动完成后,就在浏览器上访问,测试容器是否运行正常
导出镜像:
通过上面的步骤,一个自己定制的docker镜像就制作完成了,要分享给其他服务器使用的话,就需要上传至docker仓库中或者导出镜像为压缩包文件,而在这里,我选择了导出镜像为压缩包文件,这样就只需把这个文件上传到其他的服务器上,导入后即可使用。使用下面的命令进行导出
docker save -i g-boxman.tar <镜像的ID>
在目标服务器导入镜像:
将上面导出的镜像文件在需要运行的服务器上面导入,然后用该镜像启动一个容器。就可以使用该镜像中的内容了。导入的命令如下:
docker load < g-boxman.tar
目标服务器导入镜像完成后,开启运行一个新的容器即可。