我正在尝试将依赖于.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放入解决方案文件之外的根目录中?
答案 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。因此,这里的性能受到影响。构建项目时要考虑的事项。