PocketMine-MPはDockerのコンテナ上で動かすことができます。
Docker とは開発者やシステム管理者が、コンテナでアプリケーションを **構築(build)、実行(run)、共有(share)**するためのプラットフォームです。1
Dockerをインストール・セットアップしよう
上記のリンクからWindows/MacでのDocker Desktopがインストールできます。
インストールが終わった後に起動するとチュートリアルが始まります。
一通りやっておくと、この後の操作が理解しやすくなると思います。
注意
Windows Homeの場合はWSL2を有効にする必要があります。詳細は
https://docs.docker.jp/docker-for-windows/install-windows-home.html
を確認してください。
DockerでPocketMine-MPを動かしてみよう
ここからが本題です。実際にPocketMine-MPをDocker上で動かしてみましょう。
PocketMine-MPは公式がDockerイメージを以下のリンクで公開しています。
英語版ですがそんなに難しい内容にはなっていないはずです。
1. Dockerイメージをダウンロードする
端末やWindowsターミナル上などでdocker pull pmmp/pocketmine-mp
を実行してDockerダウンロードします。
2.プラグイン用のディレクトリとデータ用のディレクトリを作成する
サーバーのデータを保持しておくディレクトリを決めて、その中にplugins
ディレクトリとdata
ディレクトリを作ります。
3. コンテナを立ち上げる。
Windowsの場合
docker run -it -p 19132:19132/udp -v {上で決めたディレクトリへのパス}\\data:/data -v {上で決めたディレクトリへのパス}\\plugins:/plugins pmmp/pocketmine-mp
を
Mac/Linuxの場合は端末上で上のディレクトリを開いた状態で、
docker run -it -p 19132:19132/udp -v $PWD/data:/data -v $PWD/plugins:/plugins pmmp/pocketmine-mp
を実行して起動します。
うまく起動するとサーバーのログが見れるはずです。
そのほかは通常のPocketMine-MPと同じように使うことができます。開けるポートが違うときには-pオプションでそれに対応するポートをしてしてください。
シナリオ: MySQLを使うプラグインを使用する
この章ではdocker-composeを使用してDockerの要素をより使ってサーバーを構築することを考えます。特に、MySQLを使うプラグインと合わせて使うことを考えます。
1. docket-compose.ymlを記述する。
version: "3"
services:
pocketmine-server:
image: pmmp/pocketmine-mp:latest # どのイメージを使うか、今回は最新版イメージを指定した。
ports:
- "19132:19132/udp"
depends_on:
- mysql # mysqlサービスに対応していることを表す。
volumes:
- 'C:\Devs\plugin-dev\MyChunkLand:/plugins' # 一例、絶対パスで実機:コンテナ上のディレクトリを対応させる。
- 'C:\Devs\plugin-dev\data:/data'
mysql:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: password # rootユーザーのパスワードを指定する
ports:
- "3308:3306" # Docker上のmysqlコンテナのポート3306を実機上のポート3308に対応させる
上のようなファイルを記述しdocker-compose.ymlとして保存します。
2. docker-composeで立ち上げる
そのディレクトリをカレントディレクトリにした状態で以下を実行すると、pocketmine-serverコンテナとmysqlコンテナを立ち上げられます。
docker-compose up
3. プラグインで設定をする
この状態でいったんサーバーを停止してからプラグインの設定をします。
例えば、Ree-jp-minecraftさんのStackStorageプラグイン(GitHubリンク)では、以下のような設定にすると、対応ができます。
database:
# mysql or sqlite
type: mysql # MySQLを選択
# Edit these settings only if you choose "sqlite".
sqlite:
# The file name of the database in the plugin data folder.
# You can also put an absolute path here.
file: data.sqlite
# Edit these settings only if you choose "mysql".
mysql:
host: mysql #ホストをコンテナ名に変更
# Avoid using the "root" user for security reasons.
username: StackStorage #データベース内のユーザー名に対応
password: password #対応するパスワードへ
# Database name
schema: StackStorage
# The maximum number of simultaneous SQL queries
# Recommended: 1 for sqlite, 2 for MySQL. You may want to further increase this value if your MySQL connection is very slow.
worker-limit: 1
ホストマシン側からはMySQLはポート3308からアクセスできます。
このプラグインであればデータベースにアクセスして以下のコマンドを実行することで一連の初期設定が終わります。
CREATE DATABASE StackStorage;
CREATE USER StackStorage IDENTIFIED BY 'password';
GRANT ALL on StackStorage.* to StackStorage;
ほかのプラグインについてもホストとユーザー、パスワードとスキーマをプラグインの指示に従い適切に設定することで動作させることができます。
まとめ
- PocketMine-MPはDockerコンテナ上で動作できる。
- Dockerを使うとMySQLやその他の対応するサービスを一括で管理できる。
Dockerはいろいろなコンテナが対応しているのでサーバーを一括で管理するに役立ちます。この機会に一度お試しを!