きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

Docker for Windowsを使用したASP.NET Core のデバッグ実行

Docker for Windowsを使うと、ASP.NET CoreのWebアプリのDockerコンテナをVisual Studioから簡単かつシームレスにデバッグ実行できるとのことなので、試してみました。

 

前提

以下が必要になります。 それぞれインストールしておきます。

また、Docker for WindowsHyper-V上で実行されるので、Hyper-Vが動くようになっている必要があります(OS・エディションが限定されます&ハードウェアの制約もあり)。

 

アプリケーションプロジェクトの作成

ASP.NET Core Web Application(.NET Core) テンプレートでWebアプリケーションを作成します。テンプレートは Webアプリケーションを選択します。とりあえず認証は認証なしにしておきます。

f:id:kiyokura:20161018163458p:plain f:id:kiyokura:20161018163505p:plain

 

Dockerでデバッグ実行を行うための準備

プロジェクトテンプレートが展開されたら、このプロジェクトでDockerを利用するための準備を行います まずはソリューションエクスプローラーのコンテキストメニュー追加-Docker Supportをクリックして、Dockerサポート関連の設定を追加します。

f:id:kiyokura:20161018163512p:plain

 

すると、Docker関連のファイルが追加されたり、launchSettings.json に Docker関連の設定が追加されたりします(今回はとりあえずこれらのファイルを編集する必要はありません)。

f:id:kiyokura:20161018163518p:plain

 

ツールバーデバッグ実行先を確認すると、IIS Expressやセルフホストに加えてDockerが存在することが確認できると思います。Dockerを選択し、デバッグ実行時に起動するブラウザを選択したら準備は完了です。 f:id:kiyokura:20161018163531p:plain

 

F5でデバッグ実行(ビルドエラー編)

実際にデバッグ実行を行ってみます。 適当にアクションメソッドにブレークポイントを張って、F5キーを押します。

f:id:kiyokura:20161018163538p:plain

 

ビルドが進んで、いざデプロイ…と思ったら、エラーが出ました。 f:id:kiyokura:20161018163555p:plain

 

メッセージを確認すると、「Unable to validate volume mapping 」「Docker Toolsのトラブルシューティングを見ろ」と書いてるので、まずは確認してみます。

Troubleshooting Docker Client Errors on Windows Using Visual Studio | Microsoft Azure

Volume mapping is required to share the source code and binaries of your application with the app folder in the container. Specific volume mappings are contained within the docker-compose.dev.debug.yml and docker-compose.dev.release.yml files. As files are changed on your host machine, the containers reflect these changes in a similar folder structure.

なるほど、『Docker for WindowsのShared Drivesの設定がされていない』ことが原因のようです。よくよく見ると、Visual Studio Tools for DockerのPrerequisitesの項目にも赤字で『IMPORTANT: Configure Shared Drives under the settings for Docker For Windows as Shared Drives are requried for F5 Debugging.』と注意書きされていました(オフィシャルのドキュメントはよく読みましょう)。

 

素直に設定してみます。 f:id:kiyokura:20161018163602p:plain

 

F5でデバッグ実行(再チャレンジ)

気を取り直して、再度チャレンジします。 念のため一度クリーンしてから、再度F5キーでデバッグ実行を行います。

すると、今度はデプロイが成功しブラウザが起動、ブレークポイントでもちゃんと停止することが確認できました。 f:id:kiyokura:20161018163612p:plain

 

まとめ

こんな感じで、Dockerコンテナを使ってLinuxにホストした状態でのデバッグ実行を非常に簡単に、そしてシームレスに行うことができました。Docker for Windowsさえ設定されていれば、IIS Expressでデバッグ実行を行うのと何ら変わりない感じで使えそうです。