使用Docker搭建MC服务器

写在前面

此文档只限于将已有的纯净服务端移植到Docker容器中。

创建镜像

为了降低服务器的空间占用,容器使用的JDK为本机JDK,需要自行挂载。

ubuntu下安装JDK17

1
2
sudo apt update
sudo apt install openjdk-17-jdk

安装完成后使用java -version指令进行验证

Dockerfile

/home/game/Minecraft/docker目录下创建Dockerfile文件,并写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
FROM ubuntu
# 设置作者
MAINTAINER InsectMk<makun_ing@126.com>

# 配置java环境变量
ENV JAVA_HOME=/usr/local/jdk-17.0.8
ENV PATH=$PATH:$JAVA_HOME/bin
ENV PATH $JAVA_HOME/bin:$PATH

# 创建挂载点
VOLUME /usr/local/survival-friends
VOLUME /usr/local/jdk-17.0.8

# 设置进入时的默认工作目录
ENV MYPATH /usr/local/survival-friends
WORKDIR $MYPATH

EXPOSE 25565
# 设置JVM最大(Xmx)内存与最小(Xms)内存为1G
CMD java -Xmx1024M -Xms1024M -jar minecraft_server_1.20.1.jar nogui

其中,/usr/local/survival-friends为容器中你的存档的根目录,/usr/local/jdk-17.0.8为你容器中的的JDK目录,这两个目录都需要从宿主机挂载。

存档文件夹的内容大致如下(纯净服):

image-20230801171002742

1
2
3
4
5
6
7
sudo docker run \
-it -d \
--name minecraft-survival-friends \
-v /home/game/Minecraft/docker/survival-friends:/usr/local/survival-friends \
-v /opt/java/jdk-17.0.8:/usr/local/jdk-17.0.8 \
-p 25565:25565/tcp -p 25565:25565/udp \
minecraft-survival-friends:0.1

其中,/usr/local/survival-friends替换为你宿主机存档的根目录,/usr/local/jdk-17.0.8替换为你宿主机的JDK目录。

-p参数指定映射的端口,25565为我的世界服务端的默认端口,可以只暴露tcp端口,左边的端口表示宿主机的端口。

运行成功会返回一个镜像ID,运行sudo docker ps -a,看是否运行成功,带up表示运行成功。

运行sudo docker attach minecraft-survival-friends,能够重新进入Minecraft服务端终端,退出终端使用ctrl+p+q,否则会使终端终止。

运行sudo docker exec -it minecraft-survival-friends bash,能够进入ubuntu终端,退出可以直接使用exit指令。