考え方
基本的にチュートリアルのまんまです。
以下を実施する事で、.NET Framework 2.0 でも動作させる事が出来ます。
- コンテナオーケストレーターサポートの追加時にターゲットフレームワークを 4.5 以降に変更(その後 2.0 に戻す)
- Dockerfile のベースイメージを microsoft/aspnet:3.5 に変更
確認用アプリケーション
動作確認用の WebForm アプリケーションを用意します。
プロジェクトテンプレートから0「ASP.NET Web アプリケーション (.NET Framework)」を選択し、フレームワーク「.NET Framework 2.0」で新規プロジェクトを作成します。
コードは以下のように。
ホスト名とランタイムバージョンを表示するだけです。
namespace
WebForm
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
lblMachineName.Text = Environment.MachineName;
lblRuntimeVersion.Text = System.Reflection.Assembly.GetCallingAssembly().ImageRuntimeVersion;
}
}
}
以下、このアプリを Service Fabric 上で動くようにしていきます。
フレームワークバージョンの変更
プロジェクトのプロパティを開き、ターゲットフレームワークを 4.5 以上に設定します。
※4.5 未満では、この次のコンテナオーケストレーターサポート追加時にエラーが発生します。
コンテナオーケストレーターサポートの追加
WebForm のプロジェクトを右クリックして、「追加」->「コンテナーオーケストレーターサポート」から、「Service Fabric」を選択します。
コンテナーオーケストレーターサポートを追加すると、「(プロジェクト名)Application」というプロジェクトが追加されます。
また、WebFrom プロジェクトには Dockerfile (と、config ファイル)が追加されます。
実行すると、ローカルの Service Fabric ランタイム上で WebForm アプリが起動します。
※初回は クソ重い Windows Server のコンテナイメージがダウンロードされます。通信量を気にしなくて良い環境で実行しましょう。
URLが実行しているPCのホスト名になり、Environment.MachineName
の値がコンテナIDになっている事がわかります。
当然ながらランタイムは 4.0 ですね。
.NET Framework 2.0 で動かす
プロジェクトのターゲットフレームワークを 2.0 に戻します。
また、プロジェクトに追加された Dockerfile を開き、使用するベースイメージを 3.5 に変更します。
これを実行すると、.NET 2.0 で動いていることが確認できます。
Azure へのデプロイ
Azure Service Fabric クラスターの作成
こちらもチュートリアル通りに VisualStudio から作成していきます。
まず Service Fabric プロジェクトを右クリックして「発行」を選択し、「Service Fabric アプリケーションの発行」フォームを開きます。
「接続のエンドポイント」で「新しいクラスタの作成」を選択します。
クラスター情報はお使いの環境に合わせて任意に設定してください。
仮想マシンイメージには「WindowsServer2016-Detacenter-with-Containers」を選択します。
※2018/10/05 現在。コンテナのベースイメージと互換性のあるOSを選択します。詳細は Windows Server コンテナーの OS とホスト OS の互換性 を参照してください。
「詳細」タブのポートには、 PackageRoot\ServiceManifest.xml の Endpoint に指定されているポート番号を追加します。
※ローカル実行した際のポート番号と同じです
全てのタブを正しく入力して「作成」すると Azure 上に Service Fabric クラスタが作成されます。
クラスタの作成にはかなり時間が掛かるので、接続可能になるまで気長に待ちましょう。
コンテナレジストリの作成
PowerShell で こちら のスクリプトを実行してコンテナレジストリを作成します。
Azure Portal から作成しても構いません。
Service Fabric クラスターのデプロイ
VisualStudio から再度「Service Fabric アプリケーションの発行」フォームを開き、作成した Service Fabric クラスターのエンドポイントとコンテナレジストリを選択して「公開」します。
Azure 上の Service Fabric でも動きました!
まとめ
Service Fabric SDK を使う事で、.NET Framework 2.0 の WebForm アプリケーションでも簡単なオペレーションでコンテナ化する事ができます。
レガシーアプリに手を入れる事なく、「レガシーなまま」 PaaS 環境にシフトする事ができるのは嬉しいですね。
現実的には、起動の遅さ(これは Windows Server コンテナイメージがクソ程デカいのが原因だと思う)とか課題はあるでしょうが、いわゆる「リフト&シフト」の一つの手段としてはアリじゃないかと思います。