こんにちは
溶岩の運用ミスで自宅を全焼させてしまった武田です。
前回に引き続きminecraftをやってきたいと思います。
やりたい事
- minecraftサーバの起動/停止
- 設定調整
- バックアップ
- 自動起動
- Mod導入(ComputerCraft)+それで遊ぶ
※動作テストは前回作ったCentOS7の環境でやってきます。OSによっては操作異なるかもしれません。
Dockerで動かしてるminecraftサーバの起動/停止
コンテナ名 or CONTAINER IDの取得してコンテナの操作を行います。
[vagrant@localhost ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6752579cf325 k2wanko/minecraft "java -jar minecraft 46 hours ago Up 35 minutes 25575/tcp, 0.0.0.0:25565->25565/tcp minecraft
この場合は [ minecraft ]がコンテナ名 [ 6752579cf325 ]がCONTAINER IDとなります。
※停止状態コンテナを探す場合は -a オプションを追加してください。
※前回の初期設定時にコンテナ名 [ minecraft ]を設定しましたdocker run --name minecraft -i -p 25565:25565 -e "EULA=true" k2wanko/minecraft
の部分です。ちなみにnameを未指定にした場合は自動で適当な名前を付けてくれるので安心
Dockerコンテナの起動
docker start minecraft
これで起動。自動的にminecraftサーバも動作します。
Dockerコンテナの停止
docker stop minecraft
minecraft サーバコンソール
起動中のコンテナに接続してサーバコンソールも呼び出せます。
これで管理者としてアイテムを人に渡したりモードかえたりゲームモード変えてみたりなんだってできますね。
docker attach minecraft
[08:09:52] [Server thread/INFO]: Unknown command. Try /help for a list of commands
/help
[08:09:56] [Server thread/INFO]: --- Showing help page 1 of 7 (/help <page>) ---
[08:09:56] [Server thread/INFO]: /achievement give <stat_name> [player]
[08:09:56] [Server thread/INFO]: /ban <name> [reason ...]
[08:09:56] [Server thread/INFO]: /ban-ip <address|name> [reason ...]
[08:09:56] [Server thread/INFO]: /banlist [ips|players]
[08:09:56] [Server thread/INFO]: /clear <player> [item] [data]
[08:09:56] [Server thread/INFO]: /debug <start|stop>
[08:09:56] [Server thread/INFO]: /defaultgamemode <mode>
※動作確認として/helpコマンドを叩いてます。
minecraftサーバ設定変更(server.properties)
# 以下コマンドでコンテナの中の環境に入ります。
docker exec -it minecraft bash
# 設定を変更、サーバ名を[ADJUST Minecraft Server]にしましょう。
# ※vi使えれば簡単だったんですがないようなのでechoコマンドで代用
echo -e "#Minecraft server properties\n\
#Thu Jul 02 08:48:00 UTC 2015\n\
generator-settings=\n\
op-permission-level=4\n\
allow-nether=true\n\
level-name=world\n\
enable-query=false\n\
allow-flight=false\n\
announce-player-achievements=true\n\
server-port=25565\n\
level-type=DEFAULT\n\
enable-rcon=false\n\
force-gamemode=false\n\
level-seed=\n\
server-ip=\n\
max-build-height=256\n\
spawn-npcs=true\n\
white-list=false\n\
spawn-animals=true\n\
hardcore=false\n\
snooper-enabled=true\n\
online-mode=true\n\
resource-pack=\n\
pvp=true\n\
difficulty=1\n\
enable-command-block=false\n\
gamemode=0\n\
player-idle-timeout=0\n\
max-players=20\n\
spawn-monsters=true\n\
generate-structures=true\n\
view-distance=10\n\
motd=ADJUST Minecraft Server" > server.properties
# コンテナから出る
exit
# コンテナを再起動してconfigを反映
docker restart minecraft
minecraftサーバのバックアップ(Worldディレクトリ)
万が一に備えてホストサーバの方にもバックアップしておきたいところですね。
一生懸命作った建造物を間違って壊しちゃうかも知れませんからね。
バックアップ
※ホストサーバで実施
docker cp minecraft:/data/world .
これでホストサーバにワールドデータがコピーされます。
リストア
※ホストサーバで実施
# バックアップファイルの展開
cd /home/vagrant/backup/world && tar cf - ./ | docker exec -i 6752579cf325 tar x -C /data/world/
# 再起動して反映
docker restart minecraft
※cd [バックアップ元] && tar cf – ./ | docker exec -i [Container ID] tar x -C [バックアップ先]
これでリストア完了です。
コンテナの自動起動
何らかの理由でホストサーバの再起動が必要な場合などがあるかと思います。
そういった時にコンテナも自動的に立ち上がって欲しいところですね。
※自動起動設定は十分にご注意ください。
sudo vi /etc/systemd/system/docker1.service
[Unit]
Description=docker1
After=docker.service
Requires=docker.service
[Service]
ExecStart=/usr/bin/docker start minecraft
[Install]
WantedBy=multi-user.target
sudo systemctl enable docker1
ln -s '/etc/systemd/system/docker1.service' '/etc/systemd/system/multi-user.target.wants/docker1.service'
# 一覧確認
ls -l /etc/systemd/system/multi-user.target.wants/docker*
これで問題がなければホストサーバを再起動しても自動的にコンテナも起動するかと思います。
mod導入
minecraftといえばmodいれなきゃ始まらないですよね。
幸せな世界を作っていきましょう!
# コンテナの中の環境に入ります。
docker exec -it minecraft bash
# modsを導入したのいので[mods]ディレクトリへ
cd mods
# modsをダウンロード
wget http://addons-origin.cursecdn.com/files/2228/723/ComputerCraft1.73.jar
※導入modに合わせてください
# コンテナから出る
exit
# コンテナを再起動してmodを反映
docker restart minecraft
これでサーバにmodが導入されたかと思います。
※クライアントにもmod入れるの忘れずに!
動作確認
今回はこのmodは[computercraft]を入れてみます。
これはゲームの中でもプログラムが触れるという技術者大喜びのmodです。
言語はluaとなっております。
ロボットを動かす
これだけだとわざわざminecraftでやる意味も無いのでこのmodで動かせるロボット(タートル)で遊んでみましょう!
ちょっと荒々しい奴がいいですね。
今回はランダムに移動を繰り返しながらウロウロしながらTNT爆薬を投下しまくるヤツにしましょう。
タートルを設置して、燃料補給して、TNT爆薬をイベントリの1番目に設置
computer craftランダム爆撃プログラム
---------- function ----------
function go_up()
for i = 1, 20 do
turtle.up()
end
end
function go_ground()
while turtle.detectDown() == false do
turtle.down()
end
end
function random_turn()
turn = random_number(1,4)
if r == 4 then
return
end
for i = 1, turn do
turtle.turnLeft()
end
end
function random_number(min, max)
return math.random(1,max)
end
---------- main ----------
turtle.select(1)
go_up()
while turtle.getItemCount(1) ~= 0 do
random_turn()
forward_count = random_number(3,6)
for n=1,forward_count
do
turtle.forward()
end
turtle.placeDown()
redstone.setOutput('bottom',true)
end
go_ground()
※ 実験時は場所に注意しましょう。私は家を破壊しました。同僚が気づく前にリストアしないと。
※ linux上からmod上のプログラムを記述することができます。modのエディタは貧弱すぎる。。。
さてさて、では実行してみます
本当に動きましたね、カワイイやつです。
タートル君を何台か動かした結果こんな感じなりました。
かなり激しい結果ですね。
このmod真面目にやればかなり強力なことができるみたいです。
木の伐採や採掘、農場収穫、黒曜石作成なども自動化して怠惰なる世界が構築できます、素晴らしい!
minecraftの世界で楽をしたい方へオススメします!
参考資料
- WEB+DB PRESS vol86 Docker実戦投入
— http://gihyo.jp/magazine/wdpress/archive/2015/vol86 - DockerでMinecraftServerを建てる
— http://qiita.com/koki_cheese/items/873431fac1520e2a912f - minecraft 設定 (server.properties)
— http://www26.atwiki.jp/minecraft/pages/1074.html - Minecraftとタートルと僕
— http://hevohevo.hatenablog.com/ - docker execコマンドでHostからGuestへのファイル転送をする
— http://qiita.com/Marcy/items/8a1ca41fd4e9e841816b#%E5%AE%9F%E9%9A%9B%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%BE%8B/ - 再起動後もコンテナを自動起動する
— http://qiita.com/tukiyo3/items/928d1902db6372e491c2
コメントを残す