容器版本
采用容器方法可以将软件及其所有依赖项打包成一个单元。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
注意:通过 Unity Cloud 后台创建版本时,Multiplay Hosting 仅为您生成 ImageName
和 ImageTag
。如果您使用 CLI 工具,必须创建 ImageName
和 ImageTag
。
容器版本要求
创建 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
# 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(GitHub 上的 Unity Multiplay 示例)。
从头开始创建容器版本
如果您希望从头开始创建 Dockerfile,则必须自行确保容器满足以下要求。
警告:除非在特定或高级使用场景中必须要从头开始创建容器,否则请使用基础镜像。
要求 | 描述 |
USER mpukgame | 容器必须使用 mpukgame 作为 USER 。该用户必须具有组标识符 (GID) 2000 和用户标识符 (UID) 2000。 |
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
文件已安装到您的容器中。可以通过查看容器的 home 环境变量找到该 server.json
文件的位置。
- 对于 Linux 容器,该文件位于
$HOME
环境变量中。 - 对于 Windows 容器,该文件位于
$HOMEPATH
环境变量中。
如果您从头开始创建容器版本,请创建您自己的 server.json
文件并将其包含在容器镜像中。请参阅 Server.json 以了解该文件的格式,并参阅配置变量以了解 server.json
的变量。