Официальные .NET-образы Docker — это образы Docker, оптимизированные Майкрософт. Они доступны для всех в репозиториях Майкрософт в Центре Docker. Каждый репозиторий может содержать несколько образов, в зависимости от версии платформы .NET и операционной системы (Linux Debian, Linux Alpine, Windows Nano Server, Windows Server Core и т. д.).
Начиная с версии .NET Core 2.1, все образы .NET Core или более поздней версии, в том числе для ASP.NET Core, можно найти в репозитории образов .NET на сайте Docker Hub: https://hub.docker.com/_/microsoft-dotnet/.
Начиная с мая 2018 г., образы Майкрософт объединяются в реестре контейнеров Майкрософт. Официальный каталог по-прежнему доступен только в центре Docker, и здесь можно найти обновленный адрес для извлечения образа.
Большинство репозиториев образов предоставляют широкие возможности по использованию тегов, чтобы облегчить выбор не только конкретной версии платформы, но и ОС (дистрибутива Linux или версии Windows).
Оптимизация образов .NET и Docker для разработки и рабочей среды
При создании образов Docker для разработчиков Майкрософт сосредотачивается на следующих основных сценариях:
- образы, используемые для разработки и сборки приложений .NET;
- образы, используемые для запуска приложений .NET.
Зачем использовать несколько образов? При разработке, сборке и выполнении приложений в контейнерах приоритеты будут разными. Предоставляя различные образы для каждой из задач, Майкрософт помогает оптимизировать отдельные процессы разработки, сборки и развертывания приложений.
Во время разработки и сборки
Во время разработки важна скорость выполнения итераций для изменений и возможность отлаживать изменения. Размер образа не так важен, как возможность быстро вносить изменения в код и просматривать их. Некоторые средства и "контейнеры агентов сборки" на стадии разработки и сборки используют образ .NET для разработки (mcr.microsoft.com/dotnet/sdk:6.0). При сборке внутри контейнера Docker надо учитывать, какие элементы необходимы для компиляции приложения. Сюда входят зависимости компилятора и другие зависимости .NET.
Почему так важен этот тип образа сборки? Этот образ не развертывается в рабочую среду. Это образ, который вы используете для сборки содержимого, помещаемого в рабочий образ. Если вы используете многоэтапную сборку Docker, этот образ будет применяться в среде непрерывной интеграции (CI) или в среде сборки.
Производство
При производстве важно быстро развернуть и запустить контейнеры на основе рабочего образа .NET. Поэтому образ только для среды выполнения на базе mcr.microsoft.com/dotnet/aspnet:6.0 имеет малый размер и может быстро перемещаться по сети из реестра Docker к узлам Docker. Содержимое готово к запуску, поэтому период времени от запуска контейнера до обработки результатов минимален. В модели Docker компиляция из кода C# отсутствует, так как при запуске dotnet build или dotnet publish при использовании контейнера сборки сборки не требуется.
В этот оптимизированный образ вы помещаете только двоичные файлы и другое содержимое, необходимое для выполнения приложения. Например, в содержимое, создаваемое командой dotnet publish, входят только скомпилированные двоичные файлы .NET, образы, файлы .js и .css. Со временем появятся образы, которые содержат пакеты, предварительно скомпилированные JIT-компилятором (компиляция из промежуточного языка в машинный код во время выполнения).
Хотя существует несколько версий образов .NET и ASP.NET Core, они все имеют один или несколько общих уровней, включая базовый уровень. Поэтому образ занимает мало места на диске, ведь он содержит лишь различия между вашим образом и базовым образом. В результате можно быстро извлекать образы из реестра.
При просмотре репозиториев .NET-образов в центре Docker вы найдете несколько версий, классифицированных или помеченных тегами. Эти теги помогают определить, какую версию использовать, как показано в таблице:
Образ —Комментарииmcr.microsoft.com/dotnet/aspnet:6.0ASP.NET Core только со средой выполнения и оптимизацией ASP.NET Core в Linux и Windows (для разных архитектур)mcr.microsoft.com/dotnet/sdk:6.0.NET 6 с пакетами SDK в Linux и Windows (для разных архитектур)
Вы можете найти все доступные образы docker в dotnet-docker, а также обратиться к последним предварительным версиям, используя ночную сборку mcr.microsoft.com/dotnet/nightly/*.