前回は ACR、AKS および SQL を構築しました。今回は Visual Studio 2019 と dotnet core 3.0 の asp.net アプリを作成して SQL とつなげていきます。
ASP.NET アプリの作成
まずはアプリを用意します。
1. Visual Studio 2019 を起動して「新しいプロジェクトの作成」をクリック。
2.「ASP.NET Core Web アプリケーション」を選択して「次へ」。
3. プロジェクト名を「core3webapp」をして「作成」。
4.「Web アプリケーション (モデル ビュー コントローラー)」を選択し、以下オプションに変更してから「作成」。
作成したアプリの確認
テンプレートから作成したアプリの動作を確認します。
## Docker
テンプレートで Docker 対応を指定したため、Dockerfile が作成され、ビルドすると Docker イメージが作成されます。
csproj ファイル
プロジェクトファイルでは、以下のように DockerDefaultTargetOS が指定されます。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<UserSecretsId>aspnet-core3webapp-01C60103-98E3-4CEB-874B-1FCA99BB1DE6</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
...
Dockerfile
Docker イメージの作成定義ファイルで、複数のステップで構成されています。既定で作成される Dockerfile の中身に解説のコメントをつけてみました。
# aspnet 3.0-buster-slim イメージを使う。別名 base と指定
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
# ワーキングディレクトリとして /app を指定
WORKDIR /app
# ポート 80 をオープン
EXPOSE 80
# ポート 443 をオープン
EXPOSE 443
# dotnet core 3.0 SDK イメージを使う。別名 build と指定
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
# ワーキングディレクトリとして /src を指定
WORKDIR /src
# core3webapp.csproj だけコピー
COPY ["core3webapp/core3webapp.csproj", "core3webapp/"]
# 依存関係をリストア
RUN dotnet restore "core3webapp/core3webapp.csproj"
# 全てのフォルダとファイルをコピー
COPY . .
# ワーキングディレクトリを /src/core3webapp に変更
WORKDIR "/src/core3webapp"
# リリースビルドを実行
RUN dotnet build "core3webapp.csproj" -c Release -o /app/build
# 上記の build 環境の別名を publish と指定
FROM build AS publish
# publish コマンドで公開用フォルダ作成
RUN dotnet publish "core3webapp.csproj" -c Release -o /app/publish
# base 環境の別名を final と指定
FROM base AS final
# ワーキングディレクトリとして /app を指定
WORKDIR /app
# publish 環境の /app/publish をすべてコピー
COPY --from=publish /app/publish .
# コンテナ開始時に dotnet.exe で core3webapp.dll を起動
ENTRYPOINT ["dotnet", "core3webapp.dll"]
Docker イメージ
プロジェクトをビルドすると以下の Docker イメージがローカルにキャッシュされます。
ビルド中に取得したイメージや最終イメージが表示されます。
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
core3webapp latest 2f23df6191c3 9 minutes ago 226MB
<none> <none> 6591813430b3 9 minutes ago 923MB
mcr.microsoft.com/dotnet/core/sdk 3.0-buster 170a7f2ec51a 6 hours ago 689MB
mcr.microsoft.com/dotnet/core/aspnet 3.0-buster-slim 930743cb4e19 14 hours ago 207MB
データベース接続と初期 DB 作成
1. applications.json のデータベース接続文字列を変更。
- IP アドレス:
kubectl get svc
の結果 - データベース名: Users に変更
- 認証: sa 認証
- パスワード: yaml 作成時に指定した MyC0m9l&xP@ssw0rd
{
"ConnectionStrings": {
"DefaultConnection": "Server=52.243.63.3;Database=Users;User Id=sa;Password=MyC0m9l&xP@ssw0rd;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
2. ツール | Nuget パッケージ マネージャー | パッケージ マネージャーコンソールを起動して、以下コマンドを実行。Done のメッセージが出るまで待機。
PM> Update-Database
デバッグ実行
最後に動作を確認します。
1. F5 キーを押下してアプリケーションをデバッグ実行。ブラウザが開いたら「Register」をクリック。
2. メールをパスワードを入力して「Register」をクリック。
3.「Click here to confirm your account」をクリックして登録を完了。
5. Azure Data Studio でデータベースの状況を確認。
6. コマンドプロンプトやシェルより実行中の docker コンテナを docker ps
で確認。
- dreamy_napier はランダムでつく名前
>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
46edafe475b7 core3webapp:dev "tail -f /dev/null" 12 seconds ago Up 11 seconds 0.0.0.0:58637->80/tcp, 0.0.0.0:44396->443/tcp dreamy_napier
7. コンテナにアタッチしてフォルダ構造を確認。
>docker exec -it 46eda /bin/bash
root@46edafe475b7:/app# ls
Areas Dockerfile Properties appsettings.Development.json core3webapp.csproj wwwroot
Controllers Models Startup.cs appsettings.json core3webapp.csproj.user
Data Program.cs Views bin obj
8. dotnet の情報から dotnet core 3.0 ランタイムだけであることを確認。
root@46edafe475b7:/app# dotnet --info
It was not possible to find any installed .NET Core SDKs
Did you mean to run .NET Core SDK commands? Install a .NET Core SDK from:
https://aka.ms/dotnet-download
Host (useful for support):
Version: 3.0.0
Commit: 95a0a61858
.NET Core SDKs installed:
No SDKs were found.
.NET Core runtimes installed:
Microsoft.AspNetCore.App 3.0.0 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 3.0.0 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download
まとめ
今回は Visual Studio のテンプレートから作成した asp.net core 3.0 アプリが AKS 上の SQL と繋げることができました。次回は AKS 上にアプリをデプロイします。