はじめに
DockerfileをつくってからMinecraft Serverを起動するまでの覚え書きです。
実際にDockerを扱うための体系的な知識はここにありません。すみません。
だれでもご利用いただけるように成果物も載せてるのでよければ見てください。
記事内ではユーザ名をkdrvk、イメージ名をminecraft-server、タグ名をlatestとしています。
Dockerfileを作成
# 空のDockerfileを作成
$ touch Dockerfile
# Dockerfileを編集
$ vi Dockerfile
Dockerfile
# ディストリビューションを指定する
FROM ubuntu:22.04
# パッケージを更新してOpenJDKをインストール
# minecraftというアカウントを作成
RUN apt -y update && apt -y install openjdk-17-jre
RUN useradd -m -s /bin/bash minecraft
# ディレクトリを/home/minecraftに移動
WORKDIR /home/minecraft
# 公式サイトよりserver.jarをダウンロード
# server.jarの所有者とパーミッションを変更
ADD https://piston-data.mojang.com/v1/objects/f69c284232d7c7580bd89a5a4931c3581eae1378/server.jar .
RUN chown minecraft:minecraft server.jar && chmod 644 server.jar
# ユーザーをminecraftに変更
USER minecraft
# server.jarを実行しeula.txtを生成
# eula.txt内のfalseをtrueに書き換える
RUN java -Xmx1024M -Xms1024M -jar server.jar nogui
RUN sed -i "s/false/true/" eula.txt
# コンテナを展開するときにserver.jarを実行する
CMD java -Xmx1024M -Xms1024M -jar server.jar nogui
Dockerfileを作成して上記のテキストを書き込みます。
イメージをビルド
$ docker build -t <イメージ名>:<タグ名(オプション)> .
$ docker build -t kdrvk/minecraft-server:latest .
カレントディレクトリのDockerfileからイメージをビルドします。
Successfully built 2d4458401b49
Successfully tagged kdrvk/minecraft-server:latest
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
kdrvk/minecraft-server latest 2d4458401b49 4 minutes ago 791MB
ubuntu 22.04 2dc39ba059dc 2 weeks ago 77.8MB
イメージがビルドされました。
Minecraft Serverを起動
$ docker run <イメージ名>:<タグ名(オプション)>
$ docker run -it -p 25565:25565 --name minecraft kdrvk/minecraft-server:latest
ビルドしたイメージからコンテナを起動します。
-it
はコンテナの中に入って標準入力をするのに必要です。
-p
で<ホスト側のポート>:<コンテナ側のポート>を指定しています。
--name
で名前をつけておくとコンテナを削除するときとかに便利です。
[14:33:41] [Server thread/INFO]: Done (91.733s)! For help, type "help"
成果物
今回つくったイメージです。
おまけ(簡単な操作方法)
あらかじめEULAに同意してポート25565を開放してください。
$ docker run -it -p 25565:25565 --name minecraft kdrvk/minecraft-server:latest
Minecraft Serverを起動
stop
Minecraft Serverを停止
$ docker start minecraft
Minecraft Serverを再開
$ docker attach minecraft
コンソールにアタッチ
$ docker exec -it minecraft bash
コンテナ内を操作したり設定を変えたり