DockerでSpigotサーバーを立てる

8/30 spigotのダウンロード部分について追記

8/31 hostとのディレクトリ共有・デタッチについて追記

背景

久しぶりにプラグインを書いてテストをするたびにSpigotサーバーをセットアップするのはそろそろバカらしい。

やる

やります

準備

Dockerは頑張ってインストールして下さい。

作成

以下が最小構成のDockerfileになります。

FROM ubuntu:16.04

RUN apt-get update && apt-get -y upgrade && apt-get -y install openjdk-8-jdk wget git
RUN mkdir spigot
WORKDIR /spigot
RUN wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
RUN java -jar BuildTools.jar
RUN echo 'eula=True' > eula.txt
CMD ll | grep spigot | grep jar | awk '{print $9;}' | xargs java -Xms512m -Xmx1024m -jar

ちゃんと調べてないけど、Spigotのライセンスの関係でDockerイメージの配布はできない気がします。多分。

$ docker build -t 'spigot/ubuntu:16.04' .

DockerfileからDockerイメージを作成します。JDKを入れるのに結構時間がかかります。いつの間にかSpigotがJarを配布してくれるようになっていたのでJREのみで問題ないかもしれませんね。今度試すかもしれません。 DMCA的にグレーっぽかったので公式のBuildToolsからビルドするように修正しました。それによってgitも必要になりました。

$ docker run -v [host dir path]:/spigot/plugins --name spigot -p 25565:25565 -i -t spigot/ubuntu:16.04

Dockerコンテナを作成します。

-iオプションは標準入力を使えるようにするオプションでこれがないと操作ができなくなってdocker stopするしかなくなってしまうので気をつけましょう。

[08:37:36 INFO]: Done (10.348s)! For help, type "help" or "?"

コンテナの作成ができました。ログインができるか確認してみましょう。

-vオプションでホストとのディレクトリ共有が出来ます-v [host dir path]:[guest dir path]としましょう。ホスト側をIDEAやEclipseの出力ディレクトリにしておくととても楽。

-p 25565:25565でコンテナの25565ポートをホストの25565ポートにフォワーディングしてるので、ホストからlocalhost:25565にむけてアクセスができると思います。

使い方もろもろ

Dockerコンテナの確認

docker ps -a

-aはallです

Dockerコンテナの停止

docker stop [Container Name or ID]

Dockerコンテナの起動

docker start [Container Name or ID]

-aiオプションで起動と同時にアタッチができます。

Dockerコンテナの削除

docker rm [Container Name or ID]

Dockerイメージの確認

docker images

Dockerイメージの削除

docker rmi [Image ID]

所感

今のところ、コンテナからデタッチできなくて困っています・・・

screenを使うという手を思いついたのですが結局デタッチできない気がします。試してはいません。

docker attach--detach-keysというオプションがあったので色々試してみましたが、何をおしてもサーバーコンソールの標準入力に吸い込まれました。

再度試してみたら普通にデタッチできました。docker attach [containter name]で再度アタッチ出来ます。

まとめ

そっこうでSpigotサーバーが立って楽