「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>.NET Core]] --.NET CoreのDockerfile --[[.NET CoreのDockerコンテナ化]] * 目次 [#wa82e3cb] #contents *概要 [#f65a7d70] [[.NET Core]]のDockerfileについて。 *詳細 [#e08bd85c] **.NET Core [#p9edf5ed] [[開発用>#j4beed09]]と[[リリース用>#w4e66d95]]で異なる。 ***開発用 [#j4beed09] -開発&デバッグ用 -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"] ***リリース用 [#w4e66d95] -テスト以降用 -自作する必要がある。 --通常の 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"] -各バーションは、[[dotnet/dotnet-docker>#n623273b]]を参照。 ***構成の差異 [#od317d10] 未確認だが、恐らく、[[ASP.NETと同じ>#x48b0955]]。 **ASP.NET Core [#g7bb6ad8] [[開発用>#pb857112]]と[[リリース用>#lbc156f6]]で異なる。 ***開発用 [#pb857112] -開発&デバッグ用 -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"] ***リリース用 [#lbc156f6] -テスト以降用 -自作する必要がある。 --通常の 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"] -各バーションは、[[dotnet/dotnet-docker>#n623273b]]を参照。 ***構成の差異 [#x48b0955] -開発&デバッグ用のコンテナの /app と /src に、~ ソース・コードが含まれてるの、全く解らんわ...。 #ref(hoge.png,left,nowrap,フォルダ構成の差異) -...と思ったら、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の事は、忘れてしまってイイかも。 *参考 [#t31f92b2] -dotnet-docker/samples at master · dotnet/dotnet-docker~ https://github.com/dotnet/dotnet-docker/tree/master/samples -[[Dockerファイル - 開発基盤部会 Wiki>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Docker%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB]] **Microsoft Docs [#z73bf4dd] -ASP.NET Core 向けの Docker イメージ~ https://docs.microsoft.com/ja-jp/aspnet/core/host-and-deploy/docker/building-net-docker-images -Docker を使用してアプリをコンテナー化するチュートリアル - .NET Core~ https://docs.microsoft.com/ja-jp/dotnet/core/docker/build-container -Windows での Visual Studio コンテナー ツール - Visual Studio~ https://docs.microsoft.com/ja-jp/visualstudio/containers/overview -Visual Studio コンテナー ツールのビルドとデバッグの概要 - Visual Studio~ https://docs.microsoft.com/ja-jp/visualstudio/containers/container-build **dotnet/dotnet-docker [#n623273b] -History for samples/dotnetapp/Dockerfile~ https://github.com/dotnet/dotnet-docker/commits/master/samples/dotnetapp/Dockerfile -History for samples/aspnetapp/Dockerfile~ https://github.com/dotnet/dotnet-docker/commits/master/samples/aspnetapp/Dockerfile ---- Tags: [[:.NET開発]], [[:.NET Core]], [[:仮想化]]