首页 > 解决方案 > 如何在同一解决方案中容器化具有依赖关系的 .net 核心应用程序?

问题描述

我正在尝试将一个依赖于 .net 标准库的简单 .net 核心控制台应用程序容器化。

我的解决方案布局是这样的:

+
|- Solution.sln
|- Library
|  +- Files in Library project
+- App
   |- Files in App
   +- Dockerfile

App取决于Library

到目前为止,我有这样的事情:

FROM microsoft/dotnet:2.1-sdk
WORKDIR /app

# copy fsproj and restore as distinct layers
COPY *.fsproj ./
RUN dotnet restore

# copy and build everything else
COPY . ./
RUN dotnet publish -c Release -o out

但这显然只是将App.

除了解决方案文件之外,我如何也Library无需将 Dockerfile 放入根目录中,也可以实现放入?

标签: visual-studiodocker.net-core

解决方案


您可以将 docker build 上下文更改为父目录。

将您的 dockerfile 更改为:

FROM microsoft/dotnet:2.1-sdk
WORKDIR /app

# copy fsproj and restore as distinct layers
COPY App/*.fsproj ./
RUN dotnet restore

# copy and build everything else
COPY App/. ./
RUN dotnet publish -c Release -o out

然后运行(从包含添加和库的文件夹)

docker build -f App/Dockerfile .

但是,是的,将 dockerfile 放在您希望构建上下文所在的位置通常更常见。因此,在包含您需要的所有文件的位置。

在 Mac/Windows 的 docker 上,docker 守护进程会将构建上下文中的每个文件复制到 VM 中。所以这里有一个性能问题。构建项目时需要考虑的事项。


推荐阅读