Esercizio: creare un file Docker Compose per l'orchestrazione
L'azienda di apparecchiature all'aperto Contoso dispone di due servizi che vuole raggruppare per crearli e distribuirli come singola unità. L'azienda decide di usare Docker Compose per creare i servizi insieme.
In questo esercizio verrà creato un file YALM di Docker Compose. Quindi si userà l'utilità Docker Compose per creare le immagini del contenitore Docker ed eseguirle.
Connettersi allo spazio di codice
Se si è più connessi al codespace usato nell'esercizio precedente, riconnettersi ora:
- Aprire un browser e passare al repository eShopLite.
- Selezionare Codice, quindi la scheda Spazi di codice.
- Selezionare lo spazio di codice creato nell'esercizio precedente. GitHub apre lo spazio di codice.
- Passare alla directory /dotnet-docker.
Creare il file Docker Compose
Usare il file docker-compose per configurare le immagini per i servizi back-end e front-end:
Nella cartella dotnet-docker del codespace, aprire il file denominato ./dotnet-docker/docker-compose.yml. Il file è vuoto.
Aggiungere il codice seguente al file docker-compose.yml:
version: '3.4' services: frontend: image: store:latest environment: - ProductEndpoint=http://backend:8080 ports: - "32000:8080" depends_on: - backend backend: image: products:latest ports: - "32001:8080"
Il codice esegue diverse operazioni:
- Crea il sito Web front-end e gli assegna un nome front-end.
- Il codice imposta una variabile di ambiente per il sito Web:
ProductEndpoint=http://backend:8080
. Questo codice è il modo in cui il servizio front-end trova il servizio back-end Products. - Il codice apre una porta e dichiara che dipende dal servizio back-end.
- Il servizio back-end denominato back-end viene creato successivamente.
- L'ultimo comando specifica la porta da aprire.
Invece, è necessario usare il file docker-compose.yml se si dispone di dockerfile:
version: '3.4' services: frontend: image: storeimage build: context: . dockerfile: ./Store/Dockerfile environment: - ProductEndpoint=http://backend:8080 ports: - "32000:8080" depends_on: - backend backend: image: productservice build: context: . dockerfile: ./Products/Dockerfile ports: - "32001:8080"
Il codice è quasi identico. L'unica differenza è la necessità o meno di avere le fasi di compilazione che puntano a ogni dockerfile.
Compilare le immagini ed eseguire i contenitori
A questo punto, usare Docker Compose per compilare e avviare sia i componenti front-end che i componenti back-end.
Per compilare le immagini del contenitore supportate dal contenitore .NET, selezionare la scheda Terminale e quindi eseguire il comando seguente. Si noti che, se l'app è ancora in esecuzione, è necessario chiuderla prima con CTRL+C.
dotnet publish /p:PublishProfile=DefaultContainer
Per avviare sia il sito Web front-end che l'API Web back-end, eseguire questo comando:
docker compose up
Viene visualizzato un output e quindi il sito Web e l'API Web sono in esecuzione. L'output visualizzato sarà simile all'esempio seguente:
[+] Running 2/0 ✔ Container finished-files-backend-1 Created 0.0s ✔ Container finished-files-frontend-1 Created 0.0s Attaching to backend-1, frontend-1 ... backend-1 | info: Microsoft.Hosting.Lifetime[0] backend-1 | Hosting environment: Production backend-1 | info: Microsoft.Hosting.Lifetime[0] backend-1 | Content root path: /app
Per testare il servizio front-end, selezionare la scheda Porte. Quindi, a destra dell'indirizzo locale per la porta Front End, selezionare l'icona del globo. Il browser visualizza la home page.
Seleziona i prodotti. Il catalogo mostra la merce di Contoso.