コンテナビルド

コンテナは、ソフトウェアとそのすべての依存関係を 1 つの単位にまとめる方法です。Multiplay Hosting コンテナビルドを使用すると、ゲームサーバーと依存関係をパッケージ化し、コンテナをビルドして、それを Multiplay Hosting コンテナレジストリにプッシュできます。

コンテナビルドは、ビルドの作成時に Unity Cloud DashboardContainer image (コンテナイメージ) を選択して作成できます。Create build (ビルドの作成) ウィザードにより、サービスアカウントの追加、レジストリの追加、イメージの選択が順に示されます。コンテナイメージを使用したビルドの作成 を参照してください。

Multiplay Hosting は、<ImageName>:<ImageTag> という形式の Docker コンテナタグを使用します。Multiplay Hosting によって、ビルドの正しい名前とタグが作成され、コンテナビルドを作成または更新するときに Unity Cloud Dashboard に表示されます。

docker tag <ImageName>:<ImageTag> registry.multiplay.com/4818982f-bb28-4c39-9d44-628204b6780e/1ae4de65-849d-4ff1-86fc-1de3bdfbd891/12788:v1

ノート: Multiplay Hosting によって ImageNameImageTag が生成されるのは、Unity Cloud Dashboard でビルドを作成するときだけです。CLI ツールを使用する場合は、ImageNameImageTag を作成する必要があります。

コンテナビルドの要件

Multiplay Hosting ビルドを作成する場合、ビルドファイルをアップロードするためのいくつかのオプションがあります。1 つのオプションは、Docker と Multiplay Hosting コンテナレジストリを使用してビルドのコンテナ化バージョンをアップロードすることです。ただし、コンテナ化されたビルドを使用する前に、ビルドコンテナが (一般要件 に加えて) 特定の要件を満たす必要があります。

ベースイメージを使用したコンテナビルドの作成

linux-build-image テンプレートコンテナは、コンテナビルドの使用に関するほとんどの追加要件に対処します。以下のコードに示すように、Dockerfile の先頭に FROM unitymultiplay/linux-base-image:<tag> を加えると、コンテナを使用できます。詳細については、Dockerfile リファレンス (Docker ドキュメント) を参照してください。

FROM unitymultiplay/linux-base-image:<tag>

# copy game files here
# for example:
WORKDIR /game
COPY --chown=mpukgame . .

# set your game binary as the entrypoint
ENTRYPOINT [ "./gamebinary" ]

前の例の場合:

  • <tag> は、使用するベースイメージのバージョンで置き換えます。使用可能なタグのリストについては、linux-base-image タグ で確認できます。
  • WORKDIR に、コンテナプロセスの現在の作業ディレクトリを設定します。プロセスの実行またはファイルのコピーのアクションはすべて、作業ディレクトリに対して相対的に行われます。
  • ENTRYPOINT に、コンテナが開始したときに実行される実行ファイルを指定します。エントリーポイントとして、ゲームサーバーバイナリを使用する必要があります。

警告: ビルド設定に指定される起動パラメーターは、Dockerfile に定義された CMD をオーバーライドできます。

単純な例については、この Simple Game Server Dockerfile (GitHub 上の Unity Multiplay の例) を参照してください。

ゼロからのコンテナビルドの作成

Dockerfile をゼロから作成する場合は、コンテナが以下の要件を満たしていることの確認に責任を負うことになります。

警告: コンテナをゼロから作成する必要のある特定の用途または上級者向け用途がないかぎり、ベースイメージ を使用してください。

要件説明
USER mpukgameコンテナでは、mpukgameUSER として使用する必要があります。このユーザーは、2000 のグループ識別子 (GID) と 2000 のユーザー識別子 (UID) を持っている必要があります。
ENTRYPOINTコンテナには ENTRYPOINT が必要です。

以下のコードブロックは、これらの要件を満たす単純な Dockerfile です。

# ======================================================== #
#                  Unity base image stuff                  #
# ======================================================== #

FROM ubuntu:20.04 AS mpuk

RUN addgroup --gid 2000 mpukgame && \
    useradd -g 2000 -u 2000 -ms /bin/sh mpukgame && \
    mkdir /game && \
    chown mpukgame:mpukgame /game && \
    apt update && \
    apt upgrade && \
    apt install -y ca-certificates
USER mpukgame

# ======================================================== #
#                    Custom game stuff                     #
# ======================================================== #

FROM mpuk AS game

# copy game files here
# for example:
WORKDIR /game
COPY --chown=mpukgame . .

# set your game binary as the entrypoint
ENTRYPOINT [ "./gamebinary" ]

Steam にアップロードされたサーバービルドを使用したコンテナビルドの作成

Steam にアップロードされたゲームサーバービルドで使用するコンテナビルドをアップロードするために、SteamCMD を使用してコンテナイメージを作成できます。

以下のコードブロックは、SteamCMD プロセスの Dockerfile の例です。

# ======================================================== #
#                     SteamCMD stuff                       #
# ======================================================== #

FROM steamcmd/steamcmd:ubuntu-20 AS steamcmd

WORKDIR /game
COPY update.txt /data/update.txt
RUN steamcmd +runscript /data/update.txt
# if you want to avoid having the update.txt file, use:
# RUN steamcmd +force_install_dir /game/<game_name> \
#     +login anonymous +app_update <steam_appid> validate +quit

# ======================================================== #
#                  Unity base image stuff                  #
# ======================================================== #

FROM ubuntu:20.04 AS mpuk

RUN addgroup --gid 2000 mpukgame && \
    useradd -g 2000 -u 2000 -ms /bin/sh mpukgame && \
    mkdir /game && \
    chown mpukgame:mpukgame /game && \
    apt update && \
    apt upgrade && \
    apt install -y ca-certificates lib32z1
USER mpukgame

# ======================================================== #
#                    Custom game stuff                     #
# ======================================================== #

WORKDIR /game
COPY --from=steamcmd --chown=mpukgame:mpukgame /game/<game_name> /game/<game_name>

# set your game binary as the entrypoint
ENTRYPOINT [ "./game_binary" ]

Server.json ファイル

ベースコンテナイメージを使用している場合、server.json ファイルはすでにコンテナにマウントされています。コンテナのホーム環境変数を確認して、server.json ファイルの場所を探すことができます。

  • Linux コンテナの場合は、$HOME 環境変数内にあります。
  • Windows コンテナの場合は、$HOMEPATH 環境変数内にあります。

コンテナビルドをゼロから作成するには、独自の server.json ファイルを作成して、それをコンテナイメージに加えます。このファイルの形式については Server.jsonserver.json の変数の説明については 構成変数 を参照してください。