Udostępnij za pomocą


Samouczek: kompilowanie i wdrażanie z kodu źródłowego do usługi Azure Container Apps

W tym artykule pokazano, jak utworzyć i wdrożyć aplikację w usłudze Azure Container Apps z kodu źródłowego na maszynie w preferowanym języku programowania.

W tym samouczku wykonasz następujące elementy:

  • Utwórz prostą aplikację internetową.
  • Utwórz skojarzony plik Dockerfile dla aplikacji.
  • Utwórz obraz na podstawie skompilowanego kodu i wypchnij go do rejestru kontenerów.
  • Użyj tożsamości zarządzanej, aby bezpiecznie uzyskać dostęp do rejestru kontenerów.
  • Wdróż kontener w usłudze Azure Container Apps.
  • Wyświetl aplikację w przeglądarce, aby zweryfikować wdrożenie.

Wymagania wstępne

Do ukończenia tego projektu potrzebne są następujące elementy:

Wymaganie Instrukcje
Konto platformy Azure Jeśli go nie masz, utwórz bezpłatne konto. Aby kontynuować, musisz mieć uprawnienie Współautor lub Właściciel w subskrypcji platformy Azure.

Aby uzyskać szczegółowe informacje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal .
Interfejs wiersza polecenia platformy Azure Zainstaluj interfejs wiersza polecenia platformy Azure lub uaktualnij go do najnowszej wersji. Interfejs wiersza polecenia dla deweloperów platformy Azure (azd polecenia) jest dostępny za pośrednictwem interfejsu wiersza polecenia platformy Azure.

W zależności od wybranego języka może być również konieczne zainstalowanie odpowiedniego środowiska uruchomieniowego, zestawu SDK i innych zależności.

Zainstaluj zestaw .NET SDK.

Tworzenie aplikacji lokalnej

W poniższych krokach pokazano kod i zależności wymagane do utworzenia przykładowej aplikacji do wdrożenia w usłudze Azure Container Apps.

Uwaga

Jeśli chcesz użyć innego języka niż wymienione na liście, wprowadź następujący monit w preferowanym modelu sztucznej inteligencji.

Przed przesłaniem monitu zastąp <LANGUAGE> ciąg wybranym językiem.

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. Utwórz i uruchom kod źródłowy.

    Utwórz nowy projekt w języku C#.

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

    Przejdź do folderu MyAcaDemo .

    cd MyAcaDemo
    

    Otwórz Program.cs plik w edytorze kodu i zastąp zawartość następującym kodem.

    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");
                });
    }
    

    Implementowanie klasy za Program pomocą tego kodu powoduje utworzenie podstawy aplikacji internetowej. Następnie utwórz klasę odpowiedzialną za zwrócenie strony internetowej jako odpowiedzi.

    W tym samym folderze utwórz nowy plik o nazwie Startup.cs i wprowadź następujący kod.

    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!");
                });
            });
        }
    }
    

    Teraz po wysłaniu żądania do aplikacji internetowej zostanie zwrócony tekst "Hello World!". Aby sprawdzić, czy kod działa poprawnie na komputerze lokalnym, skompiluj projekt w konfiguracji wydania.

    dotnet build -c Release
    

    Następnie uruchom aplikację, aby sprawdzić, czy kod został poprawnie zaimplementowany.

    dotnet run --configuration Release
    

    Po sprawdzeniu, czy aplikacja działa zgodnie z oczekiwaniami, możesz zatrzymać serwer lokalny i przejść do tworzenia pliku Dockerfile, aby można było wdrożyć aplikację w usłudze Container Apps.

  2. W folderze MyAcaDemo utwórz plik o nazwie Dockerfile i dodaj następującą zawartość.

    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"]
    

    Teraz, gdy masz gotowy kod i plik Dockerfile, możesz wdrożyć aplikację w usłudze Azure Container Apps.

Tworzenie zasobów platformy Azure

  1. Zaloguj się do platformy Azure z poziomu interfejsu wiersza polecenia przy użyciu następującego polecenia. Aby ukończyć proces uwierzytelniania, postępuj zgodnie ze wszystkimi monitami.

    az login
    
  2. Zainstaluj lub zaktualizuj rozszerzenie usługi Azure Container Apps dla interfejsu wiersza polecenia platformy Azure.

    az extension add --name containerapp --upgrade
    

    Uwaga

    Jeśli podczas uruchamiania az containerapp poleceń wystąpią błędy dotyczące brakujących parametrów, upewnij się, że masz zainstalowaną najnowszą wersję rozszerzenia Azure Container Apps.

  3. Po zakończeniu konfiguracji interfejsu wiersza polecenia platformy Azure możesz zdefiniować zestaw zmiennych środowiskowych.

    Przed uruchomieniem następującego polecenia przejrzyj podane wartości.

    Lokalizacja jest skonfigurowana jako Środkowe stany USA, ale jeśli wolisz, możesz zmienić lokalizację na najbliższą.

    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"
    

    Polecenie mydemoregistry$(openssl rand -hex 4) generuje losowy ciąg do użycia jako nazwę rejestru kontenerów. Nazwy rejestru muszą być globalnie unikatowe, dlatego ten ciąg pomaga zapewnić pomyślne uruchomienie poleceń.

  4. Utwórz grupę zasobów, aby zorganizować usługi związane z wdrożeniem aplikacji kontenera.

    az group create \
      --name $RESOURCE_GROUP \
      --location $LOCATION \
      --output none
    
  5. Utwórz tożsamość zarządzaną przypisaną przez użytkownika i uzyskaj jej identyfikator za pomocą następujących poleceń.

    Najpierw utwórz tożsamość zarządzaną.

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

    Teraz ustaw identyfikator tożsamości na zmienną do późniejszego użycia.

    IDENTITY_ID=$(az identity show \
      --name $IDENTITY_NAME \
      --resource-group $RESOURCE_GROUP \
      --query id \
      --output tsv)
    
  6. Utwórz środowisko usługi Container Apps do hostowania aplikacji przy użyciu następującego polecenia.

    az containerapp env create \
        --name $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION \
        --mi-user-assigned $IDENTITY_ID \
        --output none
    
  7. Utwórz wystąpienie usługi Azure Container Registry (ACR) w grupie zasobów. Rejestr przechowuje obraz kontenera.

    az acr create \
      --resource-group $RESOURCE_GROUP \
      --name $REGISTRY_NAME \
      --sku Basic \
      --output none
    
  8. Przypisz tożsamość zarządzaną przypisaną przez użytkownika do wystąpienia rejestru kontenerów za pomocą następującego polecenia.

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

Kompilowanie i wypychanie obrazu do rejestru

Skompiluj i wypchnij obraz kontenera do wystąpienia rejestru kontenerów za pomocą następującego polecenia.

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

To polecenie stosuje tag helloworld do obrazu kontenera.

Tworzenie aplikacji kontenera

Utwórz aplikację kontenera za pomocą następującego polecenia.

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

To polecenie dodaje acrPull rolę do tożsamości zarządzanej przypisanej przez użytkownika, aby umożliwić ściąganie obrazów z rejestru kontenerów.

W poniższej tabeli opisano parametry używane przez to polecenie.

Parametr Wartość Opis
name $CONTAINER_APP_NAME Nazwa aplikacji kontenera.
resource-group $RESOURCE_GROUP Grupa zasobów, w której wdrożono aplikację kontenera.
environment $ENVIRONMENT Środowisko, w którym działa aplikacja kontenera.
image $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" Obraz kontenera do wdrożenia, w tym nazwa rejestru i tag.
target-port 8080 Pasuje do portu, na który aplikacja nasłuchuje żądań.
ingress external Sprawia, że aplikacja kontenera jest dostępna z publicznego Internetu.
user-assigned $IDENTITY_ID Tożsamość zarządzana przypisana przez użytkownika dla aplikacji kontenera.
registry-identity registry-identity Tożsamość używana do uzyskiwania dostępu do rejestru kontenerów.
registry-server $REGISTRY_NAME.azurecr.io Adres serwera rejestru kontenerów.
query properties.configuration.ingress.fqdn Filtruje dane wyjściowe tylko do w pełni kwalifikowanej nazwy domeny (FQDN) aplikacji.

Po zakończeniu tego polecenia zwraca on adres URL nowej aplikacji internetowej.

Weryfikowanie wdrożenia

Skopiuj adres URL aplikacji do przeglądarki internetowej. Po uruchomieniu aplikacji kontenera zwraca wartość Hello World!.

Ponieważ jest to pierwszy raz, gdy aplikacja jest uzyskiwana, może upłynąć kilka chwil, aby aplikacja zwróciła odpowiedź.

Czyszczenie zasobów

Jeśli nie zamierzasz używać zasobów platformy Azure utworzonych w tym samouczku, możesz je usunąć za pomocą jednego polecenia. Przed uruchomieniem polecenia w tej serii samouczków zostanie wyświetlony kolejny krok pokazujący, jak wprowadzić zmiany w kodzie i zaktualizować aplikację na platformie Azure.

Jeśli wszystko będzie gotowe i chcesz usunąć wszystkie zasoby platformy Azure utworzone w tym samouczku, usuń grupę zasobów przy użyciu następującego polecenia.

az group delete --name aca-demo

Napiwek

Masz problemy? Poinformuj nas o usłudze GitHub, otwierając problem w repozytorium usługi Azure Container Apps.

Następne kroki

Następnie przejdź dalej, aby dowiedzieć się, jak zaktualizować utworzoną aplikację kontenera.