【问题标题】:How to map changes of .NET application from docker and rebuild?如何从 docker 映射 .NET 应用程序的更改并重建?
【发布时间】:2018-12-24 15:28:24
【问题描述】:

我目前正在开发NET Application,我必须运行以下 bash 脚本:

  • 1.Build项目

  • 2.dotnet publish -c Release项目

  • 3.copy publish 文件夹指向Dockerfile 的路径。

这可以直接从dockerfile 完成吗?

我现在正在运行:

Bash 脚本

dotnet build  ../${serverSrcFolder} &&
dotnet publish -c Release ../${serverSrcFolder} --output $(pwd)/${serverPublishDestFolder} 

Dockerfile

FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
COPY . /app
ENTRYPOINT [ "dotnet" , "./publish/Server.dll" ]
EXPOSE 9400
EXPOSE 6379

publish 文件夹位于dockerfile 附近。

  • 父文件夹
    • Dockerfile
    • 发布

上面bash 脚本中的serverPublishDestFolder 就是这个publish 文件夹。

每当dockerfile 中的publish 文件夹发生更改时,我能否始终映射它?

【问题讨论】:

  • 您是否要更新 docker 映像中的发布文件夹,以便它引用最新的 .dll 和其他工件? Dockerfile 是传递给您的 docker 守护进程以构建您的 docker 镜像的材料清单,因此它是不可变的。因此,如果代码发生更改并且完成了 dotnet 发布,则必须重建映像。另一个选项(不推荐用于生产)是将主机中的目录挂载到上图中正在运行的容器中。即 docker run -v "$(pwd)/publish":/app/publish 不确定 .net core 的热重新部署是如何工作的。
  • 我想按照你正确的说法执行第一个选项。我希望每次运行dockerfile,首先构建和发布dll,然后使用该路径将其注入新形成的图像中。

标签: docker build .net-core publish


【解决方案1】:

你可以在Dockerfile里面做上面三个步骤

例如

ROM microsoft/dotnet:2.1.5-aspnetcore-runtime AS base
WORKDIR /app
ENV ASPNETCORE_URLS http://+:5000
EXPOSE 5000

FROM microsoft/dotnet:2.1.403-sdk AS build
WORKDIR /src
COPY src/WebApi/WebApi.csproj src/WebApi/
RUN dotnet restore src/WebApi/WebApi.csproj
COPY . .
WORKDIR /src/src/WebApi
RUN dotnet build WebApi.csproj -c Release -o /app 

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

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

这个Dockerfile可以很容易被Visual Studio 2017生成

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2019-06-27
    • 2018-01-23
    • 2021-01-24
    相关资源
    最近更新 更多