容器构建

容器是一种将软件及其所有依赖项打包到单个单元中的方式。游戏服务器托管 (多人) 容器构建允许您打包您的游戏服务器及其依赖项,构建一个容器,并将它推送到游戏服务器托管容器注册表。

您可以通过 Unity 云控制面板 创建容器构建,在创建构建时选择 **容器镜像**。创建构建向导将引导您添加服务帐户、添加注册表以及选择镜像。请参阅 使用容器镜像创建构建

游戏服务器托管使用格式为 <ImageName>:<ImageTag> 的 Docker 容器标签。游戏服务器托管会为您的构建生成正确的名称和标签,并在您在 Unity 云控制面板中创建或更新容器构建时将其显示给您。

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

Note: Game Server Hosting only generates the ImageName and ImageTag for you when you create a build through the Unity Cloud Dashboard. If you use the CLI tool, you’ll need to create the ImageName and ImageTag.

容器构建要求

在创建游戏服务器托管 (GSH) 构建时,您有几种上传构建文件的选择。一种选择是使用 Docker 和 GSH 容器注册表上传构建的容器化版本。但是,您的构建容器必须满足特定要求(除了 一般要求)才能使用容器化构建。

使用基本镜像创建容器构建

linux-build-image 模板容器处理了使用容器构建的大部分额外要求。您可以通过将 FROM unitymultiplay/linux-base-image:<tag> 添加到您的 Dockerfile 的顶部来使用该容器,如以下代码所示。

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

有关简单示例,请参阅此 简单游戏服务器 Dockerfile(Unity 多人游戏示例,位于 GitHub 上)。

从头开始创建容器构建

如果您更喜欢从头开始创建 Dockerfile,则您有责任确保您的容器满足以下要求。

警告:除非您有必须从头开始创建容器的特定或高级用途,否则请使用 基本镜像

要求说明
USER mpukgame您的容器必须使用 mpukgame 作为 USER。此用户必须具有 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" ]

Server.json 文件

如果您使用基本容器镜像,则 server.json 文件已挂载到您的容器中。您可以通过检查容器的主环境变量来查找 server.json 文件的位置。

  • 对于 Linux 容器,它位于 $HOME 环境变量中。
  • 对于 Windows 容器,它位于 $HOMEPATH 环境变量中。

如果您从头开始创建容器构建,请创建自己的 server.json 文件并将其包含在容器镜像中。请参阅 Server.json 以了解此文件的格式,以及 配置变量 以了解 server.json 变量的解释。