マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

.NET CoreのDockerfileについて。

詳細

.NET Core

開発用リリース用で異なる。

開発用

  • 開発&デバッグ用
  • Visual Studioによって生成されるDockerfile。
    • Visual Studio経由で動作させられるが、
    • 通常の docker run や、docker-composeでは動かない。
  • netcore:3.0
    #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
    
    FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim AS base
    WORKDIR /app
    
    FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
    WORKDIR /src
    COPY ["ConsoleApp1/ConsoleApp1.csproj", "ConsoleApp1/"]
    RUN dotnet restore "ConsoleApp1/ConsoleApp1.csproj"
    COPY . .
    WORKDIR "/src/ConsoleApp1"
    RUN dotnet build "ConsoleApp1.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "ConsoleApp1.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "ConsoleApp1.dll"]

リリース用

  • テスト以降用
  • 自作する必要がある。
    • 通常の docker run や、
    • docker-composeでも

動作する。

  • netcore:3.0
    FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
    WORKDIR /app
    
    # copy csproj and restore as distinct layers
    COPY dotnetapp/*.csproj ./dotnetapp/
    COPY utils/*.csproj ./utils/
    WORKDIR /app/dotnetapp
    RUN dotnet restore
    
    # copy and publish app and libraries
    WORKDIR /app/
    COPY dotnetapp/. ./dotnetapp/
    COPY utils/. ./utils/
    WORKDIR /app/dotnetapp
    RUN dotnet publish -c Release -o out
    
    # test application -- see: dotnet-docker-unit-testing.md
    FROM build AS testrunner
    WORKDIR /app/tests
    COPY tests/. .
    ENTRYPOINT ["dotnet", "test", "--logger:trx"]
    
    FROM mcr.microsoft.com/dotnet/core/runtime:3.0 AS runtime
    WORKDIR /app
    COPY --from=build /app/dotnetapp/out ./
    ENTRYPOINT ["dotnet", "dotnetapp.dll"]

構成の差異

未確認だが、恐らく、ASP.NETと同じ

ASP.NET Core

開発用リリース用で異なる。

開発用

  • 開発&デバッグ用
  • Visual Studioによって生成されるDockerfile。
    • Visual Studio経由で動作させられるが、
    • 通常の docker run や、docker-composeでは動かない。
  • aspnetcore:3.0
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    
    FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster 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/build
    
    FROM build AS publish
    RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "WebApplication1.dll"]

リリース用

  • テスト以降用
  • 自作する必要がある。
    • 通常の docker run や、
    • docker-composeでも

動作する。

  • aspnetcore:3.0
    FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
    WORKDIR /app
    
    # copy csproj and restore as distinct layers
    COPY *.sln .
    COPY WebApplication1/*.csproj ./WebApplication1/
    RUN dotnet restore
    
    # copy everything else and build app
    COPY WebApplication1/. ./WebApplication1/
    WORKDIR /app/WebApplication1
    RUN dotnet publish -c Release -o out
    
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
    WORKDIR /app
    COPY --from=build /app/WebApplication1/out ./
    ENTRYPOINT ["dotnet", "WebApplication1.dll"]

構成の差異

  • 開発&デバッグ用のコンテナの /app と /src に、
    ソース・コードが含まれてるの、全く解らんわ...。
フォルダ構成の差異
  • ...と思ったら、docker run の際に、以下のようなことをしている。
    docker run -dt -v "...\vsdbg\vs2017u5:/remote_debugger:rw" -v "...\WebApplication1:/app" -v "...\WebApplication1:/src/" -v ... マウントやら、環境変数やら。
  • ...って事は、AS build と、AS publish 意味あるのか?と思い、
    AS build と、AS publish の部分を全て消してみたが、...動作する。
  • /app と /srcは、Windows側を見ている。
  • 以下が、AS build と、AS publishを削除したDockerfile。
    #See https://aka.ms/containerfastmode ...
    
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    
    FROM base AS final
    WORKDIR /app
    ENTRYPOINT ["dotnet", "WebApplication1.dll"]
    コレで、デバッグ実行も問題なく動作する。
  • ...もっと言うと、以下でも動作する...。
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    ENTRYPOINT ["dotnet", "WebApplication1.dll"]
  • ...と言う事で、開発&デバッグ用の
    Dockerfileの事は、忘れてしまってイイかも。

参考

Microsoft Docs

dotnet/dotnet-docker


Tags: :.NET開発, :.NET Core, :仮想化


添付ファイル: filehoge.png 334件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-05-18 (火) 14:55:43 (1067d)