アプリを “DemoFlexApp” という名前で Visual Studio のデフォルトの “Projects” ディレクトリに保存します。次のダイアログで “Web Application” を選択し、“OK” をクリックします。
これでアプリが生成されます。F5 キーを押してローカルで試してみましょう。アプリがビルドされ、実行されてブラウザ ウィンドウに表示されます。表示されたらブラウザを閉じ、デバッグ セッションを停止して、アプリを停止します。
ステップ 2 : Docker コンテナとしてパッケージ
次のステップでは、作成したアプリを App Engine flexible で実行する準備をしましょう。最初に、コンテナとその内容を定義します。Docker をインストールする必要はありませんので、ご心配なく。App Engine flexible はデプロイ プロセスの一環として、Docker イメージをリモートでビルドしてくれます。
ここではコマンドラインから作業します。“Windows” キーを押しながら “R” キーを押し、ダイアログで “cmd.exe” とタイプして、新しいコマンドライン ウィンドウを開きます。
そして、ステップ 1 で作成したプロジェクトを含むディレクトリに移動してください。プロジェクトのパスを取得するには、Visual Studio のソリューション エクスプローラーでプロジェクトを右クリックし、“Open Folder in File Explorer(エクスプローラーでフォルダーを開く)” オプションを選びます。
エクスプローラー ウィンドウからプロジェクトのパスをコピーし、コマンドライン ウィンドウに貼り付けます。
まず、アプリの Docker イメージの内容を 1 つのディレクトリに作成します。ディレクトリの中には、アプリのすべてのパッケージ、ページ、クライアント サイド スクリプトが含まれます。.NET CLI がこのディレクトリを作成し、アプリを “発行” します。そのためのコマンドは次のとおりです。
dotnet publish -c Release
アプリは Release 構成でデフォルトの publish ディレクトリに発行されます。アプリの発行プロセスでは .NET CLI がすべての依存関係を解決し、他のすべてのファイルも含めてこの “発行先” ディレクトリにまとめます。ちなみに、このディレクトリのことを Microsoft は
.NET Core Portable App と呼んでいます。
発行先ディレクトリは、アプリを構成するすべてのファイルを含み、.NET Core がサポートするあらゆるプラットフォームでアプリを実行するのに利用できます。以下のコマンドにより、このディレクトリからアプリを実行できます。
cd bin\Release\netcoreapp1.0\publish
dotnet DemoFlexApp.dll
このコマンドを実行するときは、すべてのリソースが見つかるように、必ず発行先ディレクトリをカレント ディレクトリにしておきます。
コンテナとその内容を定義したら、次の作業は App Engine flexible にデプロイするアプリを構成することです。そのためには以下の 2 つのファイルが必要になります。
- Dockerfile : アプリ ファイルを Docker コンテナにパッケージする方法を記述します。
- app.yaml : Google Cloud SDK ツールにアプリのデプロイ方法を知らせます。
アプリのデプロイは、上で作成した発行先ディレクトリから行うことになります。
発行先ディレクトリに “Dockerfile” という空のファイルを作成し、以下の行をコピーして貼り付け、保存します。
FROM microsoft/dotnet:1.0.1-core
COPY . /app
WORKDIR /app
EXPOSE 8080
ENV ASPNETCORE_URLS=http://*:8080
ENTRYPOINT ["dotnet", "DemoFlexApp.dll"]
Dockerfile は、Docker イメージの内容を記述したものです。まず既存イメージを指定し、続いてファイルの追加など、既存イメージに対する変更を記述していきます。
私たちのリポジトリの Dockerfile では、最初に
Microsoft の公式イメージを指定します。このイメージは、.NET Core アプリを実行するようにあらかじめ構成されています。さらに、このディレクトリからアプリを実行するのに必要なアプリ ファイルやツールを追加しています。
この Dockerfile に含まれる 1 つの重要な構成が、アプリが受信トラフィックをリッスンするポートを、
App Engine flexible の要件に従って 8080 に設定していることです。これは、環境変数
ASPNETCORE_URLS で設定されています。ASP.NET Core アプリはこの環境変数を使って、リッスンするポートを決めています。
一方、app.yaml は、アプリを App Engine(今回は App Engine flexible)にデプロイする方法を記述したものです。以下は、アプリを App Engine flexible で実行するうえで必要最小限の app.yaml ファイルです。カスタム ランタイムと flexible environment を指定しています。
発行先ディレクトリに “app.yaml” という新しいファイルを作成し、以下の内容をコピーして貼り付け、保存します。
runtime: custom
vm: true
ステップ 3 : App Engine flexible にデプロイ
Dockerfile と app.yaml を発行先ディレクトリに保存したら、アプリを App Engine flexible にデプロイする準備は完了です。
アプリのデプロイには Google Cloud SDK を使います。
こちらの手順に従って Google Cloud SDK をマシンに完全にセットアップしてください。課金を有効にした
Google Cloud Platform プロジェクトも必要になります。
アプリを構成し、アプリをデプロイするプロジェクトを選択したら、いよいよ App Engine flexible へのデプロイです。デプロイするには以下のコマンドを実行します。
gcloud app deploy app.yaml
このコマンドは、完了するまでしばらく時間がかかります。最初は特にそうです。すべてのセットアップを実行しなければならないからです。コマンドが完了したら、新たにデプロイされたアプリをブラウザで表示してみましょう。
gcloud app browse
表示されましたね! 以上で完了です。ASP.NET Core アプリを Docker コンテナにパッケージし、App Engine flexible にデプロイしてみました。多くの ASP.NET アプリが App Engine で実行されることを、私たちは楽しみにしています。
* この投稿は米国時間 10 月 5 日、Software Developer である Ivan Naranjo によって投稿されたもの(投稿はこちら)の抄訳です。
- Posted by Ivan Naranjo, Software Developer