创建和部署 Linux 容器映像

本文概述了帮助创建和部署 Linux 容器映像的具体步骤。

创建 VM 中所述,在使用我们的服务时,根据预算和需求,可以配置 VM 作为游戏服务器在全局范围内自动启动。 为此,请勿显式创建 VM,而是定义参数来确定如何代表你创建 VM。 此过程称为部署或创建内部版本。

PlayFab 多玩家服务器可以部署基于 Linux 和 Windows 的游戏服务器。 为 Linux 容器部署构建的方式与 Windows 容器类似,但有一些重要的区别。 若要了解详细信息,请参阅 Windows 和 Linux 容器映像差异。 若要使用 PowerShell/API 管理 Linux 容器,请参阅 使用 API 管理 Linux 容器映像

使用基于 Linux 的游戏服务器时,必须创建容器映像并将其上传到容器注册表,而不是使用托管容器映像。 为了便于上传容器,你的帐户附带了 Azure 容器注册表。

必需的知识

设置 Windows 开发设备

仅当要使用 Windows 开发设备创建 Linux 容器映像时,才需要执行此步骤。 或者,可以使用安装了 Docker 的 Linux OS 设备、VM 或双 OS 系统。

适用于 Linux 的 Windows 子系统 (WSL) 使你能够在熟悉的 Windows 环境中使用开发设备来编写和管理 Linux 容器映像。 使用 WSL 意味着不需要传统 Linux 虚拟机或双启动设置的开销。

  1. 安装 WSL 2。 请确保已重启计算机并正在使用 WSL 2。 还需要成功安装 Linux 内核更新包。
  2. 安装使用 WSL 的 Linux 发行版。 虽然我们的虚拟机使用 Ubuntu,但可以为容器映像选择任何想要的发行版。 请考虑使用 Ubuntu 20.04 LTS 或更高版本。
  3. 使用 WSL 2 安装适用于 Windows 的 Docker 桌面。 有关直接下载链接,请转到 适用于 Windows 的 Docker 桌面 (外部)

验证 WSL 2 设置

  • 打开 PowerShell
  • 请运行 wsl -l -v 以检查 docker-desktop 和 ubuntu 应用程序是否正在运行 WSL 2 (版本 2)

请验证 Docker 是否为 WSL 正确设置

  • 打开 WSL 终端
  • 请运行 docker 版本 以确认已安装 Docker,并且使用的操作系统为 Linux

提示

若要开发和调试 Linux C++ 应用程序,请在 Visual Studio 2019 中使用 WSL

获取 PlayFab 容器注册表登录凭据

Azure 容器注册表帐户与 PlayFab 帐户相关联。 仅你有权访问上传的容器。 此 Azure 容器注册表是免费的。

  • 在 Game Manager 中,选择游戏,然后多人游戏>服务器。 接下来,选择右侧“新建内部版本”,以打开内部版本创建页。
  • 选择 Linux 作为虚拟机操作系统。
  • 记下登录凭据 - 名称、密码及 customer5555555.azurecr.io,因为稍后需要此信息

已选择 Linux 平台的新构建

如果想使用 PowerShell/API,请调用 GetContainerRegistryCredentials API 来检索容器注册表地址、用户名和密码。

创建并推送 Linux 容器映像到 Azure 容器注册中心

这些步骤可帮助创建和推送自定义 Linux 容器映像。

将游戏服务器应用程序与 GSDK 集成

与使用 Windows 服务器类似,必须将游戏服务器代码与 PlayFab 多人服务器 SDK (GSDK) 集成。 这可以是容器映像的一部分。

有关说明,请参阅 授权游戏服务器内部版本使用 PlayFab 游戏服务器 SDK (GSDK) 集成游戏

创建 Dockerfile

Dockerfile 是一个没有扩展名的文本文件,包含生成给定容器映像所需的所有命令。

  1. 打开 记事本 或任何合适的编辑器
  2. 添加运行和构建容器所需的特定命令。 有关此文件的示例,请参阅 包装器示例 中提供的 DockerFile。 有关如何创建此文件的详细信息,请参阅 创建 Dockerfile (外部) 时的 Dockerfile 格式 (外部) 和最佳做法
  3. 将文件另存为 Dockerfile,理想情况下保存在空文件夹/目录中。 应该把构建容器映像所需的其他文件添加到该文件夹中。

使用 记事本 时的保存说明:

  • 选择 文件>另存为... 以打开保存选项
  • 转到要将文件保存到的文件夹
  • 文件名下:,使用 “Dockerfile”,包括引号。
  • 对于 “另存为类型:”,选择“所有文件”
  • 选择 UTF-8 编码
  • 选择 “保存”

构建并上传 Linux 容器映像

  1. 打开 Linux 终端,确保已安装 Docker。
  2. 使用从先前步骤中获取的登录凭据,运行以下 Docker 命令。 然后按照屏幕上的说明输入用户名和密码。
docker login customer5555555.azurecr.io

docker 登录 将使你登录到 Azure 容器注册表中,如 Game Manager 中所示。

username: customer5555555
password: HRDFOdIebJkvBAS+usa55555555
  1. 构建容器映像

运行以下命令,使用所在文件夹/目录中的 Dockerfile 构建容器映像。 请注意,docker build 命令末尾有一个“.”。

-t 标志指定新容器映像的名称: 标记信息。 如果构建成功,将使用它们。 如果存在构建错误,则必须在进入下一步之前将其修复。

在下面的示例中,存储库名称 customer5555555.azurecr.io/pvp_gameserver ,标记为 v1。 有关详细信息,请参阅 docker 内部版本命令参考 (外部链接)Build Dockerfile (外部链接)

使用 WSL 时,Windows C: 驱动器装载在 /mnt/c。

  • 然后运行 cd /mnt/c/path/to/your/Dockerfile 切换到 Dockerfile 所在的路径。 有关详细信息,请参阅 访问 C 驱动器
docker build -t customer5555555.azurecr.io/pvp_gameserver:v1 .

提示

使用 Linux 时,请运行 pwd 以了解当前所在目录。

  1. 上传容器映像

运行以下命令,将映像推送到 Azure PlayFab 容器注册表。 为上传的容器映像选择有意义且有用的名称: 标记组合。 然后使用 docker push 或其他容器注册表客户端将容器上传到 PlayFab 运营的注册表。

docker tag hello-world customer5555555.azurecr.io/pvp_gameserver:v1
docker push customer5555555.azurecr.io/pvp_gameserver:v1

检查容器是否已上传

上传容器后,返回到 Game Manager 中的 “新建构建” 页,然后选择 “刷新图像”。 将能够在列表中看到图像并将其选中。 或者,可以使用 ListContainerImages API 调用以列出上传的容器映像。

现在已准备好部署服务器。 有关说明,请参阅 PlayFab 门户 - Game Manager使用 PowerShell/API

Windows 和 Linux 容器映像差异

对于许多开发人员来说,使用 Windows 托管容器是首选的简单和默认选择。 但是,部署在虚拟机上的 Linux 容器映像每小时享受更便宜的费率。

注意

无论使用的是 Windows 还是 Linux 容器映像,都可以完全自定义游戏服务器。 使用 Windows 服务器时,可以通过上传资产来自定义托管容器映像。

下表列出了创建和使用它们时的一些差异。

开发人员选项 Windows Linux
开发设备操作系统 Windows 操作系统 适用于 Linux 的 Windows 子系统 (WSL) 或 Linux 操作系统 (使用双操作系统或虚拟机)
容器映像 使用托管容器映像进行直接部署。 仍可以通过将其他文件作为资产上传来自定义容器。 需要执行其他工作,因为必须创建自己的自定义容器映像,以便完全控制。

使用 API 管理 Linux 容器映像

可以使用 API 管理 Linux 容器映像。 对于构建生命周期的其余部分 (查看使用情况、更新区域和 standingBy 配置、删除) 请使用 Game Manager 管理它们。

  • GetContainerRegistryCredentials: 检索容器注册表地址、用户名和密码
  • ListContainerImagesListContainerImageTags: 确保列出新映像和标签 (有时可能需要几分钟时间才能将映像完全注册到系统中)
  • CreateBuildWithCustomContainer: 使用自定义容器构建生成。 指定之前上传的已标记的映像。 确保在请求中设置了以下属性:
    • ContainerImageReference - 先前上传的图片名称和标签 (在上面的 ListContainerImages 和 ListContainerImageTags 中可见)。
    • ContainerFlavor - "CustomLinux"
    • ContainerRunCommand (可选) - 如果容器没有默认运行命令,可以使用此属性提供要运行的命令以及任何参数。

另请参阅