Distribuera ett program med en anpassad containeravbildning

Caution

Den här artikeln refererar till CentOS, en Linux-distribution som har statusen End Of Life (EOL). Vänligen överväg ditt användande och planera därefter. Mer information finns i CentOS End Of Life-vägledningen.

Note

Planerna Basic, Standardoch Enterprise gick in i en pensionsperiod den 17 mars 2025. Mer information finns i meddelandet om azure Spring Apps-pensionering.

Den här artikeln gäller för:✅ Standard ✅ Enterprise

Den här artikeln beskriver hur du distribuerar Spring Boot-program i Azure Spring Apps med hjälp av en anpassad containeravbildning. Distribution av ett program med en anpassad container stöder de flesta funktioner som när du distribuerar ett JAR-program. Andra Java- och icke-Java-program kan också distribueras med containeravbildningen.

Prerequisites

  • En containeravbildning som innehåller programmet.
  • Avbildningen skickas till ett avbildningsregister. Mer information finns i Azure Container Registry.

Note

Webbprogrammet måste lyssna på porten 1025 för Standard-planen och på porten 8080 för Enterprise-planen. Hur du ändrar porten beror på programmets ramverk. Ange till exempel SERVER_PORT=1025 för Spring Boot-program eller ASPNETCORE_URLS=http://+:1025/ för ASP.NET Core-program. Du kan inaktivera avsökningen för program som inte lyssnar på någon port. Mer information finns i Konfigurera hälsoavsökningar och graciösa avslutningsperioder för appar som finns i Azure Spring Apps.

Driftsätt din applikation

Använd följande steg för att distribuera ett program till en anpassad containeravbildning:

Om du vill distribuera en containeravbildning använder du något av följande kommandon:

  • Om du vill distribuera en containeravbildning till den offentliga Docker Hub till en app använder du följande kommando:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
    
  • Om du vill distribuera en containeravbildning från ACR till en app eller från ett annat privat register till en app använder du följande kommando:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
       --container-registry <your-container-registry> \
       --registry-password <your-password> |
       --registry-username <your-username>
    

Om du vill skriva över startpunkten för avbildningen lägger du till följande två argument i något av ovanstående kommandon:

    --container-command "java" \
    --container-args "-jar /app.jar -Dkey=value"

Om du vill inaktivera lyssning på en port för avbildningar som inte är webbprogram lägger du till följande argument i kommandona ovan:

    --disable-probe true

Matris för funktionsstöd

Följande matris visar vilka funktioner som stöds i varje programtyp.

Feature Spring Boot-applikationer – distribution i containrar Polyglot Apps – containerimplementering Notes
Applivscykelhantering
Stöd för containerregister
Tilldela slutpunkt
Azure Monitor
APM-integrering Stöds av manuell installation.
Blå/grön utplaceringsstrategi
Anpassad domän
Skalning – automatisk skalning
Skalning – manuell skalning (in/ut, upp/ned)
Hanterad identitet
Spring Cloud Eureka & Config Server
API-portalen för VMware Tanzu Endast tillgängligt med företagsplan.
Spring Cloud Gateway för VMware Tanzu Endast företagsplan.
Programkonfigurationstjänst för VMware Tanzu Gäller endast företagsplan.
Applikationens livevy för VMware Tanzu Endast företagsplan.
VMware Tanzu Service Registry Endast tillgänglig för företagsplan.
VNET Lägg till registret i listan över tillåtna i NSG eller Azure Firewall.
Utgående IP-adress
E2E TLS Lita på en självsignerad CA.
Inställningar för livskraft och beredskap
Avancerad felsökning – tråd/heap/JFR-dump Bilden måste innehålla Bash och JDK med PATH angivet.
Ta med din egen lagring
Integrera tjänstbindning med Resource Connector
Tillgänglighetszon
Händelser i appens livscykel
Minskad appstorlek – 0,5 vCPU och 512 MB
Automatisera appdistributioner med Terraform
Mjuk borttagning
Interaktiv diagnostikupplevelse (AppLens-baserad)
SLA

Note

Polyglot-appar inkluderar Java-appar som inte är Spring Boot Java, NodeJS, AngularJS, Python och .NET.

Vanliga punkter att vara medveten om när du distribuerar med en anpassad container

Följande punkter hjälper dig att lösa vanliga situationer du stöter på när du distribuerar med en egendefinierad avbildning.

Lita på en certifikatutfärdare

Det finns två alternativ för att lita på en certifikatutfärdare:

Alternativ 1: Ladda upp via Azure Spring Apps

Information om hur du läser in CA-certifikaten i dina appar finns i Använda TLS/SSL-certifikat i ditt program i Azure Spring Apps. Sedan monteras certifikaten på platsen /etc/azure-spring-cloud/certs/public/.

Alternativ 2: Manuell installation i avbildningen

Om du vill lita på en CA i avbildningen ställer du in följande variabler beroende på din Miljö:

  • Du måste importera Java-program till förtroendearkivet genom att lägga till följande rader i Din Dockerfile:

    ADD EnterpriseRootCA.crt /opt/
    RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
    
  • Ange miljövariabeln NODE_EXTRA_CA_CERTS för Node.js program:

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • För Python eller andra språk som förlitar sig på systemets CA-lager, på Debian- eller Ubuntu-avbildningar, lägg till följande miljövariabler:

    ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
    RUN /usr/sbin/update-ca-certificates
    
  • För Python, eller andra språk som förlitar sig på system-CA-arkivet, lägg till följande miljövariabler i CentOS- eller Fedora-baserade avbildningar:

    ADD EnterpriseRootCA.crt /etc/pki/ca-trust/source/anchors/
    RUN /usr/bin/update-ca-trust
    

Undvik oväntat beteende när bilder ändras

När programmet startas om eller skalas ut hämtas alltid den senaste avbildningen. Om avbildningen har ändrats använder de nyligen startade programinstanserna den nya avbildningen medan de gamla instanserna fortsätter att använda den gamla avbildningen.

Note

Undvik att använda taggen latest eller skriv över avbildningen utan en taggändring för att undvika oväntat programbeteende.

Undvik att inte kunna ansluta till containerregistret i en VNet

Om du distribuerade instansen till ett virtuellt nätverk kontrollerar du att du tillåter nätverkstrafik till containerregistret i NSG eller Azure Firewall (om den används). För mer information, se Kundens ansvar för körning i VNet för att lägga till de nödvändiga säkerhetsreglerna.

Installera en APM i avbildningen manuellt

Installationsstegen varierar på olika programprestandaövervakare (API:er) och språk. Följande steg gäller för New Relic med Java-program. Du måste ändra Dockerfile med hjälp av följande steg:

  1. Ladda ned och installera agentfilen i avbildningen genom att lägga till följande i Dockerfile:

    ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
    
  2. Lägg till de miljövariabler som krävs av APM:

    ENV NEW_RELIC_APP_NAME=appName
    ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    
  3. Ändra startpunkten för bilden genom att lägga till: java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar

Om du vill installera agenterna för andra språk läser du den officiella dokumentationen för de andra agenterna:

Ny relik:

Dynatrace:

AppDynamics:

Visa containerloggarna

Om du vill visa konsolloggarna för ditt containerprogram kan du använda följande CLI-kommando:

az spring app logs \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --service <your-service-name> \
    --instance <your-instance-name>

Om du vill visa containerhändelseloggarna från Azure Monitor anger du frågan:

AppPlatformContainerEventLogs
| where App == "hw-20220317-1b"

Skärmbild av Azure Monitor som visar containerhändelseloggen.

Sök igenom avbildningen efter sårbarheter

Vi rekommenderar att du använder Microsoft Defender för molnet med ACR för att förhindra att dina bilder blir sårbara. Mer information finns i Microsoft Defender för molnet

Växla mellan JAR-distribution och containerdistribution

Du kan växla distributionstypen från JAR-distribution till containerdistribution direkt genom att distribuera om med hjälp av följande kommando:

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

Eller omvänt:

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --artifact-path <your-jar-file> \
    --service <your-service-name>

Skapa en annan distribution med en befintlig JAR-distribution

Du kan skapa en annan distribution med hjälp av en befintlig JAR-distribution med hjälp av följande kommando:

az spring app deployment create \
    --resource-group <your-resource-group> \
    --name <your-deployment-name> \
    --app <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

CI/CD

Nu stöds att automatisera distributioner genom Azure Pipelines-uppgifter eller GitHub Actions. Mer information finns i Automatisera programdistributioner till Azure Spring Apps och Använda Azure Spring Apps CI/CD med GitHub Actions

Nästa steg