「[[マイクロソフト系技術情報 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]], [[:仮想化]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS