如何将在同一解决方案中具有依赖性的.net核心应用容器化?

时间:2019-01-16 17:02:56

标签: visual-studio docker .net-core

我正在尝试将依赖于.net Standard库的简单.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放入解决方案文件之外的根目录中?

1 个答案:

答案 0 :(得分:1)

您可以将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。因此,这里的性能受到影响。构建项目时要考虑的事项。