Я думаю, что новичкам может быть непонятно, как понять основы и заставить что-то работать на начальном этапе. Поэтому я хотел создать простой, но полный пример контейнера с модульными тестами для ASP.NET с использованием Многоэтапная сборка Docker .
Пример структуры проекта
Сначала быстрыйПроект для установки сцены:
mkdir src && cd src
dotnet new web -o myweb.app
dotnet new xunit -o myweb.tests
dotnet new sln -n myweb
dotnet sln add myweb.app
dotnet sln add myweb.tests
cd ..
edit Dockerfile
В итоге вы должны получить папку Dockerfile
и src
рядом с ней.
Dockerfile
Вотсодержимое Dockerfile
, которое использует три этапа для сборки, тестирования и подготовки среды выполнения. Обратите внимание на директивы FROM ... AS ... . Также помните, что WORKDIR относится к пути в создаваемом контейнере, а не к локальному пути:
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
# copy and build everything
WORKDIR /app
COPY src .
RUN dotnet build -c Release
# publish our web app
WORKDIR /app/myweb.app
RUN dotnet publish -c Release -o out
# test everything
FROM build AS testrunner
WORKDIR /app
ENTRYPOINT ["dotnet", "test", "--logger:trx"]
# prepare runtime
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/myweb.app/out .
ENTRYPOINT ["dotnet", "myweb.app.dll"]
Сборка и запуск:
docker build -t myweb .
docker run --rm --name myweb1 -p 8080:80 myweb
Ваше приложениедолжен быть доступен в http://localhost:8080
В папке Docker с примерами хранилища GitHub .NET есть еще примеры , если вы хотите их тоже проверить.
PS Пробовалмой Mac, но он должен работать и в Windows или Linux.
PPS Я использовал .NET Core 3.0 , поскольку это рекомендуемый выпуск на момент написания.
Надеюсьпомогает. Веселись!