Прочитать на английском

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


Руководство. Создание и развертывание из исходного кода в приложениях контейнеров Azure

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

Изучив этот учебник, вы:

  • Создайте простое веб-приложение.
  • Создайте связанный файл Dockerfile для приложения.
  • Создайте образ из скомпилированного кода и отправьте его в реестр контейнеров.
  • Используйте управляемое удостоверение для безопасного доступа к реестру контейнеров.
  • Разверните контейнер в приложениях контейнеров Azure.
  • Просмотрите приложение в браузере, чтобы проверить развертывание.

Необходимые компоненты

Чтобы завершить этот проект, вам потребуется следующее:

Требование Instructions
Учетная запись Azure Если у вас нет учетной записи, создайте бесплатную учетную запись. Чтобы продолжить, вам потребуется разрешение участника или владельца подписки Azure.

Дополнительные сведения см. в статье "Назначение ролей Azure" с помощью портал Azure.
Azure CLI Установите Azure CLI или обновите ее до последней версии. Интерфейс командной строкиazd разработчика Azure (команды) доступен через Azure CLI.

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

Установите пакет SDK для .NET.

Создание локального приложения

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

Примечание

Если вы хотите использовать другой язык, отличный от перечисленных, введите следующий запрос в предпочитаемую модель ИИ.

Перед отправкой запроса замените <LANGUAGE> выбранным языком.

Generate the simplest possible "hello world" web server in idiomatic <LANGUAGE>.

Make sure to include any dependencies required for the application to run locally and in production. 
  1. Создайте и запустите исходный код.

    Создайте проект C#.

    dotnet new webapp --name MyAcaDemo --language C#
    

    Перейдите в папку MyAcaDemo .

    cd MyAcaDemo
    

    Откройте Program.cs в редакторе кода и замените содержимое следующим кодом.

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
    
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.UseUrls("http://*:8080");
                });
    }
    

    Program Реализация класса с помощью этого кода создает основу веб-приложения. Затем создайте класс, ответственный за возврат веб-страницы в качестве ответа.

    В той же папке создайте новый файл с именем Startup.cs и введите следующий код.

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
        }
    
        public void Configure(IApplicationBuilder app)
        {   
            app.UseRouting();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });
        }
    }
    

    Теперь, когда запрос выполняется в веб-приложение, возвращается текст "Hello World!". Чтобы убедиться, что код работает правильно на локальном компьютере, создайте проект в конфигурации выпуска.

    dotnet build -c Release
    

    Затем запустите приложение, чтобы убедиться, что код реализован правильно.

    dotnet run --configuration Release
    

    Убедившись, что приложение работает должным образом, можно остановить локальный сервер и перейти к созданию Dockerfile, чтобы развернуть приложение в контейнерных приложениях.

  2. В папке MyAcaDemo создайте файл с именем Dockerfile и добавьте следующее содержимое.

    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
    WORKDIR /src
    COPY . .
    RUN dotnet publish -c Release -o /app/publish
    
    FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
    WORKDIR /app
    COPY --from=build /app/publish .
    EXPOSE 8080
    ENTRYPOINT ["dotnet", "MyAcaDemo.dll"]
    

    Теперь, когда у вас есть код и файл Dockerfile, вы можете развернуть приложение в приложениях контейнеров Azure.

Создание ресурсов Azure

  1. Войдите в Azure из ИНТЕРФЕЙСА командной строки с помощью следующей команды. Чтобы завершить процесс проверки подлинности, обязательно следуйте всем запросам.

    az login
    
  2. Установите или обновите расширение приложений контейнеров Azure для Azure CLI.

    az extension add --name containerapp --upgrade
    

    Примечание

    Если при выполнении az containerapp команд возникают ошибки, связанные с отсутствующими параметрами, убедитесь, что установлена последняя версия расширения приложений контейнеров Azure.

  3. После завершения установки Azure CLI можно определить набор переменных среды.

    Перед выполнением следующей команды просмотрите указанные значения.

    Расположение настроено как центральная часть США, но вы можете изменить расположение, ближайшее к вам, если вы предпочитаете.

    LOCATION="CentralUS"
    RESOURCE_GROUP="my-demo-group"
    IDENTITY_NAME="my-demo-identity"
    ENVIRONMENT="my-demo-environment"
    REGISTRY_NAME="mydemoregistry$(openssl rand -hex 4)"
    CONTAINER_APP_NAME="my-demo-app"
    

    Команда mydemoregistry$(openssl rand -hex 4) создает случайную строку для использования в качестве имени реестра контейнеров. Имена реестра должны быть глобально уникальными, поэтому эта строка помогает обеспечить успешное выполнение команд.

  4. Создайте группу ресурсов для упорядочивания служб, связанных с развертыванием приложения контейнера.

    az group create \
      --name $RESOURCE_GROUP \
      --location $LOCATION \
      --output none
    
  5. Создайте управляемое удостоверение, назначаемое пользователем, и получите его идентификатор со следующими командами.

    Сначала создайте управляемое удостоверение.

    az identity create \
        --name $IDENTITY_NAME \
        --resource-group $RESOURCE_GROUP \
        --output none
    

    Теперь задайте идентификатор удостоверения в переменную для последующего использования.

    IDENTITY_ID=$(az identity show \
      --name $IDENTITY_NAME \
      --resource-group $RESOURCE_GROUP \
      --query id \
      --output tsv)
    
  6. Создайте среду "Приложения контейнеров" для размещения приложения с помощью следующей команды.

    az containerapp env create \
        --name $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION \
        --mi-user-assigned $IDENTITY_ID \
        --output none
    
  7. Создайте экземпляр Реестр контейнеров Azure (ACR) в группе ресурсов. Реестр хранит образ контейнера.

    az acr create \
      --resource-group $RESOURCE_GROUP \
      --name $REGISTRY_NAME \
      --sku Basic \
      --output none
    
  8. Назначьте управляемое удостоверение, назначаемое пользователем, экземпляру реестра контейнеров с помощью следующей команды.

    az acr identity assign \
      --identities $IDENTITY_ID \
      --name $REGISTRY_NAME \
      --resource-group $RESOURCE_GROUP \
      --output none
    

Создание и отправка образа в реестр

Создайте и отправьте образ контейнера в экземпляр реестра контейнеров с помощью следующей команды.

az acr build \
    -t $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" \
    -r $REGISTRY_NAME .

Эта команда применяет тег helloworld к образу контейнера.

Создание приложения-контейнера

Создайте приложение-контейнер с помощью следующей команды.

az containerapp create \
  --name $CONTAINER_APP_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $ENVIRONMENT \
  --image $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" \
  --target-port 8080 \
  --ingress external \
  --user-assigned $IDENTITY_ID \
  --registry-identity $IDENTITY_ID \
  --registry-server $REGISTRY_NAME.azurecr.io \
  --query properties.configuration.ingress.fqdn

Эта команда добавляет роль в acrPull управляемое удостоверение, назначаемое пользователем, поэтому она может извлекать образы из реестра контейнеров.

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

Параметр Стоимость Описание
name $CONTAINER_APP_NAME Имя приложения-контейнера.
resource-group $RESOURCE_GROUP Группа ресурсов, в которой развернуто приложение контейнера.
environment $ENVIRONMENT Среда, в которой выполняется приложение контейнера.
image $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" Образ контейнера для развертывания, включая имя реестра и тег.
target-port 80 Соответствует порту, которому приложение прослушивает запросы.
ingress external Делает приложение-контейнер доступным из общедоступного Интернета.
user-assigned $IDENTITY_ID Управляемое удостоверение, назначаемое пользователем для приложения контейнера.
registry-identity registry-identity Удостоверение, используемое для доступа к реестру контейнеров.
registry-server $REGISTRY_NAME.azurecr.io Адрес сервера реестра контейнеров.
query properties.configuration.ingress.fqdn Фильтрует выходные данные только для полного доменного имени приложения (FQDN).

После завершения этой команды он возвращает URL-адрес для нового веб-приложения.

Проверка развертывания

Скопируйте URL-адрес приложения в веб-браузер. После запуска приложения-контейнера он возвращает Hello World!.

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

Очистка ресурсов

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

Если вы закончите и хотите удалить все ресурсы Azure, созданные в этом руководстве, удалите группу ресурсов с помощью следующей команды.

az group delete --name aca-demo

Совет

Возникли проблемы? Сообщите о них в репозитории Azure Container Apps на GitHub.

Следующие шаги

Далее перейдите к сведениям об обновлении созданного приложения контейнера.