DockerでMinecraftサーバーを構築する
最近、MacでMinecraftサーバーを立てたくなりました。
サーバーのディレクトリで./run.bashを実行するだけなら簡単ですが、ターミナルとJavaプロセスをずっとバックグラウンドで動かしておくのは、さすがにあまりスマートではありません。Screenを使えばターミナルは隠せますが、Javaサービス自体の状態までは管理してくれません。
Dockerならこういうサービスも簡単にデプロイできるので、Minecraftサーバーにも使えないかと思って調べてみました。
そして運よく、itzg/minecraft-serverがありました!
概要
GitHubはこちら:
ドキュメントには、次のように紹介されています。
このDockerイメージは、起動時にMinecraft Serverの最新安定版を自動でダウンロードします。特定のバージョンや最新スナップショットを実行したり、アップグレードしたりすることもできます。詳しくはVersionsのセクションを参照してください。
最新の安定版を使うだけなら、次のコマンドを実行します。
docker run -d -it -p 25565:25565 -e EULA=TRUE itzg/minecraft-serverこの場合、標準のサーバーポート
25565がホスト側に公開されます。
Docker Compose
上のコマンドで直接イメージを起動するより、ほかの一般的なプロジェクトと同じくDocker Composeを使うほうがおすすめです。
公式の手順は次のとおりです。
新しいディレクトリを作成する
下の内容を
compose.yamlというファイル名で保存するそのディレクトリで
docker compose up -dを実行する完了!クライアントからホスト名またはIPアドレスとポート
25565を指定して接続する
services: mc: image: itzg/minecraft-server:latest pull_policy: daily tty: true stdin_open: true ports: - "25565:25565" environment: EULA: "TRUE" volumes: # attach the relative directory 'data' to the container's /data path - ./data:/dataComposeファイルを変更した後は、もう一度
docker compose up -dを実行すれば反映されます。
docker compose logs -fでログを追い、docker compose psで状態を確認し、docker compose stopでコンテナを停止できます。
Dockerを使い始めたばかりだと、volumesが少し分かりにくいかもしれません。実際はそれほど複雑ではなく、ディレクトリ構成は例えば次のようになります。
Your-MC-Server-Folder├── data│ ├── config│ ├── eula.txt│ ├── kubejs│ ├── mods│ ├── server.properties│ └── world└── docker-compose.ymlYour-MC-Server-Folderの中にあるdataが、Modやワールドデータを置く場所です。先にDocker Composeを実行してコンテナ側でデータを生成してもいいですし、既存のデータをdataへ移動しても構いません。
LoaderとMod
compose.yamlの変数を変更するだけで、Mod入りのサーバーも起動できます。以下は自分が使っている設定です。SetupMCを使って設定を生成することもできます。
services: mc: image: itzg/minecraft-server:latest tty: true stdin_open: true ports: - "25565:25565" - "24454:24454/udp" environment: EULA: "TRUE" TYPE: "NEOFORGE" VERSION: "1.21.1" INIT_MEMORY: "4G" MAX_MEMORY: "12G" MOTD: "A Minecraft Server" TZ: "Asia/Tokyo" DIFFICULTY: "hard" volumes: - "./data:/data"ちなみに、24454/udpはMod「Simple Voice Chat」のために開けています。この場合、Simple Voice Chatの設定でもIPを0.0.0.0に変更する必要があります。
それでは……
楽しんで!