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サーバーが立って楽