背景と目的
その昔、コードを書いている時点では、このシステムが 20 年以上も使われ続けているなんて、全く想像していませんでした。そのシステムは、5 年に 1 回訪れるハードウェア入れ替えにより計 4 回引越を行いました。最初ノート PC 上で動いていたそのシステムは、タワー型の PC サーバーやデータセンターの 1U サーバーに引越、その後仮想化基盤の上で 2 回引越ました。そして今後も使われる事が想定されるそのシステムは、コンテナ化して Azure の AppService に引っ越す事になりました。これらのストーリーは一部フィクションですが、こんなシステムが世の中に存在するのです。
今回は、.NET Framwork 2.0 を用いた ASP.NET Web アプリを VB で作成して、コンテナ化した上で Azure App Service で動かしてみたいと思います。
前提条件
検証で使用したツールは下記の通りです。
- Visual Studio 2022
- Docker Desktop for Windows
検証用のアプリを作成
新しいプロジェクト作成
プロジェクト名とフレームワーク選択
空のまま作成
Web フォームを追加
Default にする
HTML を変更
<div>
<p>
Machine Name: <asp:Label id="Label1"
Text="Machine Name"
runat="server"/>
</p>
<p>
Runtime Version: <asp:Label id="Label2"
Text="Runtime Version"
runat="server"/>
</p>
</div>
コードを表示
コードを追加
Label1.Text = Environment.MachineName
Label2.Text = Environment.Version.ToString()
IIS Express で Debug
ローカル環境で動作確認
Terminal を開く
Dockerfile を作成
Out-File Dockerfile -encoding ascii
devenv /edit Dockerfile
FROM mcr.microsoft.com/dotnet/framework/sdk:3.5 AS build
WORKDIR /app
COPY . .
RUN nuget restore
RUN msbuild /p:Configuration=Release -r:False
FROM mcr.microsoft.com/dotnet/framework/aspnet:3.5-windowsservercore-ltsc2019 AS runtime
WORKDIR /inetpub/wwwroot
COPY --from=build /app .
Docker で動作確認
docker build -t aspnetwebvb20 .
docker run --name aspnetwebvb20 -d -p 8000:80 aspnetwebvb20
http://localhost:8000
docker stop aspnetwebvb20
docker rm aspnetwebvb20
AppService 作成
$region = "japaneast"
$prefix = "aspnetwebvb20"
az group create `
--name ($prefix + "-rg") `
--location $region
az acr create `
--name ($prefix + "acr") `
--resource-group ($prefix + "-rg") `
--sku Basic `
--admin-enabled true
az acr build `
--platform windows `
--registry ($prefix + "acr") `
--image $prefix `
.
az appservice plan create `
--name ($prefix + "-plan") `
--resource-group ($prefix + "-rg") `
--hyper-v `
--sku P1V3
$acrpass = az acr credential show `
--resource-group ($prefix + "-rg") `
--name ($prefix + "acr") `
--query passwords[0].value `
--output tsv
az webapp create `
--name ($prefix + "-app") `
--resource-group ($prefix + "-rg") `
--plan ($prefix + "-plan") `
--deployment-container-image-name ($prefix + "acr.azurecr.io/" + $prefix + ":latest") `
--docker-registry-server-user ($prefix + "acr") `
--docker-registry-server-password $acrpass
AppService で動作確認
参考
az group delete `
--name ($prefix + "-rg")
下記は、参考サイトです。
https://github.com/microsoft/dotnet-framework-docker/blob/main/samples/aspnetapp/Dockerfile