しばやん雑記

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

Nano Server で ASP.NET Core アプリケーションを実行する

これまでに ASP.NET Core は大体 App Service か Linux の Docker でしか動かしておらず、Nano Server を使ったことがなかったので試しておくことにしました。

といっても、難しいことはなく Visual Studio で ASP.NET Core プロジェクトを作る時に Windows を選ぶだけで、必要なファイルをすべて用意してくれます。

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

作成された Dockerfile は非常にシンプルで、よく見ると Linux の時と全く同じものです。

FROM microsoft/aspnetcore:2.0
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "WebApplication9.dll"]

Docker Hub にある microsoft/aspnetcore イメージは Linux と Nano Server の両方がタグで分けられて用意されていますが、最近は Docker 側のアップデートで良い感じにプラットフォームを自動認識できるようになったみたいです。

注意書きにあるように Docker 17.10 以降が必要なので注意しましょう。

Note: ASP.NET Core multi-arch tags, such as 2.0, have been updated to use nanoserver-1709 images if your host is Windows Server 2016 Version 1709 or higher or Windows 10 Fall Creators Update (Version 1709) or higher. You need Docker 17.10 or later to take advantage of these updated tags.

https://hub.docker.com/r/microsoft/aspnetcore/

つまり、全く同じソースコードですが docker build を実行すれば、その環境向けのイメージをビルドしてくれるわけですね。これは便利な機能かも知れません。

プロジェクトを作成したら、あとは F5 を押せば自動的に必要なイメージのダウンロードとビルドが行われて、デバッグ実行が開始されます。この辺りは Windows と Linux で差が全くありません。

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

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

開発環境では問題なく動作してくれますが、Nano Server をターゲットにした ASP.NET Core アプリケーションの最大の弱点は、例によって実行環境が全く存在していないということでしょう。

ASP.NET Core アプリケーションは Windows と Linux のどっちで動かす方が良いかよく聞かれるので、今度時間があればパフォーマンス観点でも調べたいですね。