使用Docker部署Minecraft服务器

因为Docker可以以不同的方式使用,所以可以搭建像Minecraft服务器这样的应用。看起来也有人这样使用它,所以我想自己使用Docker搭建一个原版的Minecraft服务器。这次我还想整理一下Dockerfile的编辑步骤。

一. 目录

    • Javaの実行環境を入れる

 

    • マイクラサーバーの入手

 

    • ディレクトリの場所を整理

 

    • データをマウントしてローカルへ保存する

 

    CMDコマンドの設定

环境

    • Docker version 20.10.6

 

    • Ubuntu(ベースイメージ) version latest

 

    エディタ:VScode

创建Dockerfile

首先,启动Ubuntu系统镜像,手动输入命令进行确认并进行检查工作。

$ docker run -it ubuntu bash

安装Java运行环境

首先,记得及时更新常用的apt相关内容。

$ apt update && apt upgrade -y

下一步是安装Java

$ apt search openjdk-\(\.\)\+-jre$

これを実行してJavaのJRE(実行環境)で有効なバージョン一覧を表示する。
自分のやったタイミングでは11, 13, 14, 16, 8が表示される。
そこで自分も扱ったことの多い8を選択(他のバージョンで何か問題が起きるのが嫌なので)。
2021/6/9現在、マイクラの最新バージョン1.17でJavaのバージョンが16でないと起動できないことを確認したので、バージョン16に訂正しておきます(&記事内のマイクラバージョンも1.17にします)。

$ apt install openjdk-16-jre

进行安装。
然后进行时区选择处理。

将时区信息解决方案安装tzdata软件包。
将此写入Dockerfile。

FROM ubuntu:latest
RUN apt update && apt upgrade -y && apt install -y tzdata
ENV TZ Asia/Tokyo
RUN apt install -y openjdk-16-jre

在这里先进行构建,检查是否出现错误也是一个好方法。

$ docker build .
$ docker run -it <docker-image-id>

获取Minecraft服务器

需要从互联网上获取Minecraft服务器的客户端。
因此,需要安装wget包来完成这一步骤。

$ apt install wget

然后请访问一个保存了各个版本可下载存档的网站。
从这里开始,我们要下载1.16.5的客户端。
点击下载按钮,复制服务器Jar文件的链接,然后使用wget进行下载。

$ wget https://launcher.mojang.com/v1/objects/0a269b5f2c5b93b1712d0f5dc43b6182b9ab254e/server.jar

我们已经为客户准备好了。 现在把这部分写入Dockerfile吧。

FROM ubuntu:latest
RUN apt update && apt upgrade -y && apt install -y tzdata wget
ENV TZ Asia/Tokyo
RUN apt install -y openjdk-8-jre && \
    wget https://launcher.mojang.com/v1/objects/0a269b5f2c5b93b1712d0f5dc43b6182b9ab254e/server.jar

レイヤーをできるだけ減らすため、&&を使って記述していきます。

ディレクトリの場所を整理

ここでディレクトリの整理をします。もうすでに必要最低限のパッケージなどはインストール済みです。
まず、サーバークライアントはoptディレクトリに入れます。通常はソフトウェアなどを入れるフォルダです。
サーバーの主要ファイル群はrootディレクトリに入れます。
なので、ダウンロード場所をoptにして、コマンド実行をrootディレクトリで行うようにします。

FROM ubuntu:latest
RUN apt update && apt upgrade -y && apt install -y tzdata wget
ENV TZ Asia/Tokyo
WORKDIR /opt
RUN apt install -y openjdk-8-jre && \
    wget https://launcher.mojang.com/v1/objects/0a269b5f2c5b93b1712d0f5dc43b6182b9ab254e/server.jar
WORKDIR /root

前往opt目录,下载服务器/客户端,然后前往根目录并保存。

将数据挂载并保存到本地

image.png
mv /mnt/var/* /root
java -Xmx1024M -Xms1024M -jar /opt/server.jar
mv /root/* /mnt/var

将上述内容写入Dockerfile中。

FROM ubuntu:latest
RUN apt update && apt upgrade -y && apt install -y tzdata wget
ENV TZ Asia/Tokyo
WORKDIR /opt
RUN apt install -y openjdk-8-jre && \
    wget https://launcher.mojang.com/v1/objects/0a269b5f2c5b93b1712d0f5dc43b6182b9ab254e/server.jar
WORKDIR /root
RUN echo "mv /mnt/var/* /root" > run.sh && \
    echo "java -Xmx1024M -Xms1024M -jar /opt/server.jar" >> run.sh && \
    echo "mv /root/* /mnt/var" >> run.sh

设置CMD命令

CMDコマンドは、先程のシェルスクリプトを指定します。
これに加えて、CMDで実行するために実行権限を持たせるコマンド、マウント先のディレクトリ作成、eula=ture(これがないとサーバーが起動できない)のファイルを作成、というコマンドを追加して、Dockerfile完成です。

FROM ubuntu:latest
RUN apt update && apt upgrade -y && apt install -y tzdata wget
ENV TZ Asia/Tokyo
WORKDIR /opt
RUN apt install -y openjdk-8-jre && \
    wget https://launcher.mojang.com/v1/objects/0a269b5f2c5b93b1712d0f5dc43b6182b9ab254e/server.jar
WORKDIR /root
RUN echo eula=true > eula.txt && echo "mv /mnt/var/* /root" > run.sh && \
    echo "java -Xmx1024M -Xms1024M -jar /opt/server.jar" >> run.sh && \
    echo "mv /root/* /mnt/var" >> run.sh && chmod 777 run.sh && mkdir /mnt/var
CMD ["sh", "run.sh"]

创建docker-compose.yml文件

上のDockerfileをビルドすればできますが、立ち上げるときのマウントやポート指定を楽にするためにymlファイルを作成します。

version: '3'

services:
  mcserver:
    image: sugimochi/mcserver
    volumes:
      - './var:/mnt/var'
    ports:
      - '25565:25565'
    tty: true
    stdin_open: true

总结

これにて完成です。
一つ一つ確認しながらDockerfileを書いていくという流れをよく理解することができました。
また環境を作ったりするときにこういう練習はしていきたいですね。

引用资料

    • Linuxディレクトリ構造

 

    • OpenJDK(Java)を最新のUbuntuにインストール

 

    • MCVERSIONS.NET

 

    • Dockerfile で cd が効かない

 

    • 【最新版対応】マイクラサーバーの立て方【公式サーバー bat編】

 

    • Dockerで複数CMDを実行する方法

 

    Linuxの権限確認と変更(chmod)(超初心者向け)

GitHub

以下是仅提供一个选项的中文表达方式:你可以在这个链接中找到 “sugimochi97/docker_mcserver” 的相关代码。

bannerAds