Docker 内にマウントするディレクトリ構成を変更する で次のチュートリアルの準備ができたので、今回からチュートリアルを進めていく。
参考:
- 統合ターミナル を開きます。
- プロジェクトを格納するディレクトリ (cd) に変更します。
- 次のコマンドを実行します。
dotnet new webapp -o RazorPagesMovie code -r RazorPagesMovie
dotnet new
コマンド : RazorPagesMovie フォルダーに新しい Razor Pages プロジェクトが作成されます。code
コマンドを実行すると、Visual Studio Code の現在のインスタンス内で RazorPagesMovie フォルダーが開きます。
Docker 内にマウントするディレクトリ構成を変更する で作成した Projects ディレクトリでやってみる。
まずは dotnet SDK コンテナを立ち上げる。
$ ./run_SDK_container.sh
# ls
Projects etc media proc sbin tmp
bin home mnt root srv usr
dev lib opt run sys var
# cd Projects/
# ls
WebApp
ホストの Projects ディレクトリがマウントされていて、その中間で移動した。 ここで RazorPagesMovie を作成する。
# dotnet new webapp -o RazorPagesMovie
Getting ready...
The template "ASP.NET Core Web App" was created successfully.
This template contains technologies from parties other than Microsoft, see https://aka.ms/aspnetcore/3.1-third-party-notices for details.
Processing post-creation actions...
Running 'dotnet restore' on RazorPagesMovie/RazorPagesMovie.csproj...
Determining projects to restore...
Restored /Projects/RazorPagesMovie/RazorPagesMovie.csproj (in 131 ms).
Restore succeeded.
# ls
RazorPagesMovie WebApp
作成できた。とりあえず実行してみる。
# cd RazorPagesMovie/
# dotnet run
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {4d734ed9-6c6d-45be-850c-6827b7f10d84} may be persisted to storage in unencrypted form.
warn: Microsoft.AspNetCore.Server.Kestrel[0]
Unable to bind to https://localhost:5001 on the IPv6 loopback interface: 'Address not available'.
warn: Microsoft.AspNetCore.Server.Kestrel[0]
Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Address not available'.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: /Projects/RazorPagesMovie
動いたが、 URL を変更しないとホスト側からアクセスできない。中止して変更する。
ホスト側から Projects/RazorPagesMovie にアクセスする。
$ cd Projects
$ ls
RazorPagesMovie WebApp
$ cd RazorPagesMovie
Program.cs を編集する。
$ vimr Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace RazorPagesMovie
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.UseUrls("http://0.0.0.0:5000"); // 追加
});
}
}
実行してホスト側から接続して確認してみる。 コンテナ側で動作させる。
# dotnet run
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://0.0.0.0:5000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: /Projects/RazorPagesMovie
warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3]
Failed to determine the https port for redirect.
ホスト側から http://localhost:5000 にアクセスする。
URLを https://localhost:5001 でアクセスできるようにしてみる。 ホスト側でもう一度 Program.cs を変更する。
$ vimr Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace RazorPagesMovie
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.UseUrls(new [] { //変更
"http://0.0.0.0:5000"
, "https://0.0.0.0:5001"
});
});
}
}
実行してみる。
# dotnet run
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://0.0.0.0:5000
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://0.0.0.0:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: /Projects/RazorPagesMovie
URLが追加されている。アクセスしてみる。
Firefox だと http://0.0.0.0:5000 へアクセスしてもリダイレクトされ、上の警告画面が表示される。
特に危険な場所に向かっているわけではないので、 危険性を承知で続行
ボタンを押す。
以下、このプロジェクトで生成されたファイルの情報が書かれていたので引用する。
プロジェクト ファイルを確認する
以降のチュートリアルで使用するメイン プロジェクト フォルダーとファイルの概要を次に示します。
Pages フォルダー
Razor ページとサポート ファイルが含まれます。 各 Razor ページは、次のファイルのペアとなります。
- .cshtml ファイル: HTML マークアップと、Razor 構文を使用した C# コードが含まれます。
- .cshtml.cs ファイル: ページ イベントを処理する C# コードが保存されます。
サポート ファイルには、アンダー スコアで始まる名前が付けられます。 たとえば、 _Layout.cshtml ファイルでは、すべてのページに共通の UI 要素が構成されます。 このファイルでは、ページの上部に表示されるナビゲーション メニューと、 ページの下部に表示される著作権の通知が設定されます。 詳細については、「 ASP.NET Core でのレイアウト 」を参照してください。
wwwroot フォルダー
HTML ファイル、JavaScript ファイル、CSS ファイルなどの静的ファイルが格納されます。 詳細については、「 ASP.NET Core の静的ファイル 」を参照してください。
appSettings.json
接続文字列などの構成データが保存されます。 詳細については、「 ASP.NET Core の構成 」を参照してください。
Program.cs
プログラムのエントリ ポイントが保存されます。 詳細については、「 .NET での汎用ホスト 」を参照してください。
Startup.cs
アプリの動作を構成するコードが含まれています。 詳細については、「 ASP.NET Core でのアプリケーションのスタートアップ 」を参照してください。