Distribuera ett program med en anpassad containeravbildning
Varning
Den här artikeln refererar till CentOS, en Linux-distribution som har statusen End Of Life (EOL). Överväg att använda och planera i enlighet med detta. Mer information finns i CentOS End Of Life-vägledningen.
Kommentar
Basic-, Standard- och Enterprise-planerna kommer att vara inaktuella från och med mitten av mars 2025, med en 3-årig pensionsperiod. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i meddelandet om azure Spring Apps-pensionering.
Standardförbrukningen och den dedikerade planen kommer att vara inaktuell från och med den 30 september 2024, med en fullständig avstängning efter sex månader. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i Migrera Azure Spring Apps Standard-förbrukning och dedikerad plan till Azure Container Apps.
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.
Förutsättningar
- En containeravbildning som innehåller programmet.
- Avbildningen skickas till ett avbildningsregister. Mer information finns i Azure Container Registry.
Kommentar
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.
Distribuera appen
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.
Funktion | Spring Boot Apps – containerdistribution | Polyglot Apps – containerdistribution | Kommentar |
---|---|---|---|
Applivscykelhantering | ✔️ | ✔️ | |
Stöd för containerregister | ✔️ | ✔️ | |
Tilldela slutpunkt | ✔️ | ✔️ | |
Azure Monitor | ✔️ | ✔️ | |
APM-integrering | ✔️ | ✔️ | Stöds av manuell installation. |
Blå/grön distribution | ✔️ | ✔️ | |
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 företagsplan. |
Spring Cloud Gateway för VMware Tanzu | ✔️ | ✔️ | Endast företagsplan. |
Programkonfigurationstjänst för VMware Tanzu | ✔️ | ❌ | Endast företagsplan. |
Programmets livevy för VMware Tanzu | ✔️ | ❌ | Endast företagsplan. |
VMware Tanzu Service Registry | ✔️ | ❌ | Endast 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 | ✔️ | ✔️ |
Kommentar
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 hantera vanliga situationer när du distribuerar med en anpassad 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 anger du 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å system-CA-arkivet, på Debian- eller Ubuntu-avbildningar lägger du 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, på CentOS- eller Fedora-baserade avbildningar lägger du till följande miljövariabler:
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.
Kommentar
Undvik att använda taggen latest
eller skriv över avbildningen utan en taggändring för att undvika oväntat programbeteende.
Undvik att kunna ansluta till containerregistret i ett virtuellt nätverk
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). Mer information finns i Kundens ansvar för att köra i VNet för att lägga till nödvändiga säkerhetsregler.
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:
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
Lägg till de miljövariabler som krävs av APM:
ENV NEW_RELIC_APP_NAME=appName ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
Ä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:
- Python: Installera Python-agenten
- Node.js: Installera Node.js-agenten
Dynatrace:
- Python: Instrumentera Python-program med OpenTelemetry
- Node.js: Instrument Node.js-program med OpenTelemetry
AppDynamics:
- Python: Installera Python-agenten
- Node.js: Installera Node.js-agenten
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"
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
Automatisera distributioner med hjälp av Azure Pipelines-uppgifter eller GitHub Actions stöds nu. Mer information finns i Automatisera programdistributioner till Azure Spring Apps och Använda Azure Spring Apps CI/CD med GitHub Actions