クラウドへの Minecraft Docker Server のデプロイ

Dockerのデモで何年にもわたって人々が使用してきた最も単純な例の1つは、Minecraftサーバーをすばやく立ち上げて実行することです。 これはDockerを使用する力を示しており、かなり実用的なアプリケーションです!

最近、サーバーをセットアップしたかったのですが、サーバーを永続化したいと思っていたので、最後のラズベリーパイを配ったので、これを行う新しい方法を見つける必要がありました。 私は、最初の月に得られる 200ドルの無料クレジット を使用して、Azureでこれを実行することに決めました。

私が最初にやろうと決めたことは、Minecraftサーバー用の既存の Dockerイメージ をチェックして、使い勝手の良いものがあるかどうかを確認することでした。

マインクラフトサーバークラウド1

私はMinecraftサーバーリポジトリの外観が好きだったので、クリックして画像を確認し、Githubリポジトリにリンクしました。

まず、「簡単な開始」Docker Runコマンドを使用して、これを自分のマシンでローカルに実行することをテストします。

$ docker run -d -p 25565:25565 --name mc -e EULA=TRUE
 itzg/minecraft-server

Dockerデスクトップダッシュボードで、コンテナが実行されていることを確認し、サーバーログをチェックして、すべてが正しく初期化されていることを確認できます。

Minecraftをロードすると、ローカルホストと開いているポートを使用してサーバーに接続できます。 

そこから、これをAzureにデプロイして、基本的なサーバーをクラウドで実行することができます。 

Docker ACI 統合を使用すると、次を使用して Azure にログインできます。 

$ docker login azure

ログインしたら、コンテナーを Azure リソース グループにデプロイできるコンテキストを作成できます (これにより、新しい Azure リソース グループを作成するか、既存のリソース グループを使用することが提案されます)。 

$ docker context create aci acicontext
Using only available subscription : My subscription (xxx)
? Select a resource group  [Use arrows to move, type to filter]
> create a new resource group
  gtardif (westeurope)

私はこの新しいコンテキストを使用することができます: 

$ docker context use acicontext

私は今、以前にローカルで実行したのとまったく同じコマンドを使用して、私のminecraftサーバーをデプロイしようとします:

$ docker run -d -p 25565:25565 --name mc -e EULA=TRUE itzg/minecraft-server
[+] Running 2/2
 ⠿ Group mc  Created                     4.6s
 ⠿ mc        Done                        36.4s
mc

紺碧のコンテナーを一覧表示すると、Minecraft サーバーに提供されているパブリック IP が表示されます。

$ docker ps 
CONTAINER ID        IMAGE                   COMMAND             STATUS         PORTS
mc                  itzg/minecraft-server                       Running        51.105.116.56:25565->25565/tcp

しかし、ACIコンテナのログをたどると、サーバーが初期化でスタックしているようで、Minecraftから接続できません。 

$ docker logs --follow mc

ログでは、Minecraftサーバーが1Gのメモリを予約していることがわかりますが、これはACIによってコンテナ全体に割り当てられたデフォルトのメモリです。–memoryオプションを使用してACI制限を少し増やしてみましょう。 

$ docker run -d --memory 1.5G -p 25565:25565 --name mc -e EULA=TRUE
itzg/minecraft-server

ACI からのサーバ ログに、サーバが正しく初期化されたことが示されるようになりました。 $ docker psを再度実行してコンテナのパブリックIPを取得し、Minecraftから接続してプレイを開始できます。 

これは素晴らしいことですが、データが保持され、サーバーの実行に使用する必要があるコマンドの長さを減らす方法を見つけたいと思います。

これを行うには、Composeファイルを使用して使用しているコマンドを文書化し、次にデータをマウントできるボリュームを追加します。 

version: '3.7'
services:
 minecraft:
   image: itzg/minecraft-server
   ports:
     - "25565:25565"
   environment:
     EULA: "TRUE"
   deploy:
     resources:
       limits:
         memory: 1.5G

イメージ名をイメージセクションに移動する前のコマンドを見ると、ポートの-pをポートに移動し、 EULA への同意を環境変数に追加しました。 また、サーバー コンテナーに起動するのに十分なメモリがあることを確認します。

これをローカルで開始するコマンドがはるかに簡単になりました。

$ docker-compose --project-name mc up

また、以前に作成した ACI コンテキストを使用して ACI に展開するには、次のようにします。 

$ docker compose --project-name mc2 up 
[+] Running 2/2
 ⠿ Group mc2  Created                                6.7s
 ⠿ minecraft  Done                                   51.7s

もちろん、composeを使用すると、composeアプリケーションに複数のコンテナを含めることができます(ここでは「minecraft」のコンテナしかありません)。 コンテナは進行状況表示(ここでは「Minecraft」行)に表示されます。
コンテナを一覧表示すると、アプリケーション名とコンテナ名 mc2_minecraft が表示されます。 

$ docker ps
CONTAINER ID                   IMAGE                  COMMAND      STATUS      PORTS
mc                             itzg/minecraft-server               Running     20.50.245.84:25565->25565/tcp
mc2_minecraft                  itzg/minecraft-server               Running     40.74.20.143:25565->25565/tcp

次に、Minecraftデータを含めるボリュームを追加し、必要に応じて他のマップにロードできる場所を追加します。 これを行うには、DockerイメージにMinecraftデータがあるフォルダを知る必要がありますが、Dockerダッシュボードで実行中のコンテナを調べると、それが /Data ディレクトリであることがわかります。

これをコマンドラインに追加したい場合は、コマンドを次のように拡張する必要があります。

docker run -d -p 25565:25565 --v /path/on/host:/data --name mc -e 
EULA=TRUE itzg/minecraft-server

これをComposeファイルのボリュームの下に追加できます。 

version: '3.7'
services:
 minecraft:
   image: itzg/minecraft-server
   ports:
     - "25565:25565"
   environment:
     EULA: "TRUE"
   deploy:
     resources:
       limits:
         memory: 1.5G
   volumes:
     - "~/tmp/minecraft_data:/data"

これで、Dockerを作成して検査に戻ると、コンテナ内のフォルダーが期待どおりにローカルフォルダーにマウントされていることがわかります /data 。 このローカルフォルダに移動すると、すべてのMinecraftデータを見ることができます。

次に、Azure ファイル共有を作成し、アプリケーションをデプロイして Azure 共有永続フォルダーにマウント /data し、ACI で同じことを実行できるようにします。 

まず、Azure ストレージ アカウントを作成する必要があります。 これは、Azureの「az」コマンドラインを使用するか、Azureポータルを使用して行うことができます。 

マインクラフトサーバークラウド2

ストレージ アカウントの名前を指定し、アタッチするリソース グループを選択してから、この例では他のオプションを既定値にする必要があります。 

"minecraftdocker" ストレージ アカウントが作成されたら、すべての Minecraft ファイルを保持するファイル共有を作成します。 

マインクラフトサーバークラウド3

このファイル共有の名前とサイズクォータを指定するだけです。それを「マインクラフトボリューム」と呼びましょう。

次に、作成ファイルで、この Azure ファイル共有を指すようにボリューム仕様を更新します。

version: '3.7'
services:
 minecraft:
   image: itzg/minecraft-server
   ports:
     - "25565:25565"
   environment:
     EULA: "TRUE"
   deploy:
     resources:
       limits:
         memory: 1.5G
   volumes:
     - "minecraft:/data"
volumes:
 minecraft:
   driver: azure_file
   driver_opts:
     share_name: minecraftdocker     
     storage_account_name: minecraft-volume      

Compose ファイルで ACI ボリュームを指定するための構文は、将来変更される可能性があることに注意してください。

その後、以前と同じコマンドラインを使用して、作成アプリケーションをACIに再デプロイできます。

$ docker --context acitest compose  --project-name minecraft up
[+] Running 2/2
 ⠿ Group minecraft  Created                                5.3s
 ⠿ minecraft        Done                                  56.4s

そして、Azureファイル共有を使用していることを確認できますが、AzureポータルでMinecraftボリュームの共有を選択するだけです。 マインクラフトサーバークラウド4

セキュリティに関する注意: 上記のこの Azure ファイル共有 Web UI のスクリーンショットでは、Minecraft サーバーが既定値を使用して server.properties と、空の配列を含む whitelist.json を作成したことがわかります。

Server.properties には、デフォルトで無効になっているホワイトリスト ("white-list = false") と、サーバーのリモート管理に使用できるデフォルトの RCON パスワードが含まれています (現在の設定では、RCON ポートが公開されていないため、rcon を使用できません)。 RCONを使用する場合は、作成ファイルで25565に加えてポート25575を公開できます。最初にサーバープロパティのパスワードを変更することを忘れないでください。

Mineraftサーバーのプロパティの詳細については 、https://minecraft.gamepedia.com/Server.properties を参照してください。

Azure ファイル共有から server.properties ファイルをダウンロードし、RCON パスワードの変更や "ホワイトリスト" プロパティの true 設定などを変更して、ファイルを Azure ファイル共有にアップロードし直すことができます。 ホワイトリスト.json ファイルについても同じです。
Minecraftサーバーを再起動するには、作成コマンドを再発行するだけです。

$ docker --context acitest compose --project-name minecraft up

コンテナーは再デプロイされますが、ボリューム内のデータは再利用されるため、Azure ファイル共有にアップロードした server.properties & whitelist.json ファイルが読み込まれます。

ホワイトリストに含まれていない場合にMinecraftアプリケーションを接続しようとすると、次のように表示されます。

スクリーンショット 2020 08 12 で 16.47. 23

独自の Minecraft サーバーの実行を開始するには、最新の Edge バージョンの Docker Desktop をダウンロードできます。 Docker Hub で使用した Minecraft イメージを見つけるか、Dockers 公式イメージから独自のコンテンツの作成を開始できます。 または、このようなコンテンツを作成して共有する場合は、 Docker アカウントを作成し 、パブリック リポジトリでアイデアの共有を開始します。