AWSのEC2上にDockerを使用してminecraftサーバを簡単に建てる

(注)AWSは変化のスピードが速いサービスです。本記事の内容を参照する際は、最新の動向も併せて確認して下さい。

最近はDockerを使用してとても簡単にサービスを起動できるようになりました。
Dockerイメージは非公式なものも含めると膨大な種類のものが公開されているため、ゲーム用のサーバも数手間で建てることができます。

便利な活用方法の一つとして、AWSのコンピューティングサービスの一つであるEC2の上にDockerを使用してminecraftサーバを建ててみます。
minecraftサーバのDockerイメージも複数公開されており、かなり高機能なものもあります。
今回はspigotやForge等様々なサーバソフトに対応しているitzg/minecraft-serverを使用してみます。

①EC2のサービスを選択

②セキュリティグループを追加してポート番号25565と22を開けておきます。

③EC2インスタンスを作成する。ここで書いてないステップはデフォルトのままで良いです。
③-1 ステップ2ではt2.medium(=メモリ4GB)程度を選びます。micro(=メモリ1GB)ではサーバ起動できませんでした。
ちなみに、料金は2018年11月6日現在0.0608USD/時間です。遊び終わった後にきちんと落とせばそれほど高くはないと思います。

③-2 ステップ3でユーザデータの欄に以下のスクリプトを入力します。インスタンス作成時に自動実行されるので、起動完了後にすぐに接続可能になります。

ここで、docker runのオプションでTYPEを変更すれば他のサーバタイプに変更できます。
また、VERSIONの部分を変更することで任意のバージョンにできます。
詳しくはdocker hubの説明ページを参照下さい。

③-3 ステップ6で、手順②で作成しておいたセキュリティグループを設定する。下記画面キャプチャでは操作ミスのため2つ付けていますが、一つのセキュリティグループで22と25565を開放していればそれでOKです。defaultを選べば全開放のようですが、セキュリティとしては止めておいた方が無難です。

④EC2のインスタンス一覧で状態がrunningステータスが2/2チェックに成功になるまで待ちます。なったら、インスタンスを選択してパブリックDNSをコピーします。

これで準備完了です。minecraftクライアントからサーバを追加してみます。
サーバーアドレスには先ほどコピーしておいたパブリックDNSを入力します。サーバー名は何でもよいです。

無事接続できました。

しかし、残念なことにEC2を停止、再起動するとパブリックDNSが変更されてしまうため、一緒にプレイする友達にはいちいちDNSを教えなければいけません。
これを回避するためにはElasticIPを常に取得して、インスタンスに紐付ける(有料)か、DDNSサービス等でDNS登録して、起動の度に新しいIPアドレスを決まったホスト名に紐付ける必要があります(無料で可能)。DDNSサービスであるno-ipを使用してIPアドレスとホスト名の紐付けを自動更新する手順は以前紹介していますので、これを使えば自動更新が可能です。no-ipの場合無料ユーザは月に一回手動認証しなければいけませんが。
また、停止し忘れで料金が膨れあがったり、そもそもいちいちssh接続して起動するのも面倒という人もいると思います。次回以降辺りの対策を検討していこうと思います。

余談ですが、DockerfileだけでEC2を始め各サービスを全部管理してくれるElastic Beanstalkというサービスもあります。今回のケースで使えると思ったのですが、こちらはWebアプリのみに対応しているようで、Dockerで使用する単一のポートをホストの80ポートに転送してしまうため、web以外の複数ポートを使用するゲームサーバ等には使えなさそうです。minecraftは25565だけなので、もしかしたら使えたかもしれませんが。

(2018/11/5追記)
Dockerコンテナの設定でインスタンス再起動時にDockerコンテナを簡単に自動起動できたので、ユーザデータのスクリプトに追記しました。(–restart=always)
既にコンテナ作成済みの場合は、以下のコマンドで変更できます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする