Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Из этой справочной статьи вы узнаете, как настроить образ контейнера, созданный при публикации приложения .NET в качестве контейнера. В этой статье рассматриваются различные свойства, которые можно задать для управления изображением, средой выполнения и командами, выполняемыми при запуске контейнера.
Настройка свойств контейнера
Вы можете управлять многими аспектами созданного контейнера с помощью свойств MSBuild. Как правило, если вы можете использовать команду в Dockerfile для задания какой-то конфигурации, можно сделать то же самое с помощью MSBuild.
Заметка
Единственными исключениями являются команды RUN. Из-за того, как создаются контейнеры, эти команды нельзя эмулировать. Если вам нужна эта функция, рекомендуется использовать Dockerfile для создания образов контейнеров.
Нет способа выполнения RUN команд с помощью пакета SDK для .NET. Эти команды часто используются для установки некоторых пакетов ОС или создания нового пользователя ОС или любого количества произвольных вещей. Если вы хотите продолжать использовать функцию создания контейнеров пакета SDK для .NET, можно создать настраиваемый базовый образ с этими изменениями, а затем использовать этот базовый образ. Дополнительные сведения см. в ContainerBaseImage.
Флаги, управляющие базовым изображением
Следующие свойства определяют, какой базовый образ используется для контейнера и как он выбран:
ContainerBaseImage
Свойство базового образа контейнера управляет изображением, используемым в качестве основы для образа. По умолчанию следующие значения выводятся на основе свойств проекта:
- Если проект является автономным, в качестве базового образа используется образ
mcr.microsoft.com/dotnet/runtime-deps. - Если проект является проектом ASP.NET Core, в качестве базового образа используется образ
mcr.microsoft.com/dotnet/aspnet. - В противном случае в качестве базового образа используется образ
mcr.microsoft.com/dotnet/runtime.
Тег изображения определяется числовым компонентом выбранного TargetFramework. Например, проект, предназначенный для net6.0, приводит к 6.0 тегу выводимого базового образа, а проект net7.0-linux использует тег 7.0 и т. д.
Если вы задаете здесь значение, необходимо задать полное имя изображения, которое будет использоваться в качестве основы, включая любой тег, который вы предпочитаете:
<PropertyGroup>
<ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0</ContainerBaseImage>
</PropertyGroup>
С помощью пакета SDK для .NET версии 8.0.200 ContainerBaseImage улучшается для оптимизации размера и безопасности:
- Нацелив
linux-musl-x64или идентификаторы среды выполненияlinux-musl-arm64, автоматически выбирает варианты образаalpine, чтобы обеспечить выполнение проекта:- Если проект использует
PublishAot=true,nightly/runtime-depsjammy-chiseled-aotвариант базового образа для оптимального размера и безопасности. - Если проект использует
InvariantGlobalization=false,-extraварианты используются для обеспечения локализации.
- Если проект использует
Дополнительные сведения о размерах и характеристиках изображений см. в отчете о размере образа контейнера .NET 8.0.
ContainerFamily
Начиная с .NET 8, вы можете использовать свойство ContainerFamily MSBuild для выбора другого семейства образов контейнеров, предоставляемых Корпорацией Майкрософт, в качестве базового образа для вашего приложения. При установке это значение добавляется к концу выбранного тега TFM, изменяя предоставленный тег. Например, чтобы использовать варианты Alpine Linux базовых образов .NET, можно задать для ContainerFamily значение alpine:
<PropertyGroup>
<ContainerFamily>alpine</ContainerFamily>
</PropertyGroup>
Предыдущая конфигурация проекта приводит к окончательному тегу 8.0-alpine для приложения .NET 8.NET.
Это поле является бесплатным и часто можно использовать для выбора различных дистрибутивов операционной системы, конфигураций пакетов по умолчанию или любых других изменений базового образа. Это поле игнорируется при установке ContainerBaseImage. Дополнительные сведения см. в разделе образов контейнеров .NET.
ContainerRuntimeIdentifier(s)
Свойство ContainerRuntimeIdentifier указывает ОС и архитектуру контейнера, если ContainerBaseImage поддерживает несколько платформ. Например, образ mcr.microsoft.com/dotnet/runtime поддерживает linux-x64, linux-arm, linux-arm64и win10-x64. По умолчанию это значение имеет значение RuntimeIdentifier, используемое при публикации контейнера. Как правило, не нужно явно задавать это свойство; Вместо этого используйте параметр -r с командой dotnet publish. Если выбранное изображение не поддерживает указанный RuntimeIdentifier, ошибка указывает поддерживаемые идентификаторы.
Вы всегда можете задать для свойства ContainerBaseImage полное имя изображения, включая тег, чтобы избежать необходимости использовать это свойство вообще.
<PropertyGroup>
<ContainerRuntimeIdentifier>linux-arm64</ContainerRuntimeIdentifier>
</PropertyGroup>
Чтобы указать несколько идентификаторов среды выполнения контейнера для образов с несколькими архитектурами, используйте разделенный точкой с запятой набор идентификаторов среды выполнения в свойстве ContainerRuntimeIdentifiers, аналогичный настройке нескольких TargetFrameworks:
<PropertyGroup>
<ContainerRuntimeIdentifiers>linux-x64;linux-arm64</ContainerRuntimeIdentifiers>
</PropertyGroup>
Важный
Свойство ContainerRuntimeIdentifiers должно быть подмножеством RuntimeIdentifiers свойства. Если это условие не выполнено, критически важные части конвейера сборки могут завершиться ошибкой.
Задание нескольких результатов в создании образа с несколькими ContainerRuntimeIdentifiers архитектурами. Дополнительные сведения см. в образах с несколькими архитектурами.
Дополнительные сведения об идентификаторах среды выполнения, поддерживаемых .NET, см. в каталоге RID.
Образы с несколькими архитектурами
Образы с несколькими архитектурами позволяют одному образу контейнера поддерживать несколько архитектур, упрощая кроссплатформенную разработку и развертывание. Пакет SDK для .NET поддерживает это через ContainerRuntimeIdentifiers свойство.
Начиная с версий пакета SDK 8.0.405, 9.0.102 и 9.0.2xx, поддерживается публикация контейнеров с несколькими РИДами. При публикации с помощью /t:PublishContainer:
- При указании одного
RuntimeIdentifierилиContainerRuntimeIdentifierуказанного контейнера создается контейнер с одной архитектурой, как и раньше. - Если один из
RuntimeIdentifierних не указан, но несколькоRuntimeIdentifiersилиContainerRuntimeIdentifiersзадан, пакет SDK публикует приложение для каждого указанного RID и объединяет полученные изображения в индекс изображений OCI. Этот индекс позволяет нескольким образам, зависящим от архитектуры, совместно использовать одно имя.
Заметка
Свойство ContainerRuntimeIdentifiers должно быть подмножеством RuntimeIdentifiers свойства. Дополнительные сведения см. в разделе ContainerRuntimeIdentifiers.
Эта функция упрощает рабочие процессы контейнеров в средах смешанной архитектуры. Например, разработчик на linux-x64 узле может публиковать контейнер, поддерживающий оба linux-x64 , и linux-arm64позволяет развертывать архитектуру без изменения имен образов или меток.
Созданный индекс изображений OCI широко поддерживается современными средствами контейнера, повышая совместимость и удобство использования.
Флаги, управляющие метаданными, созданными на основе образа
Следующие свойства управляют метаданными и конфигурацией, которые применяются к созданному образу контейнера независимо от идентификатора целевой среды выполнения:
ContainerImageFormat
Свойство MSBuild можно использовать ContainerImageFormat для указания формата изображения как Docker или OCI. По умолчанию средство .NET определяет формат из базового образа. Например, базовые образы .NET используют формат application/vnd.docker.distribution.manifest.v2+jsonDocker. Однако многие современные средства предпочитают формат application/vnd.oci.image.manifest.v1+jsonOCI. Чтобы принудительно применить определенный формат, задайте свойство, как показано ниже.
<PropertyGroup>
<ContainerImageFormat>OCI</ContainerImageFormat>
</PropertyGroup>
Оба формата в значительной степени взаимозаменяемы без потери информации.
Заметка
При создании образа с несколькими архитектурами результирующий формат изображения всегда является OCI.
ContainerImageTag
Свойство тега образа контейнера управляет тегами, созданными для образа. Чтобы указать один тег, используйте ContainerImageTag и для нескольких тегов ContainerImageTags.
Важный
При использовании ContainerImageTagsвы в конечном итоге будете использовать несколько изображений, по одному на уникальный тег.
Теги часто используются для ссылки на разные версии приложения, но они также могут ссылаться на разные дистрибутивы операционной системы или даже разные конфигурации.
Начиная с .NET 8, если тег не указан по умолчанию, latest.
Чтобы переопределить значение по умолчанию, укажите одно из следующих свойств:
<PropertyGroup>
<ContainerImageTag>1.2.3-alpha2</ContainerImageTag>
</PropertyGroup>
Чтобы указать несколько тегов, используйте набор тегов с запятой в свойстве ContainerImageTags, аналогичный настройке нескольких TargetFrameworks:
<PropertyGroup>
<ContainerImageTags>1.2.3-alpha2;latest</ContainerImageTags>
</PropertyGroup>
Теги могут содержать только до 127 буквенно-цифровых символов, периодов, подчеркивания и дефисов. Они должны начинаться с буквенно-цифрового символа или подчеркивания. Любая другая форма приводит к возникновению ошибки.
Заметка
При использовании ContainerImageTags или любом свойстве MSBuild, требующем ;значений с разделителями, убедитесь в правильном переходе при вызове dotnet publish из командной строки, особенно в средах CI/CD. Правила экранирования различаются между PowerShell и Bash. Рассмотрим пример.
dotnet publish --os linux --arch x64 /t:PublishContainer /p:ContainerImageTags=`"1.2.3-alpha2`;latest`"
В PowerShell необходимо экранировать как ;, так и " символы.
dotnet publish --os linux --arch x64 /t:PublishContainer /p:ContainerImageTags='"1.2.3-alpha2;latest"'
В Bash необходимо экранировать только " символ.
Это приводит к созданию двух образов: my-app:1.2.3-alpha2 и my-app:latest.
Кончик
Если у вас возникли проблемы со свойством ContainerImageTags, рассмотрите возможность определения области переменной среды ContainerImageTags.
$Env:ContainerImageTags='1.2.3;latest'; dotnet publish --os linux --arch x64 /t:PublishContainer
ContainerLabel
Метка контейнера добавляет метку метаданных в контейнер. Метки часто используются для хранения метаданных версии и разработки для использования средствами проверки безопасности и другими средствами инфраструктуры. Можно указать любое количество меток контейнера.
Узел ContainerLabel имеет два атрибута:
-
Include: ключ метки. -
Value: значение метки (это может быть пустым).
<ItemGroup>
<ContainerLabel Include="org.contoso.businessunit" Value="contoso-university" />
</ItemGroup>
Список меток, созданных по умолчанию, см. в метках контейнеров по умолчанию.
ContainerRepository
Репозиторий контейнеров — это имя самого образа, например dotnet/runtime или my-app. По умолчанию используется AssemblyName проекта.
<PropertyGroup>
<ContainerRepository>my-app</ContainerRepository>
</PropertyGroup>
Имена изображений состоят из одного или нескольких сегментов с разделителями косой черты, каждый из которых может содержать только буквенно-цифровые символы нижнего регистра, точки, символы подчеркивания и дефисы, и должен начинаться с буквы или числа. Любые другие символы приводят к возникновению ошибки.
Флаги, управляющие метаданными выполнения
Следующие свойства управляют поведением выполнения, зависящим от среды выполнения, и создание образа с несколькими архитектурами:
ContainerAppCommandContainerAppCommandArgsContainerAppCommandInstructionContainerDefaultArgsContainerEnvironmentVariableContainerPortContainerPublishInParallelContainerUserContainerWorkingDirectory
ContainerAppCommand
Элемент конфигурации команды приложения — это логическая точка входа приложения. Для большинства приложений это приложение AppHost, созданный исполняемый двоичный файл для вашего приложения. Если приложение не создает AppHost, эта команда обычно dotnet <your project dll>. Эти значения применяются после любого ENTRYPOINT в базовом контейнере или непосредственно, если ENTRYPOINT не определен.
Конфигурация ContainerAppCommand имеет одно свойство Include, представляющее команду, параметр или аргумент для использования в команде точки входа:
<ItemGroup Label="ContainerAppCommand Assignment">
<!-- This is how you would start the dotnet ef tool in your container -->
<ContainerAppCommand Include="dotnet" />
<ContainerAppCommand Include="ef" />
<!-- This shorthand syntax means the same thing, note the semicolon separating the tokens. -->
<ContainerAppCommand Include="dotnet;ef" />
</ItemGroup>
ContainerAppCommandArgs
Этот элемент конфигурации команды приложения args представляет все логически необходимые аргументы для приложения, которые должны применяться к ContainerAppCommand. По умолчанию для приложения не создается ни один из них. При наличии к контейнеру применяются args при выполнении.
Конфигурация ContainerAppCommandArgs имеет одно свойство Include, представляющее параметр или аргумент, применяемый к команде ContainerAppCommand.
<ItemGroup>
<!-- Assuming the ContainerAppCommand defined above,
this would be the way to force the database to update.
-->
<ContainerAppCommandArgs Include="database" />
<ContainerAppCommandArgs Include="update" />
<!-- This is the shorthand syntax for the same idea -->
<ContainerAppCommandArgs Include="database;update" />
</ItemGroup>
ContainerAppCommandInstruction
Конфигурация инструкций команды приложения помогает управлять способом ContainerEntrypoint, ContainerEntrypointArgs, ContainerAppCommand, ContainerAppCommandArgsи ContainerDefaultArgs объединяются для формирования окончательной команды, выполняемой в контейнере. Это зависит от того, присутствует ли ENTRYPOINT на базовом изображении. Это свойство принимает одно из трех значений: "DefaultArgs", "Entrypoint"или "None".
-
Entrypoint:- В этом режиме точка входа определяется
ContainerAppCommand,ContainerAppCommandArgsиContainerDefaultArgs.
- В этом режиме точка входа определяется
-
None:- В этом режиме точка входа определяется
ContainerEntrypoint,ContainerEntrypointArgsиContainerDefaultArgs.
- В этом режиме точка входа определяется
-
DefaultArgs:- Это самый сложный режим, если ни один из элементов
ContainerEntrypoint[Args]отсутствует,ContainerAppCommand[Args]иContainerDefaultArgsиспользуются для создания точки входа и команды. Точка входа базового образа для базовых образов с жесткой кодировкой дляdotnetили/usr/bin/dotnetпропускается таким образом, чтобы вы имели полный контроль. - Если присутствуют оба
ContainerEntrypointиContainerAppCommand,ContainerEntrypointстановится точкой входа, аContainerAppCommandстановится командой.
- Это самый сложный режим, если ни один из элементов
Заметка
Элементы конфигурации ContainerEntrypoint и ContainerEntrypointArgs устарели по сравнению с .NET 8.
Важный
Это для расширенных приложений, большинство пользователей не должны настраивать свою точку входа на эту степень. Дополнительные сведения и если вы хотите предоставить варианты использования для ваших сценариев, см. в статье GitHub: контейнер sdk для .NET создает обсуждения.
ContainerDefaultArgs
Этот элемент конфигурации args по умолчанию представляет любые переопределяемые пользователем аргументы для приложения. Это хороший способ предоставить значения по умолчанию, которые может потребоваться запустить приложение таким образом, чтобы упростить запуск, но по-прежнему легко настроить.
Конфигурация ContainerDefaultArgs имеет одно свойство Include, представляющее параметр или аргумент, применяемый к команде ContainerAppCommand.
<ItemGroup>
<!-- Assuming the ContainerAppCommand defined above,
this would be the way to force the database to update.
-->
<ContainerDefaultArgs Include="database" />
<ContainerDefaultArgs Include="update" />
<!-- This is the shorthand syntax for the same idea -->
<ContainerDefaultArgs Include="database;update" />
</ItemGroup>
ContainerEnvironmentVariable
Узел переменной среды контейнера позволяет добавлять переменные среды в контейнер. Переменные среды доступны приложению, работающему в контейнере немедленно, и часто используются для изменения поведения среды выполнения запущенного приложения.
Узел ContainerEnvironmentVariable имеет два атрибута:
-
Include: имя переменной среды. -
Value: значение переменной среды.
<ItemGroup>
<ContainerEnvironmentVariable Include="LOGGER_VERBOSITY" Value="Trace" />
</ItemGroup>
Дополнительные сведения см. впеременных среды .NET
Заметка
В настоящее время невозможно задать переменные среды из .NET CLI при публикации образа контейнера. Дополнительные сведения см. в статье GitHub: сборки контейнеров пакета SDK для .NET.
ContainerPort
Порт контейнера добавляет порты протокола управления передачей (TCP) или протокола пользовательской диаграммы данных (UDP) в список известных портов для контейнера. Это позволяет средам выполнения контейнеров, таким как Docker, автоматически сопоставлять эти порты с хост-компьютером. Это часто используется в качестве документации для контейнера, но также можно использовать для включения автоматического сопоставления портов.
Узел ContainerPort имеет два атрибута:
-
Include: номер порта для предоставления. -
Type: по умолчаниюtcpдопустимые значения —tcpилиudp.
<ItemGroup>
<ContainerPort Include="80" Type="tcp" />
</ItemGroup>
Начиная с .NET 8, ContainerPort выводится, если они не предоставляются явным образом на основе нескольких известных переменных среды ASP.NET:
ASPNETCORE_URLSASPNETCORE_HTTP_PORTSASPNETCORE_HTTPS_PORTS
Если эти переменные среды присутствуют, их значения анализируются и преобразуются в сопоставления tcp-портов. Эти переменные среды считываются из базового образа, при наличии или из переменных среды, определенных в проекте, с помощью ContainerEnvironmentVariable элементов. Дополнительные сведения см. в разделе ContainerEnvironmentVariable.
ContainerPublishInParallel
Для нескольких контейнеров RID некоторые типы проектов (например, Blazor WebAssembly) могут столкнуться с условиями гонки. Чтобы устранить эту проблему, начиная с пакета SDK для .NET версии 8.0.408, 9.0.300 и 10.0, можно управлять параллелизмом процесса публикации с помощью ContainerPublishInParallel свойства. По умолчанию публикация выполняется параллельно для каждого идентификатора среды выполнения (RID). Задание этого свойства для false обеспечения последовательной публикации, что повышает стабильность, но может занять больше времени.
<PropertyGroup>
<ContainerPublishInParallel>false</ContainerPublishInParallel>
</PropertyGroup>
Дополнительные сведения о публикации с несколькими узлами RID см. в разделе ContainerRuntimeIdentifier(s).
ContainerUser
Свойство конфигурации пользователя управляет пользователем по умолчанию, в котором выполняется контейнер. Это часто используется для запуска контейнера в качестве пользователя, не являющегося корневым, что рекомендуется для обеспечения безопасности. Существует несколько ограничений для этой конфигурации, которые следует учитывать:
- Он может принимать различные формы: имя пользователя, идентификаторы пользователей Linux, имя группы, идентификатор группы Linux,
username:groupnameи другие варианты идентификаторов. - На изображении нет проверки наличия указанного пользователя или группы.
- Изменение пользователя может изменить поведение приложения, особенно в отношении таких действий, как разрешения файловой системы .
Значение по умолчанию этого поля зависит от проекта TFM и целевой операционной системы:
- Если вы используете .NET 8 или более поздней версии и используете образы среды выполнения Майкрософт, выполните следующие действия.
- в Linux используется
appбез корневого пользователя (хотя он ссылается на его идентификатор пользователя) - В Windows используется
ContainerUserбез корневого пользователя
- в Linux используется
- В противном случае не используется
ContainerUserпо умолчанию
<PropertyGroup>
<ContainerUser>my-existing-app-user</ContainerUser>
</PropertyGroup>
Кончик
Переменная среды APP_UID используется для задания сведений о пользователе в контейнере. Это значение может поступать из переменных среды, определенных в базовом образе (например, образы Microsoft .NET), или вы можете настроить его самостоятельно с помощью синтаксиса ContainerEnvironmentVariable.
Чтобы настроить приложение для запуска от имени корневого пользователя, задайте для свойства ContainerUser значение root. В файле проекта добавьте следующее:
<PropertyGroup>
<ContainerUser>root</ContainerUser>
</PropertyGroup>
Кроме того, можно задать это значение при вызове dotnet publish из командной строки:
dotnet publish -p ContainerUser=root
ContainerWorkingDirectory
Узел рабочего каталога контейнера управляет рабочим каталогом контейнера, каталогом, который выполняется в ней, если не выполняется другая команда.
По умолчанию значение каталога /app используется в качестве рабочего каталога.
<PropertyGroup>
<ContainerWorkingDirectory>/bin</ContainerWorkingDirectory>
</PropertyGroup>
Флаги, управляющие назначением созданного образа
Следующий элемент управления свойствами, где созданный образ контейнера хранится или публикуется:
ContainerArchiveOutputPath
Чтобы создать образ контейнера в tar.gz архиве, используйте ContainerArchiveOutputPath это свойство. Эта функция полезна, если рабочий процесс не прост и требует, чтобы вы, например, запустите средство сканирования по изображениям, прежде чем отправлять их. После создания архива его можно переместить, проверить или загрузить его в локальную цепочку инструментов Docker.
Чтобы опубликовать в архиве, добавьте свойство ContainerArchiveOutputPath в команду dotnet publish, например:
dotnet publish \
-p PublishProfile=DefaultContainer \
-p ContainerArchiveOutputPath=./images/sdk-container-demo.tar.gz
Можно указать имя папки или путь с определенным именем файла. Если указать имя папки, имя файла, созданное для файла архива образа, называется $(ContainerRepository).tar.gz. Эти архивы могут содержать несколько тегов внутри них, только так как один файл создается для всех ContainerImageTags.
ContainerRegistry
Свойство реестра контейнеров управляет целевым реестром, местом отправки созданного образа. По умолчанию она отправляется в локальную управляемую программу Docker, но можно также указать удаленный реестр. При использовании удаленного реестра, требующего проверки подлинности, вы проходите проверку подлинности с помощью известных механизмов docker login. Дополнительные сведения см. в разделе "Проверка подлинности в реестрах контейнеров" для получения дополнительных сведений . Для конкретного примера использования этого свойства рассмотрим следующий пример XML:
<PropertyGroup>
<ContainerRegistry>registry.mycorp.com:1234</ContainerRegistry>
</PropertyGroup>
Это средство поддерживает публикацию в любом реестре, поддерживающем HTTP API HTTP реестра Docker версии 2. Это включает следующие реестры явным образом (и, скорее всего, гораздо более неявно):
- реестра контейнеров Azure
- Реестр эластичных контейнеров Amazon
- реестра артефактов Google
- Центр Docker
- Пакеты GitHub
- Реестр контейнеров, размещенный в GitLab
- Quay.io
Заметки о работе с этими реестрами см. в заметках, относящихся к реестру.
LocalRegistry
Свойство LocalRegistry MSBuild указывает средство локального контейнера, используемое при отправке в локальные источники. Поддерживаемые значения: docker и podman. Если этот параметр не задан, пакет SDK определяет средство на основе доступности:
- Если оба
dockerиpodmanсуществуют, иdockerявляется псевдонимом дляpodman,podmanто используется. - Если существует только
docker,dockerиспользуется. - Если существует только
podman,podmanиспользуется. - Если ни существует, возникает ошибка.
Чтобы явно задать локальное средство реестра, используйте следующую конфигурацию:
<PropertyGroup>
<LocalRegistry>podman</LocalRegistry>
</PropertyGroup>
Конфигурация именования образов контейнера
Образы контейнеров соответствуют определенному соглашению об именовании. Имя образа состоит из нескольких частей, реестра, необязательного порта, репозитория и дополнительного тега и семейства.
REGISTRY[:PORT]/REPOSITORY[:TAG[-FAMILY]]
Например, рассмотрим полное имя образа mcr.microsoft.com/dotnet/runtime:8.0-alpine:
-
mcr.microsoft.comявляется реестром (в данном случае представляет реестр контейнеров Майкрософт). -
dotnet/runtime— это репозиторий (но некоторые считают этоuser/repository). -
8.0-alpine— это тег и семейство (семейство является необязательным описателям, помогающим использовать упаковку ОС дизамбигуата).
Некоторые свойства, описанные в следующих разделах, соответствуют управлению частями созданного имени образа. Рассмотрим следующую таблицу, которая сопоставляет связь между именем образа и свойствами сборки:
| Часть имени изображения | Свойство MSBuild | Примеры значений |
|---|---|---|
REGISTRY[:PORT] |
ContainerRegistry |
mcr.microsoft.com:443 |
PORT |
ContainerPort |
:443 |
REPOSITORY |
ContainerRepository |
dotnet/runtime |
TAG |
ContainerImageTag |
8.0 |
FAMILY |
ContainerFamily |
-alpine |
Метки контейнеров по умолчанию
Метки часто используются для предоставления согласованных метаданных на образах контейнеров. Встроенные средства контейнера предоставляют некоторые метки по умолчанию для повышения качества созданных образов. Все создание меток по умолчанию можно отключить, установив для ContainerGenerateLabelsпараметра false значение . Кроме того, каждая метка по умолчанию имеет отдельный флаг включения, который можно задать для false отключения этой конкретной метки.
По возможности существующие свойства MSBuild предоставляют значения для этих меток. Другие свойства позволяют явно контролировать их значения.
| Аннотация | Значение по умолчанию | Имя выделенного свойства | Имя резервного свойства | Имя свойства включено | Примечания. |
|---|---|---|---|---|---|
org.opencontainers.image.created и org.opencontainers.artifact.created. |
Формат RFC 3339 текущей даты и времени UTC | ContainerGenerateLabelsImageCreated |
|||
org.opencontainers.artifact.description и org.opencontainers.image.description. |
ContainerDescription |
Description |
ContainerGenerateLabelsImageDescription |
||
org.opencontainers.image.authors |
ContainerAuthors |
Authors |
ContainerGenerateLabelsImageAuthors |
||
org.opencontainers.image.url |
ContainerInformationUrl |
PackageProjectUrl |
ContainerGenerateLabelsImageUrl |
||
org.opencontainers.image.documentation |
ContainerDocumentationUrl |
PackageProjectUrl |
ContainerGenerateLabelsImageDocumentation |
||
org.opencontainers.image.version |
ContainerVersion |
PackageVersion |
ContainerGenerateLabelsImageVersion |
||
org.opencontainers.image.vendor |
ContainerVendor |
ContainerGenerateLabelsImageVendor |
|||
org.opencontainers.image.licenses |
ContainerLicenseExpression |
PackageLicenseExpression |
ContainerGenerateLabelsImageLicenses |
||
org.opencontainers.image.title |
ContainerTitle |
Title |
ContainerGenerateLabelsImageTitle |
||
org.opencontainers.image.base.name |
ContainerBaseImage |
ContainerGenerateLabelsImageBaseName |
|||
org.opencontainers.image.base.digest |
ContainerGenerateLabelsImageBaseDigest |
Это дайджест SHA выбранного базового образа. Доступно в пакете SDK для .NET версии 9.0.100. | |||
org.opencontainers.image.source |
PrivateRepositoryUrl |
ContainerGenerateLabelsImageSource |
Записывается только в том PublishRepositoryUrlслучаеtrue. Кроме того, используется инфраструктура Sourcelink, являясь частью сборки. |
||
org.opencontainers.image.revision |
SourceRevisionId |
ContainerGenerateLabelsImageRevision |
Записывается только в том PublishRepositoryUrlслучаеtrue. Кроме того, используется инфраструктура Sourcelink, являясь частью сборки. |