TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1892 1.75K
День 1548. #ЗаметкиНаПолях
Управление Контейнерами в .NET 7 SDK
В .NET SDK 7.0.200 представлена новая функция, которая позволяет создавать и публиковать образы контейнеров непосредственно из файла проекта.

Для этого в файл проекта надо добавить:
<EnableSdkContainerSupport>true</EnableSdkContainerSupport>

Теперь с помощью dotnet publish можно создавать и публиковать приложения .NET в виде образов Docker:
- Создавать образ Docker для приложения, не создавая Dockerfile.
- Публиковать образ в реестре контейнеров.
- Указывать переменные, такие как базовый образ, тег образа и имя реестра в файле проекта.

Важно отметить, что устанавливать докер на компьютере не нужно. Пакет SDK для .NET может создать образ, а затем отправить его в удалённый реестр.

dotnet publish --os linux --arch x64 -p:PublishProfile=DefaultContainer -c Release

По умолчанию dotnet publish публикует образ в локальном демоне Docker. Чтобы опубликовать образ в реестре контейнеров, нужно добавить новое свойство в файл .csproj:
<ContainerRegistry>myregistry.azurecr.io</ContainerRegistry>

Другой, возможно более предпочтительный, вариант – не засорять файл проекта, а использовать профили публикации, файлы .pubxml в папке /Properties/PublishProfiles:
<Project>
<PropertyGroup>
<EnableSdkContainerSupport>true</EnableSdkContainerSupport>
<WebPublishMethod>Container</WebPublishMethod>
</PropertyGroup>
</Project>

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

.NET SDK был протестирован в следующих реестрах: Azure Container Registry, GitLab Container Registry, Google Cloud Artifact Registry, Quay.io, AWS Elastic Container Registry, GitHub Package Registry, and Docker Hub.

Перед публикацией потребуется пройти аутентификацию в реестре контейнеров. Подробнее об этом здесь.

Указание параметров контейнера
По умолчанию SDK определяет лучший базовый образ для использования. Он может использовать значения свойств вашего проекта, таких как TargetFramework, или проверять, является ли приложение автономным или приложением ASP.NET Core. Тем не менее, вы можете переопределить базовый образ по умолчанию, порт, имя контейнера, тэг и т.п.:
<ContainerBaseImage>mcr.microsoft.com/dotnet/aspnet:7.0</ContainerBaseImage>
<ContainerImageName>mycompany/my-awesome-webapp</ContainerImageName>
<ContainerImageTag>1.2.3-alpha2</ContainerImageTag>
<ItemGroup>
<ContainerPort Include="80" Type="tcp" />
</ItemGroup>

Про другие настройки контейнера можно почитать здесь.

Источник: https://laurentkempe.com/2023/03/13/dotnet-7-sdk-built-in-container-improvements/
  • 👍 17
  • 👎 1
More from @netdeveloperdiary
  1. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  2. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  3. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  4. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  5. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  6. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →