Как создать образ докера в .NET Core с несколькими проектами? - PullRequest
1 голос
/ 15 марта 2019

Все мои проекты .NET Core SDK 2.2.

У меня есть 4 проекта.

TestData TestConsole TestLogic TestData2.

При запуске я настраиваю Консолькак стартовый проект, и каждый проект имеет ссылки друг на друга.

Что мне интересно, это где я могу создать dockerfile и что я должен добавить в dockerfile?

Вот мой текущий файл dockerfile:

FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

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

# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Ошибка:

пропуск проекта

TestData.csproj TestLogic.csproj TestData2.csproj

не найден.

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Чтобы сделать его более эффективным, сначала необходимо скопировать все файлы .csproj проекта, а затем восстановить их для кэширования результатов. Затем скопируйте все остальное и опубликуйте проект. Таким образом, ваш Dockerfile будет выглядеть примерно так:

FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY aspnetapp/aspnetapp.csproj aspnetapp/
COPY TestData/TestData.csproj TestData/
COPY TestLogic/TestLogic.csproj TestLogic/
COPY TestData2/TestData2.csproj TestData2/
RUN dotnet restore ./aspnetapp/aspnetapp.csproj

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

# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Возможно, вы захотите явно копировать проекты после восстановления, если у вас есть больше проектов в решении, чтобы сократить время сборки контейнера.

В моем проекте я создал инструмент, который создает директивы COPY для основных зависимостей проекта из командной строки, чтобы упростить процесс.

0 голосов
/ 15 марта 2019

Попробуйте следующее:

FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app

COPY . ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out

FROM microsoft/dotnet:aspnetcore-runtime AS runtime
WORKDIR /app
COPY --from=build-env /app/aspnetapp/src/TestConsole/out ./
ENTRYPOINT ["dotnet", "TestConsole.dll"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...