X
    Categories: blog

Pubblicare un’applicazione java su Azure Web App per container

In questo articolo verrà approfondita una delle modalità di rilascio che Azure offre per le java application. Verranno quindi tralasciate le pratiche di CI/CD ed eventuali integrazioni con Container Clusters (ad esempio Kubernetes).

Prerequisiti:

  • War eseguibile dell’applicazione
  • Docker client
  • Un account azure
  • Azure CLI ( facoltativa – è possibile eseguire gli stessi comandi dalla Azure Cloud Shell)

Creazione dell’Azure Container Registry (ACR)

Questo servizio ospiterà le immagini docker della nostra applicazione. Possiamo vederlo come un’alternativa privata al Docker Hub.

  1. az login
  2. az group create --name=myappgroup --location=westeurope
  3. az acr create --admin-enabled --resource-group myappgroup --location westeurope --name myappsregistry --sku Basic
  4. az acr credential show --name myappsregistry --query passwords[0]

NB: –admin-enabled creerà automaticamente un account di admin per l’accesso al registro dove:

  • username: <acr name> (nel nostro caso myappsregistry)
  • password: ottenuta col comando 4

Creazione dell’immagine Docker

Per il rilascio dell’immagine docker occorre posizionarsi di fianco al war precedentemente buildato.

Nel caso si utilizzi Maven basterà entrare nella cartella target.

Premessa sul Dockerfile: nel mondo reale è consigliabile versionarlo e fare in modo che sia copiato automaticamente di fianco al war file (o in una cartella di vostro gradimento) tramite gli strumenti di build (es: Maven o Gradle).

Per mantenere semplice il nostro esempio creiamo “al volo” un semplice file contenente le istruzioni per eseguire la nostra app:

==Dockerfile=================================================
FROM openjdk:8-jre-alpine
ENV  JAVA_OPTS=""
CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.war
EXPOSE 8080
ADD *.war /app.war
============================================================

Analisi del docker file:

  • FROM: Partiamo da un immagine in grado di lanciare applicazioni java.
  • ENV: eventuali variabili di ambiente
  • CMD: il comando da lanciare all’avvio del container
  • EXPOSE: su quale porta esporre il servizio
  • ADD: aggiungo il mio war all’immagine

Pubblicazione dell’immagine Docker

Ora è possibile aprire la console di sistema e digitare le seguenti istruzioni:

  1. docker build -t $REGISTRY_URL/$IMAGE_NAME .
  2. docker login -u $REGISTRY_USER -p $REGISTRY_PASSWD $REGISTRY_URL
  3. docker push $REGISTRY_URL/$IMAGE_NAME

Dove le variabili assumono i seguenti valori:

REGISTRY_URL: indirizzo dell’azure container (in genere <myappsregistry>.azurecr.io)
REGISTRY_USER e REGISTRY_PASSWD: sono le credenziali autogenerate da –admin-enabled
IMAGE_NAME: è il nome che vogliamo dare all’immagine docker della nostra app

A questo punto se tutto è andato bene è possibile visionare la presenza dell’immagine già  dai repository nella dashboard di Azure ACR.

Creazione web app per container

L’ultimo passo consiste nell’esporre questa immagine docker in un container sul servizio di Azure WebApp per container.

  1. Creazione dell’App Service Plan dalla azure shell az appservice plan create -n myappplan -g myappgroup --is-linux --location=westeurope --sku S1
  2. Successivamente procederemo dalla GUI: Marketplace > WebApp For Containers > Create
  3. Compiliamo ogni campo con le risorse precedentemente create

A questo punto è già possibile visualizzare i log in “Container Settings”. In quel pannello è inoltre possibile abilitare il “Continuous Deployment”. Abilitandolo Azure creerà un Web Hook sul registro docker che ospita la vostra immagine. Ogni volta che verrà pushata un immagine, azure effettuerà l’aggiornamento a caldo sulle web app.

Dai log è possibile visionare tutto il processo di startup dell’applicazione. Una volta terminato l’app sarà già disponibile su <appname>.azurewebsites.net.

Configurazione webapp

E’ molto probabile che il container, per il corretto funzionamento,  abbia bisogno di alcuni parametri di configurazione.

In tal caso ci basterà andare nel pannello “Application Settings” della web app ed aggiungere tutte quelle di cui abbiamo bisogno.

Azure provvederà a passarle al container durante il comando di start come se fossero variabili di ambiente. Ad esempio:

docker run -e SPRING_DATASOURCE_URL=<my-super-secret> my-registry/my-image

Con questo passo termina questo articolo di come rilasciare un’applicazione dockerizata sul cloud di Microsoft Azure.

Prossimamente vedremo come inserire questi concetti in un caso reale di CI/CD tramite GitLab CI/CD.

Alessandro Neri: Lavoro come Software Engineer in Maggioli dal 2012. Durante il mio percorso ho contribuito a progetti come SCACCo, Revisal ed il Consolidato enti. Fuori dal lavoro un amante di giochi MMORPG e grande appassionato di serie tv.
Related Post