Поделиться через


Быстрый старт: контейнерные инструменты в Visual Studio

С помощью Visual Studio можно легко создавать, отлаживать и запускать контейнерные приложения .NET, ASP.NET и ASP.NET Core и публиковать их в реестре контейнеров Azure, Docker Hub, Службе приложений Azure или собственном реестре контейнеров. В этой статье мы опубликуем приложение ASP.NET Core в Реестр контейнеров Azure.

Необходимые условия

Установка и настройка

Для установки Docker сначала просмотрите сведения в Docker Desktop для Windows: что нужно знать перед установкой. Затем установите Docker Desktop.

Добавление проекта в контейнер Docker

  1. Создайте проект с помощью шаблона ASP.NET Core Web App или если вы хотите использовать .NET Framework вместо .NET Core, выберите ASP.NET веб-приложение (.NET Framework).

  2. На экране создания веб-приложения установите флажок "Включить поддержку Docker ".

    Снимок экрана: флажок

    Снимок экрана: .NET Core; Если вы используете .NET Framework, он выглядит немного иначе.

  3. Выберите нужный тип контейнера (Windows или Linux) и нажмите кнопку "Создать".

Обзор Dockerfile

Dockerfile, рецепт создания окончательного образа Docker, создается в проекте. Обратитесь к документации Dockerfile, чтобы разобраться в его командах.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

Предыдущий файл Dockerfile основан на образе dotnet/core/aspnet и содержит инструкции по изменению базового образа, создав проект и добавив его в контейнер. Если вы используете .NET Framework, базовый образ будет отличаться.

Если установлен флажок "Настройка нового проекта для HTTPS ", dockerfile предоставляет два порта. Один порт используется для трафика HTTP; другой порт используется для HTTPS. Если флажок не установлен, для HTTP-трафика предоставляется один порт (80).

Отладка

Выберите Docker из раскрывающегося списка отладки на панели инструментов и начните отладку приложения. Может появиться сообщение с запросом на доверие к сертификату; Выберите, чтобы доверять сертификату, чтобы продолжить.

Параметр "Средства контейнера " в окне вывода показывает, какие действия происходят. В первый раз может потребоваться некоторое время, чтобы скачать базовый образ, но это гораздо быстрее при последующих запусках.

Заметка

Если необходимо изменить порты для отладки, это можно сделать в файлеlaunchSettings.json . См. раздел "Параметры запуска контейнера".

Окно контейнеров

Если у вас есть Visual Studio 2019 версии 16.4 или более поздней версии, можно использовать окно "Контейнеры " для просмотра запущенных контейнеров на компьютере, а также доступных образов.

Откройте окно "Контейнеры " с помощью поля поиска в интегрированной среде разработки ( нажмите клавиши CTRL+Q , чтобы использовать его), введите containerи выберите окно "Контейнеры " из списка.

Вы можете закрепить окно контейнеров в удобном месте, например под редактором, перемещая ее и ориентируясь на руководства по размещению окна.

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

Снимок экрана: окно

Дополнительные сведения см. в окне "Использование контейнеров".

Публикация образов Docker

После завершения процесса разработки и отладки приложения можно создать рабочий образ приложения.

  1. Измените раскрывающийся список конфигурации на выпуск и создайте приложение.

  2. Щелкните проект правой кнопкой мыши в обозревателе решений и выберите "Опубликовать".

  3. В диалоговом окне "Публикация" выберите вкладку Реестра контейнеров Docker .

    Снимок экрана: диалоговое окно

  4. Выберите "Создать реестр контейнеров Azure".

    Снимок экрана: диалоговое окно

  5. Заполните необходимые значения в форме создания нового реестра контейнеров Azure.

    Настройки Предлагаемое значение Описание
    Префикс DNS Глобально уникальное имя Имя, которое однозначно идентифицирует реестр контейнеров.
    подписки Выбор подписки Используемая подписка Azure.
    Группа ресурсов мояГруппаРесурсов Имя группы ресурсов, в которой создается реестр контейнеров. Выберите "Создать" , чтобы создать новую группу ресурсов.
    Номер SKU Стандарт Уровень служб реестра контейнеров
    Местоположение реестра Расположение, близкое к вам Выберите расположение в регионе рядом с вами или рядом с другими службами, которые будут использовать реестр контейнеров.

    Снимок экрана: диалоговое окно создания реестра контейнеров Azure в Visual Studio.

  6. Нажмите кнопку "Создать". Диалоговое окно публикации отображает созданный реестр.

    Снимок экрана: диалоговое окно публикации с созданным реестром контейнеров Azure.

  7. Нажмите кнопку "Готово ", чтобы завершить публикацию образа контейнера в только что созданном реестре в Azure.

    Снимок экрана: успешная публикация.

Дальнейшие действия

Теперь можно загрузить контейнер из реестра на любой узел, который может запускать образы Docker, например, экземпляры контейнеров Azure.

С помощью Visual Studio можно легко создавать, отлаживать и запускать контейнерные приложения .NET, ASP.NET и ASP.NET Core и публиковать их в реестре контейнеров Azure, Docker Hub, Службе приложений Azure или собственном реестре контейнеров. В этой статье вы публикуете приложение ASP.NET Core в Реестр контейнеров Azure.

Необходимые условия

Необходимые условия

Установка и настройка

Для установки Docker сначала просмотрите сведения в Docker Desktop для Windows: что нужно знать перед установкой. Затем установите Docker Desktop.

Установка и настройка

Для установки Docker сначала просмотрите сведения в Docker Desktop для Windows: что нужно знать перед установкой. Затем установите Docker Desktop.

Чтобы использовать Podman в качестве платформы контейнеров, скачайте Podman Desktop для Windows, а затем следуйте руководству Podman for Windows, чтобы инициализировать и запустить машину Podman.

Добавление проекта в контейнер

  1. Перед созданием проекта Visual Studio убедитесь, что Docker Desktop запускает тип контейнеров (Windows или Linux), которые вы планируете использовать в проекте Visual Studio.

    Чтобы изменить тип контейнера, используемый Docker Desktop, щелкните правой кнопкой мыши значок Docker (кит) на панели задач и выберите пункт "Переключиться на контейнеры Linux" или "Переключиться на контейнерыWindows".

    Предупреждение

    Если вы переключите тип контейнера после создания проекта Visual Studio, файлы образов Docker могут не загружаться.

  2. Создайте проект с помощью шаблона ASP.NET Core Web App .

  3. На экране создания веб-приложения установите флажок "Включить поддержку контейнеров ".

    Снимок экрана: флажок

    Снимок экрана: последний выпуск с .NET 8.0.

  4. Выберите нужный тип контейнера (Windows или Linux) и нажмите кнопку "Создать".

Обзор Dockerfile

Visual Studio создает Dockerfile в проекте, который предоставляет рецепт создания окончательного образа Docker. Дополнительные сведения см. в справочнике по Dockerfile для получения сведений о командах, используемых в Dockerfile.

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["MyWepApp/MyWebApp.csproj", "MyWebApp/"]
RUN dotnet restore "./MyWebApp/./MyWebApp.csproj"
COPY . .
WORKDIR "/src/MyWebApp"
RUN dotnet build "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]

Предыдущий файл Dockerfile основан на образе каталога контейнеров Microsoft Syndicates .NET 8 и содержит инструкции по изменению базового образа, создав проект с именем MyWebApp и добавив его в контейнер. Если вы используете .NET Framework, базовый образ отличается.

Если установлен флажок "Настройка нового проекта для HTTPS ", dockerfile предоставляет два порта. Один порт используется для трафика HTTP; другой порт используется для HTTPS. Если флажок не установлен, для трафика HTTP предоставляется один порт (80 или 8080).

При использовании .NET 8 и более поздних версий у вас есть преимущество безопасного запуска приложения как обычного пользователя, а не с повышенными разрешениями. Файл Dockerfile по умолчанию, созданный Visual Studio для проектов .NET 8, настроен для запуска в качестве обычного пользователя. Чтобы включить это поведение в существующем проекте, добавьте строку USER app в файл Dockerfile в базовом образе. Кроме того, поскольку порт 80 ограничен для обычных пользователей, предоставляет порты 8080 и 8081 вместо 80 и 443. Порт 8080 используется для трафика HTTP, а порт 8081 используется для HTTPS. Для запуска от имени обычного пользователя контейнер должен использовать базовый образ .NET 8, и приложение должно работать в качестве приложения .NET 8. При правильной настройке Dockerfile должен содержать код, как показано в следующем примере:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

Шаблоны по умолчанию для .NET 8 и более поздних версий используют переменную APP_UID среды для удостоверения обычного пользователя.

Отладка

Выберите Docker из раскрывающегося списка отладки на панели инструментов и начните отладку приложения. Может появиться сообщение с запросом на доверие к сертификату; Выберите, чтобы доверять сертификату, чтобы продолжить.

Параметр "Средства контейнера " в окне вывода показывает, какие действия происходят. В первый раз может потребоваться некоторое время, чтобы скачать базовый образ, но это быстрее при последующих запусках.

После завершения сборки откроется браузер и отобразит домашнюю страницу приложения. В адресной строке браузера можно просмотреть URL-адрес localhost и номер порта для отладки.

Заметка

Если необходимо изменить порты для отладки, это можно сделать в файле launchSettings.json. См. раздел "Параметры запуска контейнера".

Окно контейнеров

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

Откройте окно "Контейнеры " с помощью поля поиска в интегрированной среде разработки ( нажмите клавиши CTRL+Q , чтобы использовать его), введите containerи выберите окно "Контейнеры " из списка.

Вы можете закрепить окно контейнеров в удобном месте, например под редактором, перемещая ее и ориентируясь на руководства по размещению окна.

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

Снимок экрана: окно

Дополнительные сведения см. в окне "Использование контейнеров".

Публикация образов Docker

После завершения процесса разработки и отладки приложения можно создать рабочий образ приложения.

  1. Измените раскрывающийся список конфигурации на выпуск и создайте приложение.

  2. Щелкните проект правой кнопкой мыши в обозревателе решений и выберите "Опубликовать".

  3. В диалоговом окне "Публикация" выберите вкладку Реестра контейнеров Docker .

    Снимок экрана: диалоговое окно

  4. Выберите "Создать реестр контейнеров Azure".

    Снимок экрана: диалоговое окно

  5. Заполните необходимые значения в форме создания нового реестра контейнеров Azure.

    Настройки Предлагаемое значение Описание
    Префикс DNS Глобально уникальное имя Имя, которое однозначно идентифицирует реестр контейнеров.
    подписки Выбор подписки Используемая подписка Azure.
    Группа ресурсов мояГруппаРесурсов Имя группы ресурсов, в которой создается реестр контейнеров. Выберите "Создать" , чтобы создать новую группу ресурсов.
    Номер SKU Стандарт Уровень служб реестра контейнеров
    Местоположение реестра Расположение, близкое к вам Выберите расположение в регионе рядом с вами или рядом с другими службами, которые могут использовать реестр контейнеров.

    Снимок экрана: диалоговое окно создания реестра контейнеров Azure в Visual Studio.

  6. Нажмите кнопку "Создать". Диалоговое окно публикации отображает созданный реестр.

    Снимок экрана: диалоговое окно публикации с созданным реестром контейнеров Azure.

  7. Нажмите кнопку "Готово ", чтобы завершить публикацию образа контейнера в только что созданном реестре в Azure.

    Снимок экрана: успешная публикация.

Дальнейшие действия

Теперь можно загрузить контейнер из реестра на любой узел, который может запускать образы Docker, например, экземпляры контейнеров Azure.

Добавление проекта в контейнер

  1. Перед созданием проекта Visual Studio убедитесь, что Docker Desktop запускает тип контейнеров (Windows или Linux), которые вы планируете использовать в проекте Visual Studio.

    Чтобы изменить тип контейнера, используемый Docker Desktop, щелкните правой кнопкой мыши значок Docker (кит) на панели задач и выберите пункт "Переключиться на контейнеры Linux" или "Переключиться на контейнерыWindows".

    Предупреждение

    Если вы переключите тип контейнера после создания проекта Visual Studio, файлы образов Docker могут не загружаться.

  2. Создайте проект с помощью шаблона ASP.NET Core Web App .

  3. На экране создания веб-приложения установите флажок "Включить поддержку контейнеров ".

    Снимок экрана: флажок

    Снимок экрана: последний выпуск с .NET 8.0.

  4. Выберите нужный тип контейнера (Windows или Linux) и нажмите кнопку "Создать".

Обзор Dockerfile

Visual Studio создает Dockerfile в проекте, который предоставляет рецепт создания окончательного образа Docker. Дополнительные сведения см. в справочнике по Dockerfile для получения сведений о командах, используемых в Dockerfile.

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["MyWepApp/MyWebApp.csproj", "MyWebApp/"]
RUN dotnet restore "./MyWebApp/./MyWebApp.csproj"
COPY . .
WORKDIR "/src/MyWebApp"
RUN dotnet build "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]

Предыдущий файл Dockerfile основан на образе каталога контейнеров Microsoft Syndicates .NET 8 и содержит инструкции по изменению базового образа, создав проект с именем MyWebApp и добавив его в контейнер.

Если установлен флажок "Настройка нового проекта для HTTPS ", dockerfile предоставляет два порта. Один порт используется для трафика HTTP; другой порт используется для HTTPS. Если флажок не установлен, для трафика HTTP предоставляется один порт (80 или 8080).

При использовании .NET 8 и более поздних версий у вас есть преимущество безопасного запуска приложения как обычного пользователя, а не с повышенными разрешениями. Файл Dockerfile по умолчанию, созданный Visual Studio для проектов .NET 8, настроен для запуска в качестве обычного пользователя. Чтобы включить это поведение в существующем проекте, добавьте строку USER app в файл Dockerfile в базовом образе. Кроме того, поскольку порт 80 ограничен для обычных пользователей, предоставляет порты 8080 и 8081 вместо 80 и 443. Порт 8080 используется для трафика HTTP, а порт 8081 используется для HTTPS. Для запуска от имени обычного пользователя контейнер должен использовать базовый образ .NET 8, и приложение должно работать в качестве приложения .NET 8. При правильной настройке Dockerfile должен содержать код, как показано в следующем примере:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

Шаблоны по умолчанию используют переменную APP_UID среды для удостоверения обычного пользователя.

Отладка

Выберите Docker из раскрывающегося списка отладки на панели инструментов и начните отладку приложения. Может появиться сообщение с запросом на доверие к сертификату; Выберите, чтобы доверять сертификату, чтобы продолжить.

Параметр "Средства контейнера " в окне вывода показывает, какие действия происходят. В первый раз может потребоваться некоторое время, чтобы скачать базовый образ, но это быстрее при последующих запусках.

После завершения сборки откроется браузер и отобразит домашнюю страницу приложения. В адресной строке браузера можно просмотреть URL-адрес localhost и номер порта для отладки.

Заметка

Если необходимо изменить порты для отладки, это можно сделать в файле launchSettings.json. См. раздел "Параметры запуска контейнера".

Окно контейнеров

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

Откройте окно "Контейнеры " с помощью поля поиска в интегрированной среде разработки ( нажмите клавиши CTRL+Q , чтобы использовать его), введите containerи выберите окно "Контейнеры " из списка.

Вы можете закрепить окно контейнеров в удобном месте, например под редактором, перемещая ее и ориентируясь на руководства по размещению окна.

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

Снимок экрана: окно

Дополнительные сведения см. в окне "Использование контейнеров".

Публикация образов Docker

После завершения процесса разработки и отладки приложения можно создать рабочий образ приложения.

  1. Измените раскрывающийся список конфигурации на выпуск и создайте приложение.

  2. Щелкните проект правой кнопкой мыши в обозревателе решений и выберите "Опубликовать".

  3. В диалоговом окне "Публикация" выберите вкладку Реестра контейнеров Docker .

    Снимок экрана: диалоговое окно

  4. Выберите "Создать реестр контейнеров Azure".

    Снимок экрана: диалоговое окно

  5. Заполните необходимые значения в форме создания нового реестра контейнеров Azure.

    Настройки Предлагаемое значение Описание
    Префикс DNS Глобально уникальное имя Имя, которое однозначно идентифицирует реестр контейнеров.
    подписки Выбор подписки Используемая подписка Azure.
    Группа ресурсов мояГруппаРесурсов Имя группы ресурсов, в которой создается реестр контейнеров. Выберите "Создать" , чтобы создать новую группу ресурсов.
    Номер SKU Стандарт Уровень служб реестра контейнеров
    Местоположение реестра Расположение, близкое к вам Выберите расположение в регионе рядом с вами или рядом с другими службами, которые могут использовать реестр контейнеров.

    Снимок экрана: диалоговое окно создания реестра контейнеров Azure в Visual Studio.

  6. Нажмите кнопку "Создать". Диалоговое окно публикации отображает созданный реестр.

    Снимок экрана: диалоговое окно публикации с созданным реестром контейнеров Azure.

  7. Нажмите кнопку "Готово ", чтобы завершить публикацию образа контейнера в только что созданном реестре в Azure.

    Снимок экрана: успешная публикация.

Дальнейшие действия

Теперь можно загрузить контейнер из реестра на любой узел, который может запускать образы Docker, например, экземпляры контейнеров Azure.

Дополнительные ресурсы