среда, 3 марта 2021 г.

Создание приложений .NET Core с использованием Docker

 Если вы собираетесь пробовать Docker и .NET Core, то вам будут невероятно полезны эти ресурсы.


Создание приложений .NET Core с использованием Docker


Создание приложений .NET Core в контейнере


  • Разработка приложений .NET Core — этот пример показывает, как разрабатывать, собирать и тестировать приложения .NET Core с помощью Docker без установки .NET Core SDK.
  • Разработка приложений ASP.NET Core — в этом примере показано, как разрабатывать и тестировать базовые приложения ASP.NET с помощью Docker без установки .NET Core SDK.

Оптимизация размера контейнера



ARM32 / RASPBERRY PI



Мне кажется, что эти примеры очень полезные… Обязательно смотрите сами файлы Docker, так как они дадут вам огромное количество информации о том, как структурировать ваши собственные файлы. Возможность создавать многоэтапные файлы Docker имеет решающее значение при работе на небольшом устройстве, например RPi. Желательно делать как можно меньше работы, и пусть Docker автоматически кеширует столько слоев, сколько возможно. Если вы не продумаете этот момент, то в конечном итоге потратите в 10 раз больше времени на создание слоев образа для каждой сборки.

Перевод реального ASP.NET сайта на Docker с тестами!


Могу ли я перевести свой сайт с подкастами на Docker, а также собрать/тестировать/запустить его на Raspberry Pi? Да!

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

# copy csproj and restore as distinct layers
COPY *.sln .
COPY hanselminutes.core/*.csproj ./hanselminutes.core/
COPY hanselminutes.core.tests/*.csproj ./hanselminutes.core.tests/
RUN dotnet restore

# copy everything else and build app
COPY . .
WORKDIR /app/hanselminutes.core
RUN dotnet build


FROM build AS testrunner
WORKDIR /app/hanselminutes.core.tests
ENTRYPOINT ["dotnet", "test", "--logger:trx"]


FROM build AS test
WORKDIR /app/hanselminutes.core.tests
RUN dotnet test


FROM build AS publish
WORKDIR /app/hanselminutes.core
RUN dotnet publish -c Release -o out


FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime
WORKDIR /app
COPY --from=publish /app/hanselminutes.core/out ./
ENTRYPOINT ["dotnet", "hanselminutes.core.dll"]

Замечательно. Теперь я могу выполнять команду «docker build .» на Raspberry Pi. Устройство восстановит, протестирует и построит его. Если тест окажется неудачным, то сборка Docker завершится неудачно.

Видите, там есть дополнительный раздел, с именем «testrunner», а затем после него «test?» Этот раздел не работает. Он устанавливает ENTRYPOINT, но этим никто никогда не пользуется… пока. ENTRYPOINT является неявным запуском, если находится в последней строке в файле Docker. Так сделано для того, чтобы я мог его найти, если захочу.

Я могу просто построить его и запустить вот так:

docker build -t podcast .
docker run --rm -it -p 8000:80 podcast

Заметка. Обратите внимание, что образ «runtime» — это microsoft/dotnet: 2.1-aspnetcore-runtime, а не microsoft/dotnet: 2.1-runtime. Также aspnetcore one предварительно включает в себя двоичный код, который нужен для запуска приложения ASP.NET, таким образом я могу просто включить одну ссылку на "/>" в csproj. Если не использовать базовый образ aspnetcore-runtime, то пришлось бы вручную активировать все пакеты ASP.NET Core, которые мне нужны. Использование базового образа может сделать финальные файлы образов больше, но это всего лишь баланс между удобством и размером. Решать вам. Вы можете вручную включить только нужные вам пакеты или использовать метапакет «Microsoft.AspNetCore.App» для удобства. Мой конечный образ «podcast» весил 205 мегабайт, что неплохо, но, конечно, если бы я хотел, я мог бы уменьшить его несколькими способами.

А если мне просто нужны результаты теста от Docker, я могу их получить! Это означает, что я могу запустить тест в контейнере Docker, смонтировать том между контейнером Linux и (теоретическим) узлом Windows, а затем открыть полученный .trx-файл в Visual Studio!

docker build --pull --target testrunner -t podcast:test .
docker run --rm -v D:\github\hanselminutes-core\TestResults:/app/hanselminutes.core.tests/TestResults podcast:test

Источник: https://itnan.ru/post.php?c=1&p=416449

Комментариев нет:

Отправить комментарий