Docker for Windowsを使うと、ASP.NET CoreのWebアプリのDockerコンテナをVisual Studioから簡単かつシームレスにデバッグ実行できるとのことなので、試してみました。
前提
以下が必要になります。 それぞれインストールしておきます。
- Visual Studio 2015 Update3
- 無償のVisual Studio Community 2015 でOK
- NET Core 1.0.1 - VS 2015 Tooling Preview 2
- Docker for Windows
- 私が実際に試したのは Version 1.12.1-stable build:7135
- Visual Studio Tools for Docker
- 2016/10/17時点では Preview(0.41.0)
また、Docker for WindowsはHyper-V上で実行されるので、Hyper-Vが動くようになっている必要があります(OS・エディションが限定されます&ハードウェアの制約もあり)。
アプリケーションプロジェクトの作成
ASP.NET Core Web Application(.NET Core) テンプレートでWebアプリケーションを作成します。テンプレートは Webアプリケーションを選択します。とりあえず認証は認証なしにしておきます。
Dockerでデバッグ実行を行うための準備
プロジェクトテンプレートが展開されたら、このプロジェクトでDockerを利用するための準備を行います
まずはソリューションエクスプローラーのコンテキストメニューの 追加
-Docker Support
をクリックして、Dockerサポート関連の設定を追加します。
すると、Docker関連のファイルが追加されたり、launchSettings.json に Docker関連の設定が追加されたりします(今回はとりあえずこれらのファイルを編集する必要はありません)。
ツールバーのデバッグ実行先を確認すると、IIS Expressやセルフホストに加えてDockerが存在することが確認できると思います。Dockerを選択し、デバッグ実行時に起動するブラウザを選択したら準備は完了です。
F5でデバッグ実行(ビルドエラー編)
実際にデバッグ実行を行ってみます。
適当にアクションメソッドにブレークポイントを張って、F5
キーを押します。
ビルドが進んで、いざデプロイ…と思ったら、エラーが出ました。
メッセージを確認すると、「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.』と注意書きされていました(オフィシャルのドキュメントはよく読みましょう)。
素直に設定してみます。
F5でデバッグ実行(再チャレンジ)
気を取り直して、再度チャレンジします。
念のため一度クリーンしてから、再度F5
キーでデバッグ実行を行います。
すると、今度はデプロイが成功しブラウザが起動、ブレークポイントでもちゃんと停止することが確認できました。
まとめ
こんな感じで、Dockerコンテナを使ってLinuxにホストした状態でのデバッグ実行を非常に簡単に、そしてシームレスに行うことができました。Docker for Windowsさえ設定されていれば、IIS Expressでデバッグ実行を行うのと何ら変わりない感じで使えそうです。