[Microservizi con Spring Boot] Prepariamo l’ambiente di test con Docker Compose

Facciamo un piccolo riepilogo delle puntate precedenti:

Ora vediamo come automatizzare la procedura di installazione dell’intera infrastruttura, decisamente utile anche in fase di sviluppo per non dover avviare manualmente tutti i servizi.

Ci serviremo di Docker e di Docker Compose che dovranno essere installati sulla nostra macchina.

In particolare le immagini di tutti i componenti citati sono disponibili su Docker Hub e saranno scaricate da questo registry nello script di esempio.

Ricordiamo che Docker Compose ci consente di eseguire può container specificando le immagini da utilizzare, le porte da esporre, i volumi da usare per lo storage oltre a creare delle network ad hoc per far dialogare gli stessi container.

Il tutto scrivendo un semplicissimo file YAML opportunamente strutturato.

Schermata da 2020-05-19 18-52-07

Vediamo i vari passi da seguire:

  • specifichiamo la versione da utilizzare
  • quindi aggiungiamo la sezione services che corrisponde all’insieme dei vari container che intendiamo avviare
  • per ciascun service indichiamo
    • l’identificativo (nel nostro caso eureka-server, microservice e zuul-gateway)
    • il nome da dare al container (opzionale)
    • l’immagine Docker da utilizzare
    • le porte da esporre mappandole con le corrispondenti del container
    • la network a cui collegare i container per fare in modo che possano comunicare tra di loro

Accanto a questa configurazione di base sono necessarie delle ulteriori impostazioni e qualche precisazione.

All’avvio viene comunque creata una network “default” a cui vengono agganciati i container, per i quali non sia stata specificata nessun’altra rete.

E’ buona norma creare delle network specifiche per garantire un buon livello di isolamento, garantendo la comunicazione solo tra i container che ne hanno effettiva necessità.

Un altro aspetto riguarda l’ordine di avvio dei container: ad esempio nel nostro caso abbiamo bisogno che Eureka sia in esecuzione prima degli altri container affinchè questi possano registrarsi correttamente.

Questo si ottiene aggiungendo alla configurazione

depends_on

seguito dalle dipendenze ovvero dai nomi dei servizi che hanno la precedenza.

Da ultimo effettuiamo due modifiche in corrispondenza di microservice e zuul-gateway per consentire la corretta registrazione con Eureka.

Andiamo ad effettuare l’overriding delle due proprietà presenti nei file application.properties

environment:
- eureka.client.serviceUrl.defaultZone=http://eureka-server:8761/eureka/
- eureka.instance.preferIpAddress=true

In sostanza sostituiamo “localhost” con il nome attribuito al servizio Eureka.

Inoltre facciamo in modo che i microservizi si registrino utilizzando il proprio indirizzo ip e non l’hostname per evitare possibili problemi di risoluzione, soprattutto in fase di sviluppo quando generalmente non proprio tutto è configurato a puntino rispetto all’ambiente di produzione.

Per avviare il tutto basta eseguire all’interno della cartella contenente il file YAML il comando

docker-compose up -d

Apriamo il browser all’indirizzo http://localhost:8085/api/demo/hello e vedremo il messaggio di saluto del nostro microservizio.

Ricordiamo che alla porta 8085 risponde il gateway Zuul attraverso il quale comunichiamo in modo del tutto trasparente con il microservizio.

Per arrestare tutti i servizi basta eseguire

docker-compose down

Come sempre il codice è disponibile su GitHub.

 

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

Utilizzando il sito, accetti l'invio dei cookies da parte nostra. Maggiori informazioni

Questo sito utilizza i cookies per fornire la migliore esperienza di navigazione possibile. Continuando ad utilizzarlo senza modificare le impostazioni o cliccando su "Accetta" acconsenti al loro utilizzo.

Chiudi