こんにちは

三度の飯よりPCゲーム好き。
minecraftはどうせ溶岩で死ぬんだからダイヤピッケルだけ持っていけば十分だろと思ってる武田です。

やりたい事

今ホットなdockerを使ってminecraftサーバを作れるようにしよう!

前提条件

  • Linuxサーバを想定
  • sudoが使用可能
  • minecraftサーバはModでも遊びたいのでforgeを導入する

動作テストしたOS

サーバ構築

まずminecraftサーバにするための環境構築を進めていきます。
すでに導入済みや不要と思われる箇所があったら読み飛ばしてください。

yum/apt更新

[CentOS 7]
sudo yum update

[Ubuntu Trusty]
不要

[Debian]
# リポジトリを追加
sudo vi  /etc/apt/sources.list
deb http://ftp.jp.debian.org/debian/ sid main
deb-src http://ftp.jp.debian.org/debian/ sid main
deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main
deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
sudo apt-get update

古い環境だとDockerが動かないこと多いようです。update推奨

JDKインストール

[CentOS 7]
sudo yum install -y java-1.7.0-openjdk.x86_64
sudo yum install -y java-1.7.0-openjdk-devel.x86_64

[Ubuntu Trusty]
不要

[Debian]
apt-get install oracle-java7-installer

firewallの設定

firewallの調整は十分にご注意ください。

[CentOS7]
# ポートの追加
sudo firewall-cmd --zone=public  --permanent --add-port=25565/tcp

[Ubuntu]
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow 25565/tcp

[Debian]
sudo apt-get -y install ufw
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow 25565/tcp

minecraftサーバ標準ポートの25565と22 TCPを許可
※ポートは環境によって読み替えてください。
※不正アクセスを避けるためsshなどはアクセス元IPの絞込などをお勧めします。

dockerインストール

[CentOS7]
curl -O -sSL https://get.docker.com/rpm/1.7.0/centos-7/RPMS/x86_64/docker-engine-1.7.0-1.el7.centos.x86_64.rpm
sudo yum localinstall --nogpgcheck docker-engine-1.7.0-1.el7.centos.x86_64.rpm

[Ubuntu]
wget -qO- https://get.docker.com/ | sh

[Debian]
sudo apt-get install docker.io

64bit用のものを導入
以下URLから環境にあわせてパッケージは選んでください。
https://docs.docker.com/installation/

一般ユーザにてdockerを動かすためグループを調整

[CentOS7]
sudo groupadd docker
sudo usermod -g docker vagrant
sudo service docker restart

[Ubuntu, Debian]
sudo usermod -aG docker vagrant

※ユーザ vagrant にてdockerを動かせるように調整。ユーザー名は適宜読み替えてください。
※ログインしなおしてください。

dockerの起動

#  dockerの起動
sudo service docker start
Starting docker (via systemctl):                           [  OK  ]

# dockerデーモンの自動起動設定

[CentOS7]
sudo systemctl enable docker

[Ubuntu, Debian]
不要

試しに hello-worldしてみる

[vagrant@localhost ~]$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally

latest: Pulling from hello-world
a8219747be10: Pull complete
91c95931e552: Already exists
hello-world:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:aa03e5d0d5553b4c3473e89c8619cf79df368babd18681cf5daeb82aab55838d
Status: Downloaded newer image for hello-world:latest
Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (Assuming it was not already locally available.)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

For more examples and ideas, visit:
 http://docs.docker.com/userguide/

minecraft

いよいよminecraftの入っていきます。

minecraftのインストール

dockerでminecraftサーバーの構築をした方がすでにいるようなのでありがたく使わせていただきましょう。
http://qiita.com/koki_cheese/items/873431fac1520e2a912f

# 任意のディレクトリ作成、移動
mkdir minecraft_forge
cd minecraft_forge

# Dockerfile作成
echo "FROM k2wanko/minecraft:forge-1.7.10" > Dockerfile

# ビルド
docker build -t k2wanko/minecraft .
※5分くらい待たされるかも。。。

# 初回起動
docker run --name minecraft -i -p 25565:25565 -e "EULA=true" k2wanko/minecraft
※ポートは環境によって読み替えてください

以下のようにminecraftのコンソールが表示されたら成功!
[09:27:38] [Server thread/INFO]: Preparing spawn area: 96%
[09:27:39] [Server thread/INFO]: Done (10.041s)! For help, type "help" or "?"
[09:27:39] [Server thread/INFO]: Unknown command. Try /help for a list of commands

動作確認

実際にminecraftのクライアントからアクセスしてみましょう。
※クライアントにもMinecraft Forgeを導入する必要あり。私はちょっとハマりました。。。
profileをforgeにしてplay
title -> マルチプレイ -> ダイレクト接続 -> サーバアドレスを今回のサーバを指定してアクセス

mi
いかがでしょうか?
問題なければクライアントからログインできると思います!

隣のプログラマがmodを導入して食物、資源の生産を自動化、寝ていても生活が潤っていくという極楽浄土を築いたらしいので真似をするべくmod導入やdocker経由でminecraftサーバの操作、設定変更などをまとめていく予定です。