Distribuera ett Quarkus-program till Azure Container Apps

Slutförd

I den här lektionen skapar du Azure Container Apps-miljön med hjälp av Azure CLI.

Konfigurera Dockerfile för Quarkus-programmet

Container Apps används för att distribuera containerbaserade program. Så du måste först containerisera Quarkus-programmet till en Docker-avbildning. Den här processen är enkel eftersom Quarkus Maven-plugin-programmet redan har genererat vissa Dockerfiles under src/main/docker.

Använd det här kommandot för att byta namn på en av dessa Dockerfiler, Dockerfile.jvm, till Dockerfile och flytta den till rotmappen.

mv src/main/docker/Dockerfile.jvm ./Dockerfile

Ersätt innehållet efter den långa kommentaren i Dockerfile med följande:

FROM registry.access.redhat.com/ubi8/openjdk-17:1.18

ENV LANGUAGE='en_US:en'


# We make four distinct layers so if there are application changes the library layers can be re-used
COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=185 target/quarkus-app/*.jar /deployments/
COPY --chown=185 target/quarkus-app/app/ /deployments/app/
COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/

EXPOSE 8080
USER 185
ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"

ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]

Den här Dockerfile förväntar sig att Quarkus-programmet paketeras som en quarkus-run.jar fil. Det här namnet är standardnamnet för Quarkus-programmet när det paketeras som en JAR-fil. Du måste se till att Quarkus-programmet är paketerat som en JAR-fil. Det gör du genom att köra följande Maven-kommando:

./mvnw package    # On Mac or Linux
mvnw.cmd package  # On Windows

Det här kommandot paketera Quarkus-programmet i en JAR-fil och genererar en quarkus-run.jar fil i mappen target/quarkus-app.

Skapa Container Apps-miljön och distribuera containern

Nu när Dockerfile är på rätt plats kan du skapa Container Apps-miljön och distribuera containern med hjälp av ett enda Azure CLI-kommando. Kör följande kommando i projektets rot:

az containerapp up \
    --name "$AZ_CONTAINERAPP" \
    --environment "$AZ_CONTAINERAPP_ENV" \
    --location "$AZ_LOCATION" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --ingress external \
    --target-port 8080 \
    --source .

Det här kommandot gör flera saker:

  • Skapar en Container Apps-miljö om den inte finns
  • Skapar ett Azure-register om det inte finns
  • Skapar en Log Analytics-arbetsyta om den inte finns
  • Skapar Docker-avbildningen och push-överför den till Azure-registret
  • Distribuerar Docker-avbildningen till Container Apps-miljön

Kommandot az containerapp up tar lite tid att köra. Du bör se utdata som liknar följande:

Using resource group 'rgazure-deploy-quarkus'
Creating ContainerAppEnvironment 'caeazure-deploy-quarkus' in resource group rgazure-deploy-quarkus
No Log Analytics workspace provided.
Generating a Log Analytics workspace with name "workspace-rgazuredeployquarkusEED7"
Creating Azure Container Registry ca001ad52ae7acr in resource group rgazure-deploy-quarkus

Run ID: ca3 was successful after 41s
Creating Containerapp caazure-deploy-quarkus in resource group rgazure-deploy-quarkus
Adding registry password as a secret with name "ca001ad52ae7acrazurecrio-ca001nxc57acr"

Your container app caazure-deploy-quarkus has been created and deployed! Congrats! 

Verifiera implementeringen

Du kan kontrollera att distributionen har lyckats på flera sätt. Det enklaste sättet är att söka efter resursgruppen på Azure-portalen. Du bör se resurser som liknar följande:

Skärmbild som visar det distribuerade programmet.

Du kan också kontrollera distributionen genom att köra följande kommando. Den visar alla resurser som skapats av kommandot az containerapp up.

az resource list \
    --location "$AZ_LOCATION" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --output table

Du bör se utdata som liknar följande:

Name                                ResourceGroup           Location    Type                                       Status
----------------------------------  ----------------------  ----------  -----------------------------------------  --------
caea3a6e0afeacr                     rgazure-deploy-quarkus  eastus      Microsoft.ContainerRegistry/registries
psqlazure-deploy-quarkus            rgazure-deploy-quarkus  eastus      Microsoft.DBforPostgreSQL/flexibleServers
caazure-deploy-quarkus              rgazure-deploy-quarkus  eastus      Microsoft.App/containerApps
caeazure-deploy-quarkus             rgazure-deploy-quarkus  eastus      Microsoft.App/managedEnvironments
workspace-rgazuredeployquarkuscDD3  rgazure-deploy-quarkus  eastus      Microsoft.OperationalInsights/workspaces

Kör det distribuerade Quarkus-programmet

Nu kan du köra det distribuerade Quarkus-programmet. Först måste du hämta programmets URL. Du kan hämta den genom att köra följande kommando:

export AZ_APP_URL=$(
    az containerapp show \
        --name "$AZ_CONTAINERAPP" \
        --resource-group "$AZ_RESOURCE_GROUP" \
        --query "properties.configuration.ingress.fqdn" \
        --output tsv \
)

echo "AZ_APP_URL=$AZ_APP_URL"

Din applikation är klar vid https://<app-name>.azurecontainerapps.io/. Observera protokollet https. Det protokollet används eftersom programmet distribueras med ett TLS-certifikat. Om du vill testa programmet kan du använda cURL:

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"Configuration","details":"Congratulations, you have set up your Quarkus application correctly!","done": "true"}' \
    https://$AZ_APP_URL/api/todos

Hämta data med hjälp av en ny cURL-begäran:

curl https://$AZ_APP_URL/api/todos

Det här kommandot returnerar listan över alla to-do objekt från databasen:

[
   {
      "description" : "Take Quarkus MS Learn",
      "details" : "Take the MS Learn on deploying Quarkus to Azure Container Apps",
      "done" : true,
      "id" : 1
   },
   {
      "description" : "Take Azure Container MS Learn",
      "details" : "Take the ACA Learn module",
      "done" : false,
      "id" : 2
   },
   {
      "description" : "Configuration",
      "details" : "Congratulations, you have set up your Quarkus application correctly!",
      "done" : true,
      "id" : 3
   }
]

Om du kör det här kommandot kan du strömma loggarna för containern när du skapar nya att göra:ar:

az containerapp logs show \
    --name "$AZ_CONTAINERAPP" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --follow

Kör fler cURL-kommandon. Du bör se loggarna rulla i terminalen.

curl https://$AZ_APP_URL/api/todos

Not

Du kan också öppna URL:en i en webbläsare för att returnera listan över to-do objekt.