「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
以下の手順で検証・評価した。
ASP.NET Core MVCアプリケーションの作成
> docker version > docker run hello-world
※ 後々、「from microsoft/aspnetcore」でググって、
コンパイル済みのASP.NET Coreアプリケーションを実行するための
公式のDocker Imageをダウンロードしていたことが解った。
https://hub.docker.com/r/microsoft/aspnetcore/
より実践的な開発環境を構成する。
ホスト側のDBで動作させようとしたが、ハマりどころが多かったのでメモ。
Expressの場合は、SQL Server 構成マネージャーの設定も必要にある。
以下は、ASP.NET Core MVCのOpen棟梁テンプレートの変更点のスクショです。
手順1と同じ。
複数のコンテナを扱うので、そろそろ管理コマンド・ツールを理解する。
Update-Packageを実行する。
Program.csに以下の行を追加する。
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseUrls("http://0.0.0.0:5000/") // ← ココを追加 localhost や 127.0.0.1 だとダメ。 .Build();
Dockerfileファイル(Dockerfile)の編集
既定のDockerfileファイルを修正
FROM microsoft/aspnetcore:2.0 AS base WORKDIR /app EXPOSE 80 FROM microsoft/aspnetcore-build:2.0 AS build WORKDIR /src COPY WebApplication1.sln ./ COPY WebApplication1/WebApplication1.csproj WebApplication1/ RUN dotnet restore -nowarn:msb3202,nu1503 COPY . . WORKDIR /src/WebApplication1 RUN dotnet build -c Release -o /app FROM build AS publish RUN dotnet publish -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "WebApplication1.dll"]
FROM microsoft/aspnetcore:latest AS base WORKDIR /app EXPOSE 5000 FROM microsoft/aspnetcore-build:latest AS build WORKDIR /src COPY WebApplication1.sln ./ COPY WebApplication1/WebApplication1.csproj WebApplication1/ RUN dotnet restore -nowarn:msb3202,nu1503 COPY . . WORKDIR /src/WebApplication1 RUN dotnet build -c Release -o /app FROM build AS publish RUN dotnet publish -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "WebApplication1.dll"]
nginxフォルダにDockerfileファイルを作成する。
※ nginxフォルダは、Docker Composeファイル(docker-compose.yml)と同じ階層に作成。
FROM nginx:latest COPY default.conf /etc/nginx/conf.d/default.conf
nginxフォルダにdefault.confを作成する。
※ nginxフォルダは、Docker Composeファイル(docker-compose.yml)と同じ階層に作成。
server { listen 80; server_name example.com *.example.com; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_cache_bypass $http_upgrade; } }
server { listen 80; server_name localhost; location / { proxy_pass http://xxx.xxx.xxx.xxx:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_cache_bypass $http_upgrade; } }
※ xxx.xxx.xxx.xxxには、
links: - webapplication1
Docker Composeファイル(docker-compose.yml)の編集
version: '3' services: webapplication1: image: webapplication1 build: context: . dockerfile: /WebApplication1/Dockerfile
version: '3' services: nginx-proxy: image: nginx-proxy build: context: ./nginx dockerfile: Dockerfile ports: - "8888:80" links: - webapplication1 webapplication1: image: webapplication1 build: context: ./WebApplication1 dockerfile: Dockerfile ports: - "5000:5000"
Dockerfileには様々な設定が可能。
コンテナを追加してみる。
を採用する。
手順3と同じ。
bind 0.0.0.0
restart: always image: redis volumes: - ./redis/data:/data - ./redis/redis.conf:/usr/local/etc/redis/redis.conf command: redis-server --appendonly yes
links: - redis
Redis Desktop Managerを使って接続確認を行う。
Docker側でライブラリのデバッグをする場合、ライブラリのPDBが、
「完全(full)」ではなくて、「ポータブル(portable)」である必要がある。
外部から接続する場合、redis.confを修正する必要がある模様。
Tags: :.NET開発, :.NET Core, :Hyper-V, :仮想化