容器构建
容器是一种将软件及其所有依赖项打包到单个单元中的方式。游戏服务器托管 (多人) 容器构建允许您打包您的游戏服务器及其依赖项,构建一个容器,并将它推送到游戏服务器托管容器注册表。
您可以通过 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
变量的解释。