文档

支持

Multiplay Hosting

Multiplay Hosting

容器版本

Learn how to package your game server as a Docker container image for deployment.
阅读时间4 分钟最后更新于 15 天前

采用容器方法可以将软件及其所有依赖项打包成一个单元。Multiplay Hosting 容器版本支持将游戏服务器及其依赖项进行打包、构建一个容器并将其推送到 Multiplay Hosting 容器注册表。 您可以通过在 Unity Cloud 后台中创建版本时选择 **Container image(容器镜像)**来创建容器版本。Create build(创建版本)向导会指导您添加服务帐户、添加注册表和选择镜像。请参阅通过容器镜像创建版本 Multiplay Hosting 使用格式为
<ImageName>:<ImageTag>
的 Docker 容器标签。Multiplay Hosting 为版本生成正确的名称和标签,并在您创建或更新容器版本时,将其显示在 Unity Cloud 后台中。
docker tag <ImageName>:<ImageTag> registry.multiplay.com/4818982f-bb28-4c39-9d44-628204b6780e/1ae4de65-849d-4ff1-86fc-1de3bdfbd891/12788:v1

容器版本要求

创建 Multiplay Hosting 版本时,您可选择使用多种方式来上传版本文件。一种方式是使用 Docker 和 Multiplay Hosting 容器注册表来上传版本的容器化版本。不过,版本容器必须满足特定要求(除一般要求外),您才能使用容器化的版本。

使用基础镜像来创建容器版本

linux-build-image 模板容器可满足使用容器版本的大多数额外要求。您可以通过将
FROM unitymultiplay/linux-base-image:<tag>
添加到 Dockerfile 顶端来使用该容器,如下面的代码所示。有关详细信息,请参阅 Dockerfile 参考(Docker 文档)。
FROM unitymultiplay/linux-base-image:<tag># copy game files here##copy-game-files-here# for example:##for-example:WORKDIR /gameCOPY --chown=mpukgame . .# set your game binary as the entrypoint##set-your-game-binary-as-the-entrypointENTRYPOINT [ "./gamebinary" ]
在上面的示例中:
  • <tag>
    替换为要使用的基础镜像的版本。您可以查看 linux-base-image 标签,获取可用的标签列表。
  • WORKDIR
    设置为容器进程的当前工作目录。任何运行进程或复制文件的操作都与工作目录有关。
  • ENTRYPOINT
    设置为容器启动时运行的可执行文件。此入口点应该是您的游戏服务器二进制文件。
如需查看简单示例,请参阅此简单游戏服务器 Dockerfile(GitHub 上的 Unity Multiplay 示例)。

从头开始创建容器版本

如果您希望从头开始创建 Dockerfile,则必须自行确保容器满足以下要求。
要求描述
USER mpukgame
容器必须使用
mpukgame
作为
USER
。该用户必须具有组标识符 (GID) 2000 和用户标识符 (UID) 2000。
ENTRYPOINT
容器必须具有一个
ENTRYPOINT
以下代码块是满足这些要求的简单 Dockerfile:
# ========================================================##========================================================-# Unity base image stuff##unity-base-image-stuff------------------# ========================================================##========================================================-FROM ubuntu:20.04 AS mpukRUN 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-certificatesUSER mpukgame# ========================================================##========================================================-# Custom game stuff##custom-game-stuff---------------------# ========================================================##========================================================-FROM mpuk AS game# copy game files here##copy-game-files-here# for example:##for-example:WORKDIR /gameCOPY --chown=mpukgame . .# set your game binary as the entrypoint##set-your-game-binary-as-the-entrypointENTRYPOINT [ "./gamebinary" ]

使用上传到 Steam 的服务器版本创建容器版本

要上传容器版本以供与上传到 Steam 的游戏服务器版本一起使用,可以使用 SteamCMD 来构建容器镜像。 以下代码块是 SteamCMD 进程的 Dockerfile 示例:
# ========================================================##========================================================-# SteamCMD stuff##steamcmd-stuff-----------------------# ========================================================##========================================================-FROM steamcmd/steamcmd:ubuntu-20 AS steamcmdWORKDIR /gameCOPY update.txt /data/update.txtRUN steamcmd +runscript /data/update.txt# if you want to avoid having the update.txt file, use:##if-you-want-to-avoid-having-the-update.txt-file,-use:# RUN steamcmd +force_install_dir /game/<game_name> \##run-steamcmd-+force_install_dir-/game/game_name-# +login anonymous +app_update <steam_appid> validate +quit##+login-anonymous-+app_update-steam_appid-validate-+quit# ========================================================##========================================================-# Unity base image stuff##unity-base-image-stuff------------------# ========================================================##========================================================-FROM ubuntu:20.04 AS mpukRUN 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 lib32z1USER mpukgame# ========================================================##========================================================-# Custom game stuff##custom-game-stuff---------------------# ========================================================##========================================================-WORKDIR /gameCOPY --from=steamcmd --chown=mpukgame:mpukgame /game/<game_name> /game/<game_name># set your game binary as the entrypoint##set-your-game-binary-as-the-entrypointENTRYPOINT [ "./game_binary" ]

Server.json 文件

如果使用基础容器镜像,则需确保
server.json
文件已安装到您的容器中。可以通过查看容器的 home 环境变量找到该
server.json
文件的位置。
  • 对于 Linux 容器,该文件位于
    $HOME
    环境变量中。
  • 对于 Windows 容器,该文件位于
    $HOMEPATH
    环境变量中。
如果您从头开始创建容器版本,请创建您自己的
server.json
文件并将其包含在容器镜像中。请参阅 Server.json 以了解该文件的格式,并参阅配置变量以了解
server.json
的变量。