我的世界服务端制作Docker镜像
此案例教学仅仅只教学我的世界docker服务端的制作, 不涉及启动脚本的教学.
docker镜像启动有很多的好处, 首先就是其沙盒环境, 可以不用担心病毒入侵服务器, 但是制作镜像的时候需要谨慎一些, 还可以不用担心环境冲突的问题, 一个服务一个独立的环境.
数据持久化, 可以在容器未启动的情况下直接查看容器内的文件, 以及修改文件等等, 如果你需要在开启服务器后添加汉化, 插件, 等等, 此教程很适合你
资源使用情况, 可以单独查看容器使用的资源, 使用容器的方式部署服务可以很方便的节约服务器资源, 达到一个服务器开多个服务的情况.
分享服务端方便, 如果你不想开了可以很方便的给下一个人接力, 或者服务器到期了, 很轻松就可以移植到第二台全新的服务器
作者: Nages
作者博客: http://home.nages.cc:8081 (你是故意的还是不小心的, 咋还有端口. 作者: haha)
作者爱发电地址: https://afdian.net/a/nages
演示文件下载
完整的演示文件下载地址: http://home.nages.cc:1002/d/797811f4ad084859ab1f/
需求环境
docker(制作docker镜像必备)
docker-compose(一键运行docker构建脚本, 管理镜像很方便)
注意事项
继承镜像的时候需要知道自己的系统架构, 你使用的docker镜像不一定支持所有的系统架构
dockerfile的格式
docker-compose的格式
注意服务端的游戏版本和jdk版本是否匹配
下载的服务器最好要提供.sh后缀的启动脚本
如果在windows制作docker镜像请确保你的电脑有安装docker-desktop(docker桌面版)
因为linux 的权限比较严格, 所以有时候出问题可以先考虑下权限的问题
docker-compose 脚本启动不成功检查下docker-desktop是否启动, 还有docker, 和docker-compose
有些整个包是通过当前工作路径来获取配置文件的, 需要修改docker-compose.yml中的工作目录到指定的容器中的目录才行
获取我的世界服务端
想要把我的世界服务端从只能在windows上运行, 改造成可以在任何有docker的机器上运行的docker容器, 你必须得先有一个我的世界服务端
我这里拿e6e
的服务端做举例
e6e官方地址
点击图中红框的位置进行下载页面的跳转
等待5秒后自动开始下载
如果没开始下载点击此处尝试下载
现在我们获取到了服务端的安装程序
把他解压至桌面
因为我想在windows上制作完镜像后给linux使用
双击.bat
后缀的服务端安装程序进行下载服务端文件
开始下载服务端文件
下载服务端文件的时候记得开vpn, 否则会下载失败
下载完毕, 同意eula协议
如果没有eula.txt文件就手动创建一个并输入eula=true
内容
此时服务端文件已经下载完毕了, 关闭当前窗口
找到eula.txt
文件并打开
把false改为true
eula=true
测试服务端是否正常
此步骤主要是保证服务器是否能正常运行, 只要确定服务器能正常运行即可
双击服务端启动文件
此时服务器开始启动
客户端测试连接
因为是本地测试, 所以此处的ip地址为localhost
, 如果是云端服务器可以使用公网ip, 或者映射ip
可以观察到客户端能正确的观测到服务器
客户端进入游戏测试
成功进入游戏
客户端查看任务数据
任务数据是以服务器为基准的, 所以能看见任务数据没什么问题一般就没问题了
到了这一步已经测试服务端已经没毛病了, 可以关闭服务端了, 关闭快捷键ctrl+c
制作docker镜像
新建一个文件夹, 我姑且取名为mc_server_demo
, 名字最好是英文加下划线, 在这个文件夹下在新建一个dockerfile
文件夹, 用来存放dockerfile脚本
因为e6e的启动环境需要jdk1.8, 所以继承的镜像需要进行调整
查询镜像版本
https://hub.docker.com/
我们需要8的版本
脚本内容
编写脚本文件
FROM openjdk:8
VOLUME ["/data"]
EXPOSE 25565
解释下脚本的内容
FROM 继承的基础镜像
VOLUME 开放的容器内的目录, 容器可以理解为虚拟机
EXPOSE 容器对外开放的端口
制作docker-compose脚本
在mc_server_demo
文件夹下创建文件docker-compose.yml
文件
编写内容
version: '2'
services:
mc_server:
build: dockerfile
image: mc_server
ports:
- 25565:25565
volumes:
- ./data:/data
container_name: mc_server
restart: always
working_dir: /data
command:
- /data/start-server.sh
我们需要注意的只有mc_server
, port
, container_name
, command
,working_dir
mc_server 第一个
mc_server
只的是容器的名字, 当然后面的那个container_name
也是,container_name
的优先级更高, 如果不写container_name
就是使用第一个mc_server
位置上的名字ports 容器对外开放的端口, 可以开放多个, 左边代表对外开放的端口, 右边代表容器内连接的端口
command 启动容器时传递的命令
working_dir 容器内的工作目录, 有些整合包找不到文件或配置的时候需要配置, 一般不需要改
拷贝服务端文件
写完脚本后, 在mc_server_demo
文件夹下新建一个data
文件夹,这个data
文件夹存放这服务端文件, 将我们测试好可以正常运行的服务端文件全选拷贝到此文件夹下
修改脚本
找到linux的启动脚本, 此服务端的启动脚本为start_server.sh
要把mc_server_demo
文件夹下的docker-compose.yml
文件修改其中的command
配置项
version: '2'
services:
mc_server_e6e:
build: dockerfile
image: mc_server
ports:
- 25565:25565
volumes:
- ./data:/data
container_name: mc_server_e6e
restart: always
command:
- /data/start-server.sh
启动服务端
在mc_server_demo
文件夹下输入cmd进入控制台, 输入docker-compose up -d
启动容器
成功运行, 到这里就制作完成了.
可以直接把整个mc_server_demo文件压缩后发送到服务器执行docker-compose up -d
直接运行了
观察下服务器的资源消耗
成功进入容器内开启的我的世界服务器
md每次一进服务器就有史莱姆找我麻烦
进入成功, 大功告成!!
打包服务器
在docker-compose.yml的文件下开启命令行输入docker-compose down -d
关闭容器
直接压缩整个mc_server_demo
, 压缩成zip格式方便解压, 毕竟比较通用
上传服务器, 这个看你们自己怎么上传了, 然后解压运行
docker-compose up -d
移植linux成功