「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[Visual Studio]] --[[Docker for Windows]] --[[Hyper-V コンテナ]] --[[ASP.NET Core]] ---[[ASP.NET Coreの開発]] ---[[ASP.NET Coreのデプロイ]] * 目次 [#i04718e7] #contents *概要 [#z33068ce] -[[Hyper-V コンテナ]](若しくはMicrosoft Azure Containers)~ '+ [[Docker for Windows]]を使用して、[[ASP.NET Core]]のデバッグ実行が可能。 -[[ASP.NET Coreの開発]]や[[ASP.NET Coreのデプロイ]]を考えていてココに行き着いた。 *手順 [#ed1a49b7] 以下の手順で検証・評価した。 **環境 [#f9c27a4b] -Win 10 Pro -Hyper-Vの有効化 -VS 2017 Community -.NET Core 2.0 **プロジェクトの作成 [#m5187e0f] [[ASP.NET Core MVC]]アプリケーションの作成 -[[Docker>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker]]サポートなし -認証なし **プロジェクトの設定 [#tf9569f1] -プロジェクトを作成した後にプロジェクトを右クリックしてDockerサポートを追加 #ref(1.png,left,nowrap,手順1,60%) -[[Hyper-V コンテナ]]上で動作するOS(Windows or Linux)を選択(ここではLinuxを選択)。 #ref(2.png,left,nowrap,手順2,60%) **インストレーション [#d15a687c] -[[Docker for Windows]]のインストール(ダウンロードに少々時間がかかる) #ref(3.png,left,nowrap,手順3,60%) -[[Docker for Windows]]のインストール・ウィザード~ ([[Docker>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker]] ≒ Linuxコンテナなので下のCheck Boxは外しておく) #ref(4.png,left,nowrap,手順4,60%) -[[Docker for Windows]]のインストール完了 #ref(5.png,left,nowrap,手順5,60%) **デバッグ実行の準備 [#n341b221] -デバッグのドロップダウン・リストから[[Docker>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker]]を選択した状態でデバッグ実行しようとすると、以下のエラー・メッセージが表示されるが、~ Docker CE for Windows(Docker Community Edition for Windows)はインストール済みであるので、PCの再起動を行ってみる。 #ref(6.png,left,nowrap,手順6,60%) -再起動後、[[Hyper-V]]上にLinux VMを確認できる(MobyLinuxVM)。 #ref(7.png,left,nowrap,手順7) -再度デバッグ実行を行うと、以下のエラー・メッセージが表示される。 #ref(8.png,left,nowrap,手順8,60%) -エラー・メッセージが以下のように変更される([[Docker>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker]]が実行されていないとのこと)。 #ref(9.png,left,nowrap,手順9,60%) -暫く経つと、以下のダイアログが表示された。~ OKを押下して再起動する(再起動に少々時間がかかる)。 #ref(10.png,left,nowrap,手順10,60%) -再起動を行うと、以下のダイアログボックスが表示されている(ログインはしなくてもいい)。 #ref(11.png,left,nowrap,手順11,60%) -この時点で、以下のdockerコマンドをcmdから実行すると、~ dockerコマンドが適切に実行され結果が返り、[[Docker>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker]](のクライアント)が実行されていることを確認する。 > docker version > docker run hello-world -デバッグ実行を開始すると、以下のcmdが起動し「何か」がダウンロードされ、 #ref(12.png,left,nowrap,手順12,60%) -次いで、以下のエラー・メッセージが表示されるので、 #ref(13.png,left,nowrap,手順13,60%) -メッセージ通り、[[Docker for Windows]]の設定で、ボリューム共有を有効にする。~ [[Docker for Windows]]の画面はタスクトレイ (Task tray) から起動する。~ 管理者アカウントのCredentialの入力を求められるので入力を行う。 #ref(14.png,left,nowrap,手順14,60%) -設定完了後、再度デバッグ実行を行うと、以下のダイアログが表示されるので、~ [アクセスを許可する]ボタンを押下し、VPNKitと言う組込みVPNツールのリスニング・ポートを開放する。 #ref(15.png,left,nowrap,手順15,60%) -これにより、アプリケーションが[[Hyper-V コンテナ]]内の[[Docker>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker]](Linuxコンテナ)で起動し、デバッグが開始される。 **ブレークポイントを設定してデバッグ実行する。 [#vf5605d5] -ブレークポイントを設定して実行すると、~ 以下のように、適切にデバッグ実行されていることを確認できる。 #ref(16.png,left,nowrap,手順16,60%) -本当にLinux上で動いているか心配なので、念のため、以下で確認する。 #ref(17.png,left,nowrap,手順17,60%) **環境についての確認を行う。 [#b6ded901] -[[Docker>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker]]側は、 --Webサーバ:[[Kestrel>ASP.NET CoreのWebサーバ#c9a915ba]]で動作する。 --DB:ホスト側のDBで動作させたい。 -後者のDBへのアクセスが可能かどうかDBMSアプリケーションを使用して確認する。~ (DBMSアプリケーションとしては、[[ASP.NET Core]]対応されたOpen棟梁テンプレートを使用する。) ***設定ファイル読み込み方法の変更 [#ba0a8f8a] -早速エラーが発生。DBアクセス以前に設定ファイルへのアクセスができない。 #ref(18.png,left,nowrap,手順18,60%) -以下のように調査すると、プロジェクト内のファイルがカレント・ディレクトリ(/app)にデプロイされることが解る。 #ref(19.png,left,nowrap,手順19,60%) -従って、 --プロジェクト内にファイルを配置し、~ (「リンクとして追加」の設定はNG、「出力ディレクトリにコピー」の設定は不要)~ これを読み取る方向性で対応するか、 --旧Azure PaaS時と同様に、埋め込まれたリソースで対応できる。~ 設定の仕方は、以下の「Azure Web Apps」で動作させる方法が参考になる。 ---Open 棟梁の使い方(実践編)第6回 - OSSコンソーシアム~ https://www.osscons.jp/joywo3d7c-537/#_537 ***SQL Serverへの接続 [#c4bc07f4] ホスト側のDBで動作させようとしたが、ハマりどころが多かったのでメモ。 -接続文字列 --ホストのIPアドレスは、10.0.75.1になる。 --Windows認証ではなく、SQL Server認証の接続文字列を使用する。 -Windows ファイアウォール --必要時応じて設定する。 --OFFにして通ったら絞るのがイイ。 -SQL Server 構成マネージャー~ Expressの場合は、SQL Server 構成マネージャーの設定も必要にある。 -参考 --[[つながらない! - SQL Server Express>つながらない!#d663cac3]] --networking - How to connect to docker host from container on Windows 10 (Docker for Windows) - Stack Overflow~ https://stackoverflow.com/questions/40746453/how-to-connect-to-docker-host-from-container-on-windows-10-docker-for-windows?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa ***変更点のスクショ [#qf813bc4] 以下は、[[ASP.NET Core MVC]]のOpen棟梁テンプレートの変更点のスクショです。 #ref(20.png,left,nowrap,手順20,60%) *余談 [#hd149d34] **PDBのタイプ [#o8d9c85e] [[Docker>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker]]側でライブラリのデバッグをする場合、ライブラリのPDBが、~ 「完全(full)」ではなくて、「ポータブル(portable)」である必要がある。 *参考 [#x2d9b382] -c# - Remote debugging asp.net core on linux server - Stack Overflow~ https://stackoverflow.com/questions/42483122/remote-debugging-asp-net-core-on-linux-server -Windows 10 に Docker for Windows をインストール|No IT No Life - おすぎやん サーバの設計・構築~ https://server-network-info.blogspot.jp/2017/09/windows-10-docker-for-windows.html **Microsoft Docs [#t0c26e72] -Visual Studio Tools for Docker と ASP.NET Core~ https://docs.microsoft.com/ja-jp/aspnet/core/host-and-deploy/docker/visual-studio-tools-for-docker -Visual Studio Tools for Docker (Windows 上の Visual Studio) を使用~ https://docs.microsoft.com/ja-jp/dotnet/standard/containerized-lifecycle-architecture/design-develop-containerized-apps/visual-studio-tools-for-docker --ローカルの Docker コンテナーでアプリをデバッグする~ https://docs.microsoft.com/ja-jp/azure/vs-azure-tools-docker-edit-and-refresh --リモート Docker ホストへの ASP.NET Core Linux Docker コンテナーのデプロイ~ https://docs.microsoft.com/ja-jp/azure/vs-azure-tools-docker-hosting-web-apps-in-docker **きよくらの備忘録 [#k372b16f] -Docker for Windowsを使用したASP.NET Core のデバッグ実行~ http://kiyokura.hateblo.jp/entry/2016/10/19/225243 **銀の光と碧い空 [#b34aa8fb] -Visual Studio Tools for Docker が ASP.NET CoreのDockerデバッグ実行している仕組みを追ってみた~ http://tech.tanaka733.net/entry/research-docker-debug-in-visual-studio-tools-for-docker -Visual Studio から AzureやWindows以外のdocker containerで走るASP.NET Core をリモートデバッグする~ http://tech.tanaka733.net/entry/remote-debug-aspnetcore-on-docker-from-visual-studio -VisualStudio 2017 RC3 から .NET Core on RHEL にリモートデバッグする~ http://tech.tanaka733.net/entry/remote-debug-dotnetcore-on-rhel-from-vs2017rc3 -.NET Core がLinuxでどのように動いているか、~ またわれわれはどのようにデバッグするのか~ Issue #8 · uzulla/y8-2017-spring-talks~ https://github.com/uzulla/y8-2017-spring-talks/issues/8 --https://www.youtube.com/watch?v=omgHW1Rcl18&index=8&list=PLqyYlv12JxkTzXvHqCLk0LmlQXSYzKXIu --https://onedrive.live.com/view.aspx?resid=B266A6B27EC808AC!260058&ithint=file%2cpptx&app=PowerPoint&authkey=!ALbzXlWLJJkbbwA ---- Tags: [[:.NET開発]], [[:.NET Core]], [[:Hyper-V]], [[:仮想化]]