目次


Minecraft とIBM Cloud, 第 1 回

Docker 内で Minecraft サーバーを実行する

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: Minecraft とIBM Cloud, 第 1 回

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:Minecraft とIBM Cloud, 第 1 回

このシリーズの続きに乞うご期待。

他のどの Java プログラムよりも桁違いによく使われている Java™ プログラムは何でしょう?ヒント: 2009年にベータ版が初めてリリースされて以来、その販売数は 7,000 万本を数えています。最近、Microsoft はこのプラグラムを作成した会社を 25 億ドルで買収しました。このプログラムの開発エコシステムは、巨大なエコシステムへと発展していて、このプログラムの拡張機能を開発したいという想いで、何十万人もの人々が Java プログラミングを学ぶようになっています。

このチュートリアルのタイトルからおそらく想像がついていることと思いますが、このクイズの答えは、「Minecraft (マインクラフト)」というゲームのプログラムです。驚くべきことに、この何十万人もの開発者の大部分は、子供や 10 代の若者が占めています。Minecraft が市場で驚異的な成功を収めている理由の一部はそのユニークな構造にあります。それは、ユーザーはゲームのクライアント (ゲームのユーザーに見える側) については市販されているものを購入しますが、サーバーについてはユーザーが自由に拡張できるという点です。誰でも独自のゲーム・サーバーを立ち上げられることから、人々がインターネット上で Minecraft 作成者固有のコミュニティーを広げるにつれ、個人の興味や好き嫌いに基づく数千もの異なるオプションが生まれています。

しかしサーバーは、自由にダウンロードして独自のサーバーとして立ち上げられるだけではありません。独自のアドオンを作成してゲームに追加したいという人たちが、サーバーを自由に拡張することができます。このシリーズでは、Minecraft のプラグイン開発を利用する方法を説明し、具体的な開発テクノロジーと開発原則を教示します。

このチュートリアルに従っていくと、プラグインをローカルで作成してテストして、そのままの構成でプラグインを何も変えずにクラウド・サーバー上で実行し、友人たち (つまり、「ベータ版テスター」) がそのプラグインにアクセスして試してみられるようにするのが、いかに容易であるかがわかるはずです。このようにするには、2 つの特定のテクノロジー (Docker および IBM Cloud Containers) を使用します。その過程で、プラグインを作成するために Eclipse をセットアップする方法や、IBM Cloud DevOps Services の Delivery Pipeline サービスを利用する方法、そして git を使用してチーム開発環境を構築する方法についても説明します。

Docker、IBM Cloud、コンテナーの概要

本格的に作業を進める前に、Minecraft と Java に関する知識はお持ちでも、Docker と IBM Cloud についてはよくご存じではない読者のために、上記の前置きについて解説しておきます。この最初のチュートリアルでフォーカスするのは、Docker 内にローカル Minecraft サーバーを構築する方法なので、まずは Docker について紹介します。

Docker については、例えを用いると、おそらく非常によく理解できることと思います。Docker は「コードの運送用コンテナー」と呼ばれることがよくあります。これはどういう意味なのでしょう?運送用コンテナーとは何かを考えてみてください。― 普段目にするコンテナーです ― 運送用コンテナーは、トラックや列車の車両などに積載されている四角い金属製の箱であり、「コンテナー船」と呼ばれる大型船ともなると、一度に何百ものコンテナーを港から港へと輸送します。

運送用コンテナーは、2 つの国の間で物を移動する方法を変えました。例えばスマートフォンの製造業者が、韓国にある工場からカナダのトロントにある電器店の倉庫に数千台のスマートフォンを運ばなければならないとします。昔であれば、電話を箱に梱包し、その箱をトラックからトラックへ、あるいは船から船へと、(輸送経路にある数多くの中継点となる倉庫で) 何度も何度も積み替えて運送したことでしょう。その場合、箱が積み上げられて積み下ろされるたびに、電話が損傷したり、箱を紛失したりする可能性がありました。その上、箱を積み上げたり積み下ろしたりする作業には時間もコストもかかります。現在は、これらの箱は工場で大型のスチール・コンテナーに積み込まれ、そのコンテナーはトラックから船へ、そして船からトラックへとクレーンで移動され、最終的に電器店の倉庫へと運ばれますが、その間にコンテナーが開けられたり、コンテナーから積み下ろされたりすることは基本的にはありません。

このコンテナーと同じ役割をコードに対して果たすのが、Docker です。現在、私たちはどのようにコード (Java など) をビルドして実行するかと言うと、まず、開発環境でコードを開発します。その後、ソース・コードを別のシステムに移して、そのシステムでコードをコンパイルして実行可能システム (WAR ファイルまたは JAR ファイル) へと「ビルド」します。ただし、その実行可能コードを実行するには、多数のインフラストラクチャー (特定の Java ランタイムと、おそらく特定のアプリケーション・サーバー、そして一連のオープンソース JAR ファイル) が必要です。従って、これらすべてのインフラストラクチャーをユニット・テスト・サーバー、システム・テスト・サーバー、さらにはそれぞれの本番サーバーに移して組み立て直す作業を何度も行う必要があります。このそれぞれのステージでは、その「積み替え」ステップで、何かしらの問題が発生する可能性があります。例えば作業の過程で、何かのバージョンを間違って選んだり、何かを忘れたりしてバグが発生すると、そのバグを追跡するのが非常に困難なことがあります。

Docker では、オペレーティング・システムに至るまでの実行システム全体を、単一の軽量なパッケージへとパッケージ化して (このパッケージは当然ながら、「コンテナー」と呼ばれます)、そのコンテナーごと、ある場所から別の場所へと移すことができます。コンテナーを移す過程で、何かが取り残されることも壊れることもありません。

IBM Cloud ではこの仕組みを実現するために、開発者が Docker コンテナーを取得し、ローカル・マシン上でだけでなく、クラウド内でも実行できるようにすることで、他の開発者が Docker コンテナーにアクセスできるようにしています。それを行うための簡単な手段を提供するのが、Kubernetes をベースとする IBM Cloud Container です。

このチュートリアル・シリーズで最初にフォーカスするのは、Docker 内の Minecraft サーバーをローカルで稼働させる方法、そしてその Docker コンテナーを IBM Cloud 内で実行する方法の 2 つです。

Minecraft クライアントを購入してインストールする

前述のように、Minecraft が抜きん出ている点は、クライアントを無数のプレイヤーに販売して、ソース・コードを公開しているところです。これにより、ユーザーがゲームを拡張してマルチユーザー・ゲーム用の Minecraft サーバーを構築できるようになっています。これを行うために採るべき最初のステップは、Minecraft クライアントを購入してインストールすることです。クライアントのインストール方法については、ほとんどのオペレーティング・システムでの手順が Minecraft サイトにあります。

このチュートリアルでは Ubuntu でサーバーを開発して実行しますが、皆さんは、サポートされている任意のオペレーティング・システム上で Minecraft クライアントを実行するのでも構いません。その場合、必要なのは、サーバーの IP アドレスがわかっていること、そしてクライアントがその IP アドレスにアクセスできることだけです。実際、私はネイティブの Mac Minecraft クライアントを購入して、そのクライアントから、デスクトップ上の VMWare 仮想マシン内部で実行されている開発サーバーに接続したことがあります。

Docker をインストールして構成する

次に必要なことは、この一連の手順すべてに従うために必要となる Docker とその他のソフトウェアをダウンロードして構成することです。まずは、Docker から始めましょう。このシリーズでは、Docker をインストールして Ubuntu Linux 16.04.2 LTS 用に構成する方法を紹介します。これ以外のオペレーティング・システムを使用する場合には、該当するプラットフォームを対象とした Docker インストール手順を参照してください。

このチュートリアルで使用するのは Ubuntu 16.04.2 LTS ですが、Docker と (Cloud Foundry および IBM から提供されている) Cloud Foundry ツールをともにサポートしている任意のオペレーティング・システムであれば、どれを使用しても構いません。そのようなオペレーティング・システムには、Windows と Linux の両方が含まれます。Ubuntu を使用することをお勧めしているのは、私の経験上、このような開発を Linux から直接行うには、Ubuntu は比較的簡潔で単純であるという理由からです。Ubuntu 以外のオペレーティング・システムの場合、幸いなことに、その多くが Linux イメージをダウンロードして VMWare 内または VirtualBox 内で作成するのは簡単であることから、そのようにして Linux をベースにすることをお勧めします。またその際 (または、お使いのハードウェアに Ubuntu Linux をインストールするだけの場合)、少なくとも 2 GB の RAM と 2 つのコアを使用するように構成することもお勧めします。この基準を下回ると、後で行う作成作業のときに失敗する可能性があります。

このチュートリアルの例では、VMWare 環境で実行される Ubuntu イメージ内に Docker を構成して実行する方法を紹介します。Virtualbox や他のハイパーバイザーを使用する場合、Ubuntu 外部で発生するタスクの一部は少し異なります。

Ubuntu に Docker をインストールする

  1. Ubuntu のターミナル・ソフトに以下のコマンドを入力して、Docker Community Edition の最新のエディションをインストールします。
    sudo apt-get -y install \
       apt-transport-https \
       ca-certificates \
       curl
  2. 最初のコマンドで、Linux 環境をセットアップし、常に役立つ curl コマンドを含め、必要な更新をいくつか適用します。次のいくつかのコマンドでは、docker.com でホストされる新しいリポジトリーに関する情報を反映させて apt-get インストール済み環境を変更します。これによって、Ubuntu apt-get コマンドから Docker をインストールして更新できるようになります。
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
    sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"
    
    sudo apt-get update
  3. リポジトリーがセットアップされて、Ubuntu システムが最新の状態になったので、以下のコマンドで Docker をダウンロードして Ubuntu にインストールします。
    sudo apt-get -y install docker-ce
  4. Docker インストール済み環境を検証するには、以下のコマンドを実行してみてください。
    sudo docker run hello-world

    Docker インストール済み環境が正常に機能していることを示すメッセージが表示されたら、Docker のインストール作業は完了です。そうでなければ、上記のステップをもう一度始めから実行してください。

IBM Cloud コマンド・ライン・ツールをインストールする

次に必要な作業は、IBM Cloud コマンド・ライン・ツールのインストールです。第 1 回のチュートリアルではこのツールを使用しませんが、第 3 回から使い始めることになるので、Ubuntu イメージをセットアップする現段階でインストールしておくのが得策です。他のプラットフォームを使用している場合は、http://clis.ng.bluemix.net/ui/home.html にアクセスして適切なツールをブラウザーにインストールする必要がありますが、Ubuntu では以下の手順でインストールすることができます。

  1. コマンド・ラインで、以下の行を入力して IBM Cloud コマンド・ライン・ツールをダウンロードします。
    wget "http://public.dhe.ibm.com/cloud/bluemix/cli/bluemix-cli/Bluemix_CLI_0.5.4_amd64.tar.gz" -O Bluemix_CLI.tar.gz
  2. コマンド・ラインで、以下の行を入力して IBM Cloud コマンド・ライン・ツールを抽出します。
    tar -xvf Bluemix_CLI.tar.gz
  3. 次は、IBM Cloud CLI ツールをインストールするためのスクリプトを実行する必要があります。
    cd Bluemix_CLI
    sudo ./install_bluemix_cli
  4. IBM Cloud コマンド・ライン・ツールをインストールした後は、Kubernetes クラスターを起動して管理するために、IBM Cloud Container サービス・プラグインをインストールします。それには、以下のコマンドを実行します。
    bx plugin install container-service -r Bluemix
  5. 最後に、kubectl API をインストールする必要があります。それには、以下のコマンドを実行します。
    curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
    
    sudo chmod +x ./kubectl
    
    sudo mv ./kubectl /usr/local/bin/kubectl
  6. Docker 用と Kubernetes 用 IBM Cloud ツールの両方をダウンロードしてインストールする作業が完了したので (この 2 つを使用して興味深いことを行えるようになりました)、このチュートリアルの残りの部分と第 2 回および第 3 回のチュートリアルで詳しく調べていくサンプル・コードをダウンロードすることができます。サンプル・コードは git に用意されているので、以下のコマンドを使用してダウンロードすることができます。
    git clone  https://github.com/kgb1001001/minecraft-project.git

基本的な Minecraft Dockerfile について

Docker を実行するには、いくつかの方法があります。単純に Docker 内でコンテナーを起動して使い始めてから、実行中のコンテナーに変更を加え、それらの変更を新しいイメージ・ファイルとして保存することもできますが、Docker を使用する理由の 1 つは、手作業による変更で問題が生じるのを避けることなので、この方法では意味がありません。代わりに、Docker でもサポートしている別の手段を利用します。それは、Dockerfile です。Dockerfile とは、イメージを繰り返し作成できるよう一連のコマンドを集めたファイルです。そのため、Dockerfile を実行すれば、どのマシンで実行するかに関わらず、常に同じ結果を得ることができます。Dockerfile はいわば、Docker イメージに含まれる (従って、作成するコンテナーに含まれる) 内容を記述する「運送証券」のようなものだと考えてください。

最初に紹介する Dockerfile は、単に、ローカルの Docker 内で Minecraft サーバーを稼働状態にするのがいかに簡単であるかを明らかにすることを目的としたものです。早速、Dockerfile を調べてみましょう。Dockerfile の内容を表示するには、以下のコマンドを入力します。

cd minecraft-project
cat minecraft/Dockerfile

Dockerfile の内容は、以下のとおりです。これらのコマンドを 1 つずつ見ていきましょう。

# Version 0.0.3
# This Docker file builds a basic minecraft server
# directly from the default minecraft server from Mojang
#
FROM ubuntu:16.04
MAINTAINER Kyle Brown “brownkyl@us.ibm.com”
RUN apt-get update
RUN apt-get install -y default-jdk
RUN apt-get install -y wget
RUN mkdir minecraft
RUN wget -O minecraft/minecraft_server.jar \
https://s3.amazonaws.com/Minecraft.Download/versions/1.12/minecraft_server.1.12.jar
RUN echo "eula=true" > eula.txt
CMD java -Xms512m -Xmx1024m -jar minecraft/minecraft_server.jar nogui
EXPOSE 25565
  • Dockerfile の最初のコマンド (ハッシュタグで始まる参考用のコメントの後に続くコマンド) は、FROM です。これは、この Docker イメージがどのイメージから作成されるのかを示します。Docker の素晴らしい点の 1 つは、開発者が他のイメージを利用して独自のイメージを作成できることです。従って、皆さんが作成したイメージを他の開発者が利用して何らかの方法で拡張したいとしたら、特定の制限内で簡単に拡張することができます。この例で作成する Docker イメージには、Dockerhub リポジトリーにある最新の Ubuntu 16.04 イメージを利用します。
  • MAINTAINER は単に、このファイルを作成して保守する担当者を示します。
  • 次の 3 つは興味深いコマンドです。RUN コマンドは、Linux コマンド・ラインでコマンドを実行する場合とまったく同じようにコマンドを実行します。従ってこの 3 つのコマンドでは、現行の Ubuntu イメージを Ubuntu の最新のフィックスおよびアップデートで更新してから、デフォルトの Java JDK をインストールし、続いて wget ユーティリティーをインストールします。次は、「minecraft」という名前のディレクトリーを作成し、Amazon S3 ストレージ・サイトでホストされている minecraft_server.jar ファイルをダウンロードして、minecraft ディレクトリーに配置します。
  • その次のコマンドでは、eula.txt というファイルを作成します。このファイルは、このサーバーのユーザーが EULA 契約に同意したことを示します。
  • ここからが、私たちが目的とすることの核心です。CMD 命令は、この Dockerfile で作成された Docker イメージの実行時に、CMD キーワードに続いて指定された内容を実行します。重要な点は、Dockerfile が作成された時点、または命令で構成される Dockerfile から最終的な Docker イメージに変換された時点で、RUN 命令が即座に実行されることです。CMD 命令は、このイメージから作成されたコンテナーが実際に起動されるまで実行されません。
  • 最後の命令は、EXPOSE です。EXPOSE キーワードは、Docker コンテナーの実行時に、Docker コンテナー内部から見たどの TCP/IP ポートに Docker コンテナー外部からアクセスできるようにするかを指定します。デフォルトでは、Docker コンテナー内部のポートにはアクセスすることができません。つまり、これらのポートはデフォルトでセキュリティー保護されているため、どのポートをどのタイミングで公開するかを決めなければなりません。

前述のとおり、実行中のコンテナーにアクセスするには、まず Dockerfile を基にイメージを作成し、次にイメージをコンテナーとして実行するという 2 つのステップが必要です。しかしその前に、Docker リポジトリーの名前を決定する必要があります。通常、私は Ubuntu でのログイン名と同じ名前を使用しているので、後のほうの命令に含まれる <repositoryname> は、自分のログイン ID に置き換えてください (例えば、私の場合は「kbrown」に置き換えます)。

  1. まず、ターミナル・ソフトで以下のコマンドを実行することから始めます。
    cd minecraft
    sudo docker build -t="<repositoryname>/minecraft112" .

    最後のコマンドの終わりにあるドット (.) は重要です。このコマンドは、カレント (「.」) ディレクトリー内で見つかった Dockerfile (先ほど見たのと同じ Dockerfile) の内部にある命令から、まったく新しいイメージを作成します。

    これにより、すべてのステップが一度に 1 つずつ実行され、これらのステップに関する大量の中間情報が結果として出力されます。このコマンドの実行が完了するまで、ネットワーク接続の速度によっては数分以上かかる場合があります。Dockerfile 内のコマンドの多く (apt-get コマンドなど) は、新しいバージョンのソフトウェアを Docker イメージにダウンロードする必要があるためです。すべてが正常に行われると、RUN java -jar minecraft/BuildTools.jar の実行が正常に完了した後の出力の最終行に、以下の内容が出力されます。

    Successfully built 764c25d251f6

    メッセージの末尾に示される 12 桁の ID はそれぞれ異なりますが、「Successfully built」メッセージは表示されている必要があります。

  2. いよいよ正念場です。Docker 内部で Minecraft サーバーを実行できることを確かめるときが来ました。これを確かめるには、以下のコマンドを実行します。この場合も、<repositoryname> を自分のログイン名で置き換えてください。
    sudo docker run -i -t -p=25565:25565 <directory>/minecraft112

    上記のコマンドの実行が完了すると、コンソールの下部に以下のようなメッセージが表示されるはずです。
    [14:10:43] [Server thread/INFO]: Done (6.086s)! For help, type "help" or "?"
  3. Docker 内で稼働する新しい Minecraft サーバーを試すことができる状態にほとんどなっていますが、最後に明らかにしなければならない情報がもう 1 つあります。VMWare で仮想マシンを実行する場合、仮想マシンが実行されるネットワーク・アドレスはホスト・マシンには可視になりますが、それ以外には可視になりません。ただし、そのネットワーク・アドレスで実行されているプログラムにアクセスするためには、あらかじめそのアドレスを見つけておかなければなりません。現行のターミナル・ウィンドウは、Docker 内で Minecraft を実行することで占有してしまっているので、Ubuntu ターミナル・ソフトの「File (ファイル)」メニューから「Open Terminal (ターミナルを開く)」を選択することで、2 つ目のターミナル・ウィンドウを開きます。
  4. 2 つ目のターミナル・ウィンドウでは、以下のコマンドを入力します。
    ifconfig eth0 | grep “inet addr”

    上記のコマンドを実行すると、以下のような出力が表示されるはずです。

    inet addr:172.16.103.242  Bcast:172.16.103.255  Mask:255.255.255.0
    inet addr: の直後に続くインターネット・アドレスが、ホスト・オペレーティング・システム上の Minecraft クライアントで新しいサーバーにアクセスするために使用するアドレスです。最近のバージョンの VMware を使用している場合は、デフォルトのネットワーク・アダプターは eth0 ではなく、ens33 という名前になっています。したがって、このコマンドを実行して「デバイスが見つかりません」というエラーを受け取った場合は、最初のコマンドを以下のように変更してください。
    Ifconfig ens33 | grep "inet addr"

Minecraft クライアントをセットアップする

ここからが愉しいところです!

  1. Minecraft クライアントを起動して、最初の画面 (次のリリースに関する情報などを提供する画面) に表示される大きなプレイ・ボタンをクリックします。
  2. これによって表示される Minecraft の起動画面で、「Multiplayer (マルチプレイヤー)」を選択します。 Minecraft の起動画面のスクリーンショット
    Minecraft の起動画面のスクリーンショット
  3. 次に表示される「Play Multiplayer (マルチプレイヤーでプレイ)」画面で、「Add Server (サーバーの追加)」をクリックします。「Play Multiplayer (マルチプレイヤーでプレイ)」画面のスクリーンショット
    「Play Multiplayer (マルチプレイヤーでプレイ)」画面のスクリーンショット
  4. 「Edit Server Info (サーバー情報の編集)」画面で、前に調べた VM の IP アドレスを入力し、サーバーの IP ネットワーク・アドレスの末尾に「:25565」を追加します (25565 は、Docker コンテナーから公開するポートです)。 「Edit Server Info (サーバー情報の編集)」画面のスクリーンショット
    「Edit Server Info (サーバー情報の編集)」画面のスクリーンショット
  5. 「Done (完了)」クリックして「Play Multiplayer (マルチプレイヤーでプレイ)」画面に戻り、新規サーバーの「Join Server (サーバーに参加)」をクリックします。

    これで、Docker 内の新規ローカル・サーバー上で実行している状態になります!

  6. しばらく Minecraft でプレイ (ものを何個か作ったり、モンスターを何体か倒したりするかもしれません) したら、(Docker 内の) サーバーを実行している Ubuntu ターミナル・ウィンドウにアクセスして Ctrl + C を押せば、Docker コンテナーを終了させることができます。

Spigot の Dockerfile について

以上のように独自のローカル Minecraft サーバーをホストできるのは確かに愉しいことですが、実際には、それがこのチュートリアル・シリーズの核心部分ではありません。問題は、Mojang から直接入手した Minecraft は、サーバー側であまり拡張することができないことです。このシリーズで皆さんに紹介したいのは、IBM Cloud が提供しているいくつかの Watson サービスを利用する方法なので、自由に変更できる Minecraft サーバーが必要です。2010年には、ある開発者のグループがまさにこの種のサーバーのための API を作成し、その API を「Bukkit API」と名付けました。この API を使用すれば、独自の機能拡張を Minecraft プラグインとして作成することができます。Bukkit API の実装はいくつかありますが、そのうち最も一般的なのは Spigot 実装です。Spigot は Minecraft サーバーの中でも最も広範に変更が加えられているだけでなく、効率性とパフォーマンスを向上させるために、さまざまな形で改善が加えられてきました。

このチュートリアルでは Spigot をサーバーとして使用するので、以降は、前の例で使用した汎用的な Minecraft サーバーではなく、Spigot サーバーでの例を記載します。以下に記載する Dockerfile の内容を詳しく調べて、Spigot サーバーを使用する場合の違いを確認していきましょう。

この Dockerfile のコマンドは、Spigot Web サイトに記載されているビルド命令を基にして編集されたものです。この Dockerfile で問題が発生した場合、それはおそらくこのファイルに加えた変更に起因しているため、Spigot Web サイトの元のページを参照してください。それが、Spigot サーバーの構築方法に関する信頼すべき情報源となります。

それでは、新しい Dockerfile を見ていきましょう。

# Version 0.0.3
# This version builds a spigot server
# using the recommended build strategy for spigot
# This is advantageous in that it's better for plugin development
# and fits well with the Docker approach
#
FROM ubuntu:16.04
MAINTAINER Kyle Brown “brownkyl@us.ibm.com”
RUN apt-get update
RUN apt-get install -y git
RUN apt-get install -y default-jdk
RUN apt-get install -y wget
RUN mkdir minecraft
RUN wget “https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar" -O minecraft/BuildTools.jar
RUN git config --global core.autocrlf input
RUN java -jar minecraft/BuildTools.jar –rev 1.12
RUN echo "eula=true" > eula.txt
CMD java -XX:MaxPermSize=128M -Xms512m -Xmx1024m -jar spigot-1.12.jar nogui
EXPOSE 25565

このファイルのいくつかの側面は、先ほど見てきた基本的な Minecraft サーバーの例と同じなので、見覚えがあるはずです。例えば、Ubuntu Linux を更新するコマンドや、デフォルトの JDK をインストールするコマンドは前と変わっていません。その一方、この Dockerfile は git ツール (Linux ですでに使用しました) もインストールします。

真の意味での変更は、wget を実行して (ありきたりな Minecraft サーバーをホストする Amazon S3 サーバーからではなく) SpitgotMC サーバーからファイルを取得する行の後から始まります。SpigotMC サーバーから取得しているファイルは、そのまま実行する単純な JAR ファイルではなく、中間ファイルです。実際に最終的な JAR ファイルを作成するには、この中間ファイルを使用します。中間ファイルを使用するメリットは、Dockerfile で追加のコードを変更することなく常に最新バージョンの Spigot サーバーを取得できることです。また、Microsoft Windows (Spigot 開発作業の大半を行う場所) と Linux でのキャリッジ・リターン/ライン・フィードの処理方法の違いに対処するために、作成プロセスで使用する git のデフォルト動作に変更を加える必要もあります。

作成プロセスがどのように違うのかを調べるには、先ほど Minecraft コンテナーを実行したのと同じディレクトリーで、以下のコマンドを実行します。

cd ../spigot

sudo docker build -t="<repositoryname>/spigot112” .

このファイルを作成するには、かなりの時間がかかることに注意してください!しかしありがたいことに、Docker は階層構造になっていることから、毎回すべての中間ステップを作成しなければならないわけではありません。このことを確認するには、上記のコマンドをもう一度実行してください。今度はかなり短時間で完了するはずです!その理由は、出力を見るとわかります。

Step 7 : RUN wget "https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar" -O minecraft/BuildTools.jar
 ---> Using cache
 ---> fdf1e118f298
Step 8 : RUN git config --global core.autocrlf input
 ---> Using cache
 ---> 5a130309c12c
Step 9 : RUN java -jar minecraft/BuildTools.jar
 ---> Using cache
 ---> 516e9fb02428

各コマンドの後に、「Using cache (キャッシュを使用)」とあります。Docker は Dockerfile の各ステップを実行すると、その結果を新しいイメージとしてキャッシュに入れます。このシリーズの第 2 回で、Spigot 用プラグインを作成し始めると、作成プロセスの時間のかかる部分 (Ubuntu を更新して、Spigot ファイルを作成する部分) を繰り返す必要がないことがわかります!

正常に完了したことを確認するには、以下のコマンドを実行します。

sudo docker run -i -t -p=25565:25565 <repositoryname>/spigot112

以下のようなメッセージが表示されるはずです。

[21:16:17 INFO]: Done (11.170s)! For help, type "help" or "?"

これで、2 つ目の Minecraft サーバーの構築に成功しました。今回構築したのは、拡張可能なサーバーです! Minecraft クライアントを新規サーバー (ネットワーク・アドレスは前の例と同じなので、変更する必要はありません) に接続できるかどうか試して、すべてが問題なく機能していることを確認してください。

まとめ

これで、このチュートリアル・シリーズの第 1 回は完了です。今回は、Docker の仕組みと、Docker が Minecraft 開発者にどのように役立つかを説明するとともに、ローカル Minecraft サーバーを作成するための Dockerfile のいくつかの例を詳しく見てきました。第 2 回では、Spigot サーバー用のプラグインを作成する方法を説明し、サーバー内で実行されるプラグインの例を見ていきます。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Java technology, Cognitive computing
ArticleID=1025101
ArticleTitle=Minecraft とIBM Cloud, 第 1 回: Docker 内で Minecraft サーバーを実行する
publish-date=03082018