Linux コンテナー イメージを作成してデプロイする
この記事では、Linux コンテナー イメージの作成とデプロイに役立つ特定の手順の概要を説明します。
「VM の作成」で説明されているように、当社のサービスを使用する際の予算と需要に応じて、VM をゲーム サーバーとしてグローバルに自動的にスピン アップするように構成します。 これを行うには、VM を明示的に作成するのではなく、ユーザーの代わりに VM を作成する方法を決定するパラメーターを定義します。 このプロセスは、ビルドのデプロイまたは作成と呼ばれます。
PlayFab マルチプレイヤー サーバーは、Linux ベースと Window sベースの両方のゲーム サーバーを展開できます。 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 仮想マシンやデュアルブート セットアップのオーバーヘッドは必要ありません。
- WSL 2 をインストールします。 マシンを再起動し、WSL 2 を使用していることを確認してください。 また、Linux カーネル アップデート パッケージが正常にインストールされている必要があります。
- WSL を使用する Linux ディストリビューションをインストールします。 VM は Ubuntu を使用していますが、コンテナー イメージに必要なディストリビューションを選択できます。 Ubuntu 20.04 LTS 以降のバージョンの使用を検討してください。
- WSL 2 を使用して Windows 用の Docker デスクトップをインストールします。 直接ダウンロード リンクについては、Docker Desktop for Windows (外部サイト) にアクセスしてください。
WSL 2 の設定を確認する
- PowerShell を開く
- wsl -l -v を実行して、docker-desktop アプリケーションと ubuntu アプリケーションの両方が WSL 2 (バージョン 2) を実行していることを確認します。
Docker が WSL 用に正しく設定されていることを確認する
- WSL ターミナルを開く
- docker version を実行して、Docker がインストールされ、使用されている OS が Linux であることを確認します。
ヒント
Linux C++ アプリケーションの開発とデバッグには、Visual Studio 2019 の WSL を使用します。
PlayFab コンテナー レジストリのサインイン資格情報を取得する
Azure コンテナー レジストリ アカウントは、PlayFab アカウントに関連付けられています。 あなただけがそこにアップロードされたコンテナにアクセスできます。 この Azure コンテナー レジストリは無料です。
- ゲーム マネージャーで、ゲーム タイトルを選択し、次に [マルチプレーヤー]>[サーバー] の順に選択します。 次に、右側の [新しいビルド] を選択して、ビルド作成ページを開きます。
- 仮想マシンのオペレーティング システムとして Linux を選択します。
- この情報は後で必要になるため、ログイン資格情報の名前、パスワード、および customer5555555.azurecr.io をメモしてください。
PowerShell/API を使用する場合は、GetContainerRegistryCredentials API を呼び出して、コンテナー レジストリのアドレス、ユーザー名、およびパスワードを取得します。
Linux コンテナー イメージを作成して Azure Container Registry にプッシュする
これらの手順は、カスタム Linux ンテナー イメージを作成してプッシュするのに役立ちます。
ゲーム サーバー アプリケーションを GSDK と統合する
Windows サーバーの使用と同様に、ゲーム サーバー コードを PlayFab マルチプレーヤー サーバー SDK (GSDK) と統合する必要があります。 これは、コンテナー イメージの一部にすることができます。
手順については、「ゲーム サーバー ビルドの作成」および「タイトルと PlayFab ゲームサーバー SDK (GSDK) の統合」を参照してください。
Dockerfile を作成する
Dockerfile は拡張子のないテキスト ファイルであり、特定のコンテナー イメージを構築するために必要なすべてのコマンドが含まれています。
- メモ帳または適切なエディタを開きます
- コンテナの実行と構築に必要な特定のコマンドを追加します。 このファイルの例については、Wrapper サンプルで提供されている DockerFile を参照してください。 このファイルの作成方法の詳細については、「Dockerfile 形式 (外部サイト)」 および 「Dockerfile を作成する際のベスト プラクティス (外部サイト)」 を参照してください。
- ファイルを Dockerfile として、理想的には空のフォルダ/ディレクトリに保存します。 コンテナー イメージをビルドするために必要な他のファイルをこのフォルダに追加する必要があります。
メモ帳を使用する際の保存の手順:
- [ファイル]>[名前を付けて保存...] の順に選択して、保存オプションを開く
- ファイルを保存するフォルダに移動する
- [ファイル名:] で、引用符を含めて "Dockerfile" を使用します。
- [タイプとして保存:] の場合、[すべてのファイル] を選択します
- [UTF-8] エンコードを選択します
- [保存] を選択します
Linux コンテナ イメージをビルドしてアップロードする
- Linux ターミナルを開き、Docker がインストールされていることを確認します。
- 前の手順で取得したサインイン資格情報を使用して、次の Docker コマンドを実行します。 次に、画面の指示に従って、ユーザー名とパスワードを入力します。
docker login customer5555555.azurecr.io
docker sign in は、ゲーム マネージャーに表示されるように Azure コンテナー レジストリにログインします。
username: customer5555555
password: HRDFOdIebJkvBAS+usa55555555
- コンテナー イメージを構築する
以下のコマンドを実行して、現在のフォルダー/ディレクトリにある Dockerfile を使用してコンテナー イメージをビルドします。 docker build コマンドの最後に "." があることに注意してください。
-t フラグは、新しいコンテナイメージの name:tag 情報を指定します。 それらは、ビルドが成功した場合に使用されます。 ビルド エラーがある場合は、次の手順に進む前に修正する必要があります。
以下の例では、リポジトリ名は customer5555555.azurecr.io/pvp_gameserver で、タグは v1 です。 詳細については、docker build コマンド リファレンス (外部リンク) および Building 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 を実行して、現在どのディレクトリにいるかを確認します。
- コンテナー イメージをアップロードする
以下のコマンドを実行して、イメージを Azure PlayFab コンテナー レジストリにプッシュします。 アップロードしたコンテナ画像に、意味があり役立つ名前とタグの組み合わせを選択します。 次に、docker push または別のコンテナー レジストリ クライアントを使用して、Azure PlayFab が運用しているレジストリにコンテナーをアップロードします。
docker tag hello-world customer5555555.azurecr.io/pvp_gameserver:v1
docker push customer5555555.azurecr.io/pvp_gameserver:v1
コンテナがアップロードされていることを確認する
コンテナがアップロードされたら、ゲーム マネージャーの [新規ビルド] ページに戻り、[イメージの更新] を選択します。 リストに画像が表示されているので、それを選択できます。 または、ListContainerImages API 呼び出しを使用して、アップロードされたコンテナー画像を一覧表示することもできます。
これで、デプロイする準備が整いました。 手順については、「PlayFab ポータル — ゲーム マネージャー」 および 「PowerShell/API」 の使用を参照してください。
Windows と Linux のコンテナー イメージの違い
多くの開発者にとって、Windows 管理コンテナを使用することは、シンプルな既定の選択として推奨されます。 ただし、仮想マシンにデプロイされた Linux コンテナー イメージは、1時間ごとで考えると割安です。
注意
Windows または Linux のコンテナ イメージを使用しているかどうかに関係なく、ゲーム サーバーを完全にカスタマイズすることができます。 Windows サーバーを使用する場合は、アセットをアップロードして管理対象コンテナー イメージをカスタマイズします。
次の表に、それらを作成および使用する際のいくつかの違いを示します。
開発者向けオプション | Windows | Linux |
---|---|---|
開発デバイス OS | Windows OS | Linux 用 Windows サブシステム (WSL) または (デュアル OS または VM を使用した) Linux OS |
コンテナー イメージ | マネージド コンテナー イメージを使用した簡単なデプロイ。 追加のファイルをアセットとしてアップロードすることで、コンテナーをカスタマイズできます。 | 完全な制御を提供する独自のカスタム コンテナー イメージを作成する必要があるため、追加の作業が必要です。 |
API を使用して Linux コンテナー イメージを管理する
API を使用して Linux コンテナー イメージを管理できます。 ビルドの他のライフサイクル (使用状況の表示、リージョンの更新、構成の待機、削除) は、ゲーム マネージャーを使用して管理できます。
- GetContainerRegistryCredentials: コンテナー レジストリのアドレス、ユーザー名、およびパスワードを取得します。
- ListContainerImages と ListContainerImageTags: 新しいイメージとタグが一覧に表示されるようにします (イメージがシステムで完全に登録されるまでに数分かかることがあります)。
-
CreateBuildWithCustomContainer: カスタム コンテナーを使用したビルドを作成します。 アップロード済みのタグ付けしたイメージを指定します。 その要求で以下のプロパティが設定されていることを確認します。
- ContainerImageReference - 以前にアップロードされた画像名とタグ (上記の ListContainerImages と ListContainerImageTags に表示されます)。
- ContainerFlavor - "CustomLinux"
- ContainerRunCommand (省略可能) – このプロパティでは、実行される既定のコマンドがコンテナーにない場合に実行するコマンドと引数を指定できます。