Dockerのデモで何年にもわたって人々が使用してきた最も単純な例の1つは、Minecraftサーバーをすばやく立ち上げて実行することです。 これはDockerを使用する力を示しており、かなり実用的なアプリケーションです!
最近、サーバーをセットアップしたかったのですが、サーバーを永続化したいと思っていたので、最後のラズベリーパイを配ったので、これを行う新しい方法を見つける必要がありました。 私は、最初の月に得られる 200ドルの無料クレジット を使用して、Azureでこれを実行することに決めました。
私が最初にやろうと決めたことは、Minecraftサーバー用の既存の Dockerイメージ をチェックして、使い勝手の良いものがあるかどうかを確認することでした。
私は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ポータルを使用して行うことができます。
ストレージ アカウントの名前を指定し、アタッチするリソース グループを選択してから、この例では他のオプションを既定値にする必要があります。
"minecraftdocker" ストレージ アカウントが作成されたら、すべての Minecraft ファイルを保持するファイル共有を作成します。
このファイル共有の名前とサイズクォータを指定するだけです。それを「マインクラフトボリューム」と呼びましょう。
次に、作成ファイルで、この 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ボリュームの共有を選択するだけです。
セキュリティに関する注意: 上記のこの 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アプリケーションを接続しようとすると、次のように表示されます。
独自の Minecraft サーバーの実行を開始するには、最新の Edge バージョンの Docker Desktop をダウンロードできます。 Docker Hub で使用した Minecraft イメージを見つけるか、Dockers 公式イメージから独自のコンテンツの作成を開始できます。 または、このようなコンテンツを作成して共有する場合は、 Docker アカウントを作成し 、パブリック リポジトリでアイデアの共有を開始します。