しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure 上の Visual Studio 2017 を使って Windows Containers サポートを試してみた

手持ちの MacBook Pro だと Hyper-V を使った時の動作に不安があったので、最近 Nested Virtualization に対応した Dv3 / Ev3 インスタンスが追加された Azure 上で試すことにしました。

Dv3 / Ev3 については、既にぶちぞう RD が書いてるので、そっちを読むと良いです。

Dv3 / Ev3 VM と Nested Virtualization | ブチザッキ

ちなみに Visual Studio 2017 の Tools for Docker は Windows と Linux の両方に対応していると、ちゃんとドキュメントに書かれています。

Microsoft Visual Studio 2017 with Docker for Windows supports building, debugging, and running .NET Framework and .NET Core web and console applications using Windows and Linux containers.

Visual Studio Tools for Docker | Microsoft Docs

クライアント OS で試したかったので Windows 10 と Visual Studio 2017 (15.2) のイメージを選んで、Dv3 インスタンスを East US に作成しました。

念のためメモリが 2 かずあき載った D4s v3 を用意しました。

f:id:shiba-yan:20170716171057p:plain

Windows 10 で Hyper-V Container を使う場合のドキュメントは公式に提供されているので、それを読んで作業すれば問題ないです。Hyper-V は普通にインストールできました。

日本語版は情報が古いので、基本的に英語版を参照することをお勧めします。

Windows Server 2016 は Docker EE ですが、Windows 10 の場合は Docker CE になります。

とはいえ普通に Docker for Windows をインストールして、通知領域アイコンのメニューから Windows Containers への切り替えを実行すれば使えるようになります。

f:id:shiba-yan:20170716020859p:plain

Windows Containers と Docker を使う準備は出来たので、Visual Studio 2017 を使って新しく ASP.NET MVC プロジェクトを作成していきます。

ASP.NET Core の場合はこの画面で Docker サポートを追加出来ますが、ASP.NET では選べません。

f:id:shiba-yan:20170716014100p:plain

しかし、プロジェクトを作成した後にソリューションエクスプローラーの右クリックメニューから追加を選ぶと、Docker Support という項目があるので、これを選ぶと必要なファイルが追加されます。

f:id:shiba-yan:20170716014341p:plain

追加を行うと Docker Compose に必要なファイルと、Dockerfile が作成されます。この辺りは ASP.NET Core と変わっていないように思います。

f:id:shiba-yan:20170716014434p:plain

ちなみに生成される Dockerfile は以下のような形式です。wwwroot にアプリをコピーするだけです。

FROM microsoft/aspnet
ARG source
WORKDIR /inetpub/wwwroot
COPY ${source:-obj/Docker/publish} .

Docker Support を追加すると、デバッグ実行のボタンが Docker という表示に変わります。

f:id:shiba-yan:20170716014641p:plain

これからはアプリケーションの実行とデバッグは全て Docker を利用して行われます。実際に実行すると Docker Image のビルドが行われた後に、アプリケーションが立ち上がってきます。

f:id:shiba-yan:20170716014817p:plain

初回は Docker Image の pull に時間がかかるのでのんびり待ちましょう。

コンテナが立ち上がってしまえば、後はこれまで通りの ASP.NET アプリケーションです。

f:id:shiba-yan:20170716015031p:plain

Docker Compose 時にリモートデバッグモニタも起動するので、コンテナ内で動作している ASP.NET アプリケーションに対しても、これまで通りのデバッグが行えます。

ブレークポイントを置くとちゃんと止まりますし、変数の確認などもこれまで通りですが、Application Insights を使ったトレースは動いていない気がしました。

f:id:shiba-yan:20170716015156p:plain

ASP.NET Core アプリケーションの場合は、この後 App Service on Linux に直接デプロイすることが出来るのですが、Windows Containers を使った ASP.NET アプリケーションはデプロイ機能が用意されていません。

現実的には AppVeyor と連携して、Docker Image を作成後に Windows の Kubernetes クラスタなどへデプロイする形になるのではないかと思っています。

ベースとなる Windows Server Core イメージが相変わらず巨大という問題はありますが、開発環境と実行環境としては整ってきた感があります。今後も注目していく予定です。