Windows10+Visual Studio2017でWindowsコンテナアプリ（asp.net）を実行してみる

# 事前準備
1. Visual Studio 2017をインストール
 - https://visualstudio.microsoft.com/ja/free-developer-offers/
 - 今回は、お試し利用の為、無償の[Visual Studio Community](https://visualstudio.microsoft.com/ja/free-developer-offers/)を利用する。
 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/5b129f87-1233-f932-50e2-cb5ee46806e5.png)
 - インストーラにて、インストールする対象は以下の2つを選択。
     - ASP.NET と Web 開発
     - .NET Core クロスプラットフォームの開発<br />
     ![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/3cec8c4f-20ce-1ec1-6d2d-5a39edbbd4cd.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/440a661c-fe92-3651-1a46-ec62d904f259.png)
インストールは、そこそこかかります。（20～30分程度）　~~私のPCが低スペックなだけ・・・。~~<br />
![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/242a13a6-eba4-c700-6674-1a5af70dab75.png)

2. Docker for Windowsをインストール
     - https://docs.docker.com/docker-for-windows/install/
     - Download from Docker Storeを選択して、ダウンロードを行う。<br />
     ![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/b5507596-b230-daf3-c03a-d26efb3a6d80.png)
     - ダウンロードには、Docker Hubアカウントが必要となります。別途作成しておく必要あり。<br />
     ![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/e1d37ee5-1701-9d8c-b2cc-186e4677bb1b.png)<br />
インストールは、そこそこかかります。（5分程度）<br />
     ![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/12574319-54de-3253-5e12-85252c8c24fb.png)
     - 念のため、一度Dockerを起動して、dockerコマンドを試しておく。[docker version]
     docker が起動していない場合、docker server のバージョンが確認できないので、
     ![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/c16a8e44-76b8-b9fa-ca93-bb23ebaffaa0.png)を起動してサーバを起動する。<br />
     ![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/73dd0e8a-b98c-b738-ef64-3757dd8f533d.png)
     ![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/d1c74af1-63be-8d7b-336d-ccfc030e5dfc.png)


# Visual Studio 2017でWindowsコンテナアプリ（asp.net）を開発。~チュートリアル程度~
1. 新しいプロジェクトを作成する。
    1. [Visual C# - Web - ASP.NET Webアプリケーション] を選択する。
    2. [Webアプリケーション]を選択し[Dockerサポートを有効にする]をチェック。<br />
      ![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/939f3e00-afe2-1a9a-a521-afd3c1109f86.png)

2. サンプルソースが既に出力されているので確認。
    - ソリューションエクスプローラでは、Dockerfileと、ASP.NETのソースが出力されている事が確認できる。<br />
     ![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/09ab21cc-9791-1781-4b0b-9a0f2b7e9aa5.png)
    - Dockerfileの中身( dotnetコマンドを利用して、ビルドを行っている。）

``` Dockerfile
#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat

FROM microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-1803 AS base
WORKDIR /app
EXPOSE 52763
EXPOSE 44372

FROM microsoft/dotnet:2.1-sdk-nanoserver-1803 AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]
```

. サンプルプロジェクトを利用して、Windowsコンテナを実行する。
    - ツールバー - Dockerにて実行。<br />
      ![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/86dde081-8056-81e6-ad7b-d106203f96d0.png)
    - 出力ウィンドウにDocker buildの実行ログが出力される。
    - Docker buildが終わったら、Debugウィンドウに切り替わり、ブラウザが起動される。<br />
      ![image.png](https://qiita-image-store.s3.amazonaws.com/0/282054/76c3f37f-3d34-1db6-efa7-160d5f744298.png)
    - Windows PowerShellから、Dockerにビルドされている状態を確認できる。

``` WindowsPowerShell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\yamas> docker images
REPOSITORY          TAG                                      IMAGE ID            CREATED             SIZE
webapplication1     dev                                      e942d5d8d889        56 seconds ago      493MB
microsoft/dotnet    2.1-aspnetcore-runtime-nanoserver-1803   861e30929ebc        4 days ago          493MB
PS C:\Users\yamas> docker ps
CONTAINER ID        IMAGE                 COMMAND                    CREATED             STATUS              PORTS                                                                 NAMES
9cb9ccfa664c        webapplication1:dev   "C:\\remote_debugger\\…"   5 minutes ago       Up 4 minutes        44372/tcp, 52763/tcp, 0.0.0.0:52763->80/tcp, 0.0.0.0:44372->443/tcp   dazzling_engelbart
PS C:\Users\yamas>
```



# その他
 - 他にもAzuleを利用すると、DevOpsを実行できる。
 - Docker Registryを利用して、DockerImageも管理したい。