Общие сведения о .NET и Docker
Контейнеры являются одним из самых популярных способов развертывания и размещения облачных приложений, с такими инструментами, как Docker, Kubernetesи Podman. Многие разработчики выбирают контейнеры, так как просто упаковать приложение со своими зависимостями и получить это приложение для надежного запуска на любом узле контейнера. Поддержка использования .NET с контейнерамиявляется обширной для
Docker предоставляет отличный обзор контейнеров. Docker Desktop: Community Edition является хорошим инструментом для использования контейнеров на классическом компьютере разработчика.
Образы .NET
Официальные образы контейнеров .NET публикуются в Реестра артефактов Майкрософт и доступны для обнаружения в Docker Hub. Существуют образы среды выполнения для рабочих и образов ПАКЕТА SDK для создания кода для Linux (Alpine, Debian, Ubuntu, Mariner) и Windows. Дополнительные сведения см. в , образах контейнеров .NET.
Образы .NET регулярно обновляются при публикации нового исправления .NET или при обновлении базового образа операционной системы.
Изображения chiselled контейнеров — это изображения контейнеров Ubuntu с минимальным набором компонентов, необходимых для исполняющей среды .NET. Эти образы меньше 100 МБ, чем обычные образы Ubuntu и имеют меньше CVEs, так как они имеют меньше компонентов. В частности, они не содержат оболочку или диспетчер пакетов, что значительно улучшает их профиль безопасности. Кроме того, они включают некорневого пользователя и настроены с включением этого пользователя.
Создание образов контейнеров
Вы можете создать образ контейнера с помощью Dockerfile или использовать пакет SDK для .NET для создания образа. Для примеров по созданию образов см. dotnet/dotnet-docker и dotnet/sdk-container-builds.
В следующем примере показано создание и запуск образа контейнера в нескольких быстрых шагах (поддерживается .NET 8 и .NET 7.0.300).
$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
Determining projects to restore...
All projects are up-to-date for restore.
webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
<p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c7ad33409e5 webapp "dotnet webapp.dll" About a minute ago Up About a minute 0.0.0.0:8000->8080/tcp, :::8000->8080/tcp jovial_shtern
$ docker kill 7c7ad33409e5
docker init
— это новый вариант для разработчиков, желающих использовать Dockerfiles.
Порты
сопоставление портов — ключевая часть использования контейнеров. Порты должны быть опубликованы вне контейнера, чтобы реагировать на внешние веб-запросы. ASP.NET образы контейнеров Core изменены в .NET 8 для прослушивания портов 8080
по умолчанию. .NET 6 и 7 прослушивают порт 80
.
В предыдущем примере с docker run
порт узла 8000
сопоставляется с портом контейнера 8080
. Kubernetes работает аналогичным образом.
Переменные среды ASPNETCORE_HTTP_PORTS
, ASPNETCORE_HTTPS_PORTS
и ASPNETCORE_URLS
можно использовать для настройки этого поведения.
Пользователи
Начиная с .NET 8, все изображения включают не корневого пользователя с именем app
. По умолчанию чёсанные изображения настроены с включённым пользователем. Функция публикации приложения как контейнера .NET (показанная в разделе Сборка образов контейнеров) также настраивает образы с активированным пользователем по умолчанию. Во всех остальных сценариях учётную запись app
можно настроить вручную, например, используя инструкцию USER
Dockerfile. Если образ настроен с app
, и команды должны выполняться как root
, тогда можно использовать инструкцию USER
, чтобы установить пользователя на root
.
Оставаясь в курсе
Новости, связанные с контейнерами, публикуются в обсуждениях dotnet/dotnet-docker и в категории блога .NET "контейнеры".
Службы Azure
Различные службы Azure поддерживают контейнеры. Вы создаете образ Docker для приложения и развертываете его в одной из следующих служб:
служба Azure Kubernetes (AKS)
Масштабирование и оркестрация контейнеров Windows & Linux с помощью Kubernetes.Azure App Service
Развертывание веб-приложений или API с помощью контейнеров в среде PaaS.приложения контейнеров Azure
Запускайте контейнерные рабочие нагрузки без управления серверами, оркестрацией или инфраструктурой, и используйте встроенную поддержку Dapr и KEDA для наблюдения и масштабирования до нуля.экземпляры контейнеров Azure
Создайте отдельные контейнеры в облаке без служб управления более высокого уровня.пакетной службы Azure
Выполнение повторяющихся заданий вычислений с помощью контейнеров.Azure Service Fabric
Отмена, смена и модернизация приложений .NET в микрослужбы с помощью контейнеров Windows & Linux.реестр контейнеров Azure
Хранение образов контейнеров и управление ими во всех типах развертываний Azure.