windowsマシン上でLinuxを実行できる Windows Subsystem for Linux (WSL) にインストールした Docker でMinecraft Bedrock Server構築してみました。Dockerを利用することで、環境を汚さずに試行錯誤ができます。Dockerfileを自作して、独自のイメージから構築してみました。
本記事で紹介する wsl を用いる方法はマルチプレイには不向きです。windowsマシンでサーバーを立てるなら、windows向けの統合版マイクラサーバーの利用をオススメします。
本記事は統合版マインクラフトで動作確認を行っています。
Minecraft for Windows 1.21.131
既存のimageを使う場合
itzg/minecraft-bedrock-serverというimageが利用できます。
docker run -d -it -e EULA=TRUE -p 19132:19132/udp -v mc-bedrock-data:/data itzg/minecraft-bedrock-server
本記事では、Dockerfileを自作してイメージから構築する手順をお届けします。
Bedrock Serverのダウンロード
公式の配布サイトから「Ubuntu (Linux) 用 Minecraft 専用サーバーのソフトウェア」の方を利用規約に同意してダウンロードリンクをコピーします。
とりあえずマイクラのサーバーを起動する
dockerを使ってとりあえず統合版マイクラのサーバーを起動する方法です。
この方法の場合、一度デタッチすると、二度と統合版マイクラのコンソールに戻れません。 とりあえず起動してログや疎通を確認したい場合には使えます。
FROM ubuntu:24.04
# 必要なパッケージのインストール
RUN apt-get update && \
apt-get install -y wget unzip libcurl4&& \
mkdir -p /minecraft/server
# 作業ディレクトリの設定
WORKDIR /minecraft
# bedrock-serverをダウンロードして、展開
RUN wget https://www.minecraft.net/bedrockdedicatedserver/bin-linux/bedrock-server-1.21.131.1.zip
RUN unzip bedrock-server* -d server/
# 設定ファイルをコピー
COPY server ./server
# 作業ディレクトリの設定
WORKDIR /minecraft/server
# ポート開放
EXPOSE 19132/udp
CMD ["sh", "-c", "LD_LIBRARY_PATH=. ./bedrock_server"]
serverには各種設定ファイルを配置します。
├─ Dockerfile
├─ server
│ ├─ allowlist.json
│ ├─ permissions.json
│ └─ server.properties
└─ worlds
各種設定ファイルの書き方はwindows版と同様です。
# イメージのビルド
docker image build --tag bedrock-image .
# コンテナを作成してアタッチ
docker container run --name bedrock-server -it --rm -p 19132:19132/udp -v ./worlds:/minecraft/server/worlds bedrock-image
# 終了するときは
stop
一度デタッチしてしまうと、stopコマンドを送る方法がなくなり
docker stop bedrock-server
では10秒後に強制終了されます。
dockerでscreenを使う
マイクラのサーバーを正常終了させるために、screenを使用します。
├─ Dockerfile
├─ server
│ ├─ start.sh
│ ├─ allowlist.json
│ ├─ permissions.json
│ └─ server.properties
└─ worlds
FROM ubuntu:24.04
# 必要なパッケージのインストール
RUN apt-get update && \
apt-get install -y wget unzip libcurl4 screen&& \
mkdir -p /minecraft/server
# 作業ディレクトリの設定
WORKDIR /minecraft
# bedrock-serverをダウンロードして、展開
RUN wget https://www.minecraft.net/bedrockdedicatedserver/bin-linux/bedrock-server-1.21.131.1.zip
RUN unzip bedrock-server* -d server/
# 設定ファイルをコピー
COPY server ./server
RUN chmod +x /minecraft/server/start.sh
# 作業ディレクトリの設定
WORKDIR /minecraft/server
# ポート開放
EXPOSE 19132/udp
ENTRYPOINT ["./start.sh"]
パッケージのインストールにscreenを追加しました。また、開始用のスクリプトを追加しています。
SIGTERMを受け取ってマイクラのサーバーにstopを送信、正常終了を待って終了します。
#!/bin/sh
# SIGTERM を受け取ったら Bedrock に stop を送る
trap '
echo "Stopping Bedrock..."
screen -S bedrock -p 0 -X stuff "say サーバーをシャットダウンします。\n"
sleep 5
screen -S bedrock -p 0 -X stuff "stop\n"
' TERM
# screen 内で Bedrock を起動
screen -DmS bedrock sh -c '
LD_LIBRARY_PATH=. ./bedrock_server
' &
# PID を指定
SCREEN_PID=7
# 終了を待つ
wait $SCREEN_PID
ワールドに接続しているプレイヤーに対して、メッセージを表示して5秒後に終了します。
PIDをハードコートしてしまっているので適当に調整してください。
# イメージのビルド
docker image build --tag bedrock-image .
# コンテナを作成してデタッチ
docker container run --name bedrock-server -d --rm -p 19132:19132/udp -v ./worlds:/minecraft/server/worlds bedrock-image
# screenに直接アタッチ
docker exec -it bedrock-server screen -r
# 終了するときは
docker stop bedrock-server
docker composeを使う場合は、次のようになります。
services:
bedrock:
container_name: bedrock-server
build: .
ports:
- "19132:19132/udp"
volumes:
- ./worlds:/minecraft/server/worlds
# 起動
docker compose up -d
# 終了
docker compose down
接続確認
wslが動作しているwindows側の統合版マイクラからサーバーに接続します。
wslのIPアドレスを確認します。windows側のターミナルで、次のコマンドを実行します。
wsl hostname -I
IPアドレスが3種表示されるので、1つ目のアドレスをマイクラに入力して接続します。
なお、別のPCのユーザーを接続させるには、windows側にwslの通信を接続しないといけません。統合版マイクラはUDPという通信プロトコルが用いられているため、TCPのように簡単には公開できません。設定方法はこちらの記事を参照してください。
まとめ
windowsのwsl上のdockerに統合版マイクラのサーバーコンテナを構築しました。linuxのサーバー構築練習や、アドオンのデバッグ環境としては使えそうです。
本格的にマルチプレイサーバーにするなら、linuxのサーバーを利用することをオススメします。
