ASP.NET Core アプリを Windows コンテナのプロセス分離モードで動かす実験

はじめに

ASP.NET Core アプリをコンテナ化したいけど、 .NET Framework の資産を捨てられないので、 ランタイムに .NET Framework を選択し、 Docker + Windows コンテナで行くことに。

手始めに、ASP.NET Core アプリをコンテナ化して、 Windows コンテナのプロセス分離モードで動かす実験を行ってみた。

最小の ASP.NET Core アプリ

今回の実験に使った最小の ASP.NET Core アプリが下記になる。

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace HelloWCOW
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello WCOW!");
            });
        }
    }
}

ASP.NET Core の「空」テンプレートで生成したアプリほぼそのまま。 このアプリをローカルのフォルダに発行しておく。 場所はデフォルトで。

Dockerfile

あらかじめ発行しておいた最小の ASP.NET Core アプリをもとに Docker コンテナを作りたいので、 Dockerfile を書いた。

FROM mcr.microsoft.com/dotnet/framework/runtime:4.8
WORKDIR /app
EXPOSE 80
COPY ./HelloWCOW/bin/Release/net48/publish .
ENTRYPOINT ["HelloWCOW.exe", "--urls", "http://*:80"]

--urlshttp://localhost:80 を指定するとダメで、 http://*:80 だと上手くいった。 Docker + Windows コンテナ + プロセス分離モードの情報が少なすぎて、 嵌ると抜け出すのにかなりの時間を費やしてツライ。

コンテナイメージをビルド

> docker build -t tnakamura/hellowcow:1.0 .

f:id:griefworker:20190625113952p:plain

コンテナイメージが作成されたか確認。

> docker images

f:id:griefworker:20190625114028p:plain

コンテナを起動

作成したコンテナイメージからコンテナを起動。 今回もプロセス分離モードを指定した。

> docker run --rm --it --isolation process -p 8000:80 --name hellowcow tnakamura/hellowcow:1.0

f:id:griefworker:20190625114118p:plain

Web ブラウザからアクセス

Chromehttp://localhost:8000 にアクセス。 Hello WCOW! と表示されたので実験成功。

f:id:griefworker:20190625114133p:plain

おわりに

なんとか最小の ASP.NET Core アプリをコンテナ化して、 Windows コンテナのプロセス分離モードで動かすことに成功した。 実験はまだまだ続く。 たったこれだけでも、嵌って結構な時間が溶けしまったので、正直なところ先が思いやられるな。