Если вы собираетесь пробовать Docker и .NET Core, то вам будут невероятно полезны эти ресурсы.
Создание приложений .NET Core с использованием Docker
- Пример для .NET Core Docker — этот пример создает, тестирует и запускает образец. Он включает и создает несколько проектов.
- Пример для ASP.NET Core Docker — этот пример демонстрирует, как использовать Docker с помощью веб-приложения ASP.NET Core.
Создание приложений .NET Core в контейнере
- Разработка приложений .NET Core — этот пример показывает, как разрабатывать, собирать и тестировать приложения .NET Core с помощью Docker без установки .NET Core SDK.
- Разработка приложений ASP.NET Core — в этом примере показано, как разрабатывать и тестировать базовые приложения ASP.NET с помощью Docker без установки .NET Core SDK.
Оптимизация размера контейнера
- Пример для .NET Core Alpine Docker — в этом примере собирается, тестируется и запускается приложение с использованием Alpine.
- Пример для автономных приложений NET Core — в этом примере собирается и запускается автономное приложение.
ARM32 / RASPBERRY PI
- Пример для .NET Core ARM32 Docker — в этом примере собирается и запускается приложение с Debian на ARM32 (работает на Raspberry Pi).
- Пример для ASP.NET Core ARM32 Docker — в этом примере собирается и запускается приложение ASP.NET Core с Debian на 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
Комментариев нет:
Отправить комментарий