こんにちは。今回はMinecraft Bedrockサーバー(以下、Bedrockサーバー)を動かすコンテナイメージを作成します。
長くなりそうなので、記事は3回程に分けて投稿する予定です。
はじめに
Minecraft(統合版)はPC、Nintendo Switch、iOS、Androidなどのプラットフォームで展開されている有名なサンドボックスゲームです。
また、クロスプレイにも対応しておりRealmsやサーバーを利用することで、離れた場所にいるプレイヤーと一緒に遊べます。
本記事ではMinecraft公式のBedrockサーバーをコンテナで動かし、コンテナやDockerfileの作り方について学んでいきます。
想定読者
- Dockerは使っているけれど、Dockerfileは何となく書いている方
- Minecraftをみんなで遊びたい方
前提
なぜコンテナ化するのか
Bedrockサーバーはステートレスではないため、一般的なWebサービスと比べるとコンテナ化のメリットは少ないでしょう。
ただし、アーキテクチャの制約や永続ボリュームの利用、設定ファイルの管理など、コンテナ化に際して考慮すべき点が多い分、それらを学ぶ良い機会にもなります。
さらに、近年はARMを採用するコンピュータが増えているため、Dockerを利用してx86_64のバイナリを動作させられる環境を用意しておくことで、環境構築の手間を大幅に削減できるでしょう。
(もっとも、実際のところは趣味が理由で、理屈は後付けです…)
作業用コンテナを使った動作確認
今回は作業用コンテナを使用して、Bedrockサーバーが起動し、Minecraftクライアント(アプリ)から接続できるところまで確認します。
作業用コンテナの起動
Bedrockサーバーはx86_64のバイナリイメージしか配布されていないため、作業用に同アーキテクチャのコンテナを立ち上げます。
もし、x86_64のマシンを使っている場合でも、これから作成するDockerfileの挙動を把握するために作業用コンテナを立ち上げましょう。
また、コンテナとMinecraftクライアントで通信ができるように、あらかじめUDPの19132番ポートを開放します。
Bedrockサーバーは公式でUbuntuをサポートしていますが、今回はDebianベースのコンテナイメージを選択しました。理由は次回説明します。
$ docker container run --platform=linux/amd64 --rm -p 19132:19132/udp -it debian:bookworm-slim /bin/bash root@8de161ca6300:/#
作業用コンテナのセットアップ
Bedrockサーバーを起動するためにいくつかのパッケージが必要です。以下のコマンドで必要なパッケージをインストールします。
パッケージのインストールはDockerfile作成を考慮し、apt
ではなくapt-get
を利用し、必要最小限のパッケージのみ導入します。
root@8de161ca6300:/# apt-get update && apt-get install -y --no-install-recommends ca-certificates curl unzip
また、作業用ディレクトリを作成し、以降の作業はそのディレクトリ内でおこないます。
root@8de161ca6300:/# mkdir work root@8de161ca6300:/# cd work/ root@8de161ca6300:/work#
サーバーのダウンロード
Minecraftの公式サーバーをダウンロードします。ブラウザで以下のサイトを開きます。
今回は「UBUNTU (LINUX) 用 MINECRAFT 専用サーバーのソフトウェア」を利用しますが、作業用コンテナ内でファイルを利用したいためダウンロードリンクを確認します。
リンクを確認したら、コンテナ内でcurl
コマンドを利用してアクセスするため、User-Agentを指定してダウンロードします。User-Agentを指定しないと、ダウンロードが失敗します。
root@8de161ca6300:/work# curl -s \ -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36' \ -O 'https://www.minecraft.net/bedrockdedicatedserver/bin-linux/bedrock-server-1.21.51.02.zip' root@8de161ca6300:/work#
これで、Bedrockサーバーがダウンロードされました。
アーカイブの展開と確認
ダウンロードしたファイルをunzip
コマンドで展開し、ls
コマンドで中身を確認します。
root@8de161ca6300:/work# unzip -q bedrock-server-1.21.51.02.zip -d bedrock-server root@8de161ca6300:/work# cd bedrock-server root@8de161ca6300:/work/bedrock-server# ls -l total 165712 -rw-rw-r-- 1 root root 3 Dec 10 17:35 allowlist.json -rwxrwxr-x 1 root root 169604952 Dec 10 17:47 bedrock_server -rw-rw-r-- 1 root root 28041 Dec 10 17:35 bedrock_server_how_to.html drwxrwxr-x 55 root root 4096 Dec 10 17:47 behavior_packs drwxrwxr-x 3 root root 4096 Dec 10 17:47 config drwxrwxr-x 9 root root 4096 Dec 10 17:47 definitions -rw-rw-r-- 1 root root 3 Dec 10 17:35 permissions.json -rw-rw-r-- 1 root root 8548 Dec 10 17:42 profanity_filter.wlist -rw-rw-r-- 1 root root 398 Dec 10 17:35 release-notes.txt drwxrwxr-x 5 root root 4096 Dec 10 17:47 resource_packs -rw-rw-r-- 1 root root 10007 Dec 10 17:35 server.properties root@8de161ca6300:/work/bedrock-server#
bedrock_server
というサーバー本体のバイナリが確認できたので、起動に必要なライブラリが揃っているかldd
コマンドで確認します。
root@8de161ca6300:/work/bedrock-server# ldd bedrock_server libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ffff54fe000) libcurl.so.4 => /lib/x86_64-linux-gnu/libcurl.so.4 (0x00007ffff544f000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ffff5370000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ffff5350000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ffff534b000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffff516a000) /lib64/ld-linux-x86-64.so.2 (0x00007ffffffcc000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ffff5163000) libnghttp2.so.14 => /lib/x86_64-linux-gnu/libnghttp2.so.14 (0x00007ffff5134000) libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0 (0x00007ffff5103000) librtmp.so.1 => /lib/x86_64-linux-gnu/librtmp.so.1 (0x00007ffff50e4000) libssh2.so.1 => /lib/x86_64-linux-gnu/libssh2.so.1 (0x00007ffff50a3000) libpsl.so.5 => /lib/x86_64-linux-gnu/libpsl.so.5 (0x00007ffff508f000) libssl.so.3 => /lib/x86_64-linux-gnu/libssl.so.3 (0x00007ffff4fe4000) libcrypto.so.3 => /lib/x86_64-linux-gnu/libcrypto.so.3 (0x00007ffff4b5e000) libgssapi_krb5.so.2 => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007ffff4b0b000) libldap-2.5.so.0 => /lib/x86_64-linux-gnu/libldap-2.5.so.0 (0x00007ffff4aac000) liblber-2.5.so.0 => /lib/x86_64-linux-gnu/liblber-2.5.so.0 (0x00007ffff4a9c000) libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007ffff49e0000) libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007ffff49d1000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ffff49b2000) libunistring.so.2 => /lib/x86_64-linux-gnu/libunistring.so.2 (0x00007ffff47fc000) libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007ffff45e0000) libhogweed.so.6 => /lib/x86_64-linux-gnu/libhogweed.so.6 (0x00007ffff4597000) libnettle.so.8 => /lib/x86_64-linux-gnu/libnettle.so.8 (0x00007ffff4547000) libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007ffff44c6000) libkrb5.so.3 => /lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007ffff43ec000) libk5crypto.so.3 => /lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007ffff43bf000) libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007ffff43b9000) libkrb5support.so.0 => /lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007ffff43a9000) libsasl2.so.2 => /lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007ffff438c000) libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007ffff4369000) libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007ffff4235000) libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007ffff4220000) libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007ffff4217000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007ffff4206000) libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x00007ffff41fa000) root@8de161ca6300:/work/bedrock-server#
必要なライブラリも揃っていることが確認できました。
Bedrockサーバーの起動
コンテナ内でBedrockサーバーが起動できるか試します。
root@8de161ca6300:/work/bedrock-server# ./bedrock_server NO LOG FILE! - setting up server logging... [2024-12-22 02:56:52:683 INFO] Starting Server [2024-12-22 02:56:52:683 INFO] Version: 1.21.51.02 [2024-12-22 02:56:52:683 INFO] Session ID: 8fc0339d-ce9d-420b-84bf-5b0392cb06c1 [2024-12-22 02:56:52:683 INFO] Build ID: 29823500 [2024-12-22 02:56:52:683 INFO] Branch: r/21_u5 [2024-12-22 02:56:52:683 INFO] Commit ID: 15737c809ed75cbc4a361ffa3c5c2df76ff78d42 [2024-12-22 02:56:52:683 INFO] Configuration: Publish [2024-12-22 02:56:52:686 INFO] Level Name: Bedrock level [2024-12-22 02:56:52:689 INFO] No CDN config file found for dedicated server [2024-12-22 02:56:52:690 INFO] Game mode: 0 Survival [2024-12-22 02:56:52:690 INFO] Difficulty: 1 EASY [2024-12-22 02:56:52:697 INFO] Content logging to console is enabled. [2024-12-22 02:56:52:953 INFO] Opening level 'worlds/Bedrock level/db' [2024-12-22 02:56:53:150 INFO] [SERVER] Pack Stack - None [2024-12-22 02:56:54:409 INFO] IPv4 supported, port: 19132: Used for gameplay and LAN discovery [2024-12-22 02:56:54:409 INFO] IPv6 supported, port: 19133: Used for gameplay [2024-12-22 02:56:54:443 INFO] Server started. [2024-12-22 02:56:54:443 INFO] ================ TELEMETRY MESSAGE =================== [2024-12-22 02:56:54:443 INFO] Server Telemetry is currently not enabled. [2024-12-22 02:56:54:443 INFO] Enabling this telemetry helps us improve the game. [2024-12-22 02:56:54:443 INFO] [2024-12-22 02:56:54:443 INFO] To enable this feature, add the line 'emit-server-telemetry=true' [2024-12-22 02:56:54:443 INFO] to the server.properties file in the handheld/src-server directory [2024-12-22 02:56:54:443 INFO] ======================================================
気になるメッセージがいくつかでていますが、サーバーのプロセスは無事に起動しました。
Bedrockサーバーへの接続
MinecraftクライアントからBedrockサーバーへ接続できるか確認します。
動作確認にはiOS版のMinecraftを使用します。アプリを起動し「プレイ」ボタンをタップ後、「フレンド」タブをタップします。
すると「LAN ゲーム」の項目に「Dedicated Server」が表示されます。しばらく待っても表示されない場合は、ファイアウォールやDockerのネットワークを見直しましょう。
次に、表示された「Dedicated Server」をタップしてコンテナに接続します。こちらも上手く接続できました。
接続の確認ができたらゲームを終了します。コンテナ側の標準出力には、以下のようなメッセージが表示されます。
[2024-12-22 03:03:18:985 INFO] Player connected: takenorio, xuid: **************** [2024-12-22 03:03:22:794 INFO] Player Spawned: takenorio xuid: ****************, pfid: **************** [2024-12-22 03:04:12:626 INFO] Player disconnected: takenorio, xuid: ****************, pfid: ****************
Bedrockサーバーを停止し、exit
コマンドでコンテナも終了します。
^C root@8de161ca6300:/work/bedrock-server# exit exit
まとめ
作業用コンテナ上のBedrockサーバーにMinecraftのアプリケーションから接続できることを確認しました。
次回は作業用コンテナの動作確認結果を元にDockerfileを作成します。