Esercizio: creare un file Docker Compose per l'orchestrazione

Completato

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:

  1. Aprire un browser e passare al repository eShopLite.
  2. Selezionare Codice, quindi la scheda Spazi di codice.
  3. Selezionare lo spazio di codice creato nell'esercizio precedente. GitHub apre lo spazio di codice.
  4. 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:

  1. Nella cartella dotnet-docker del codespace, aprire il file denominato ./dotnet-docker/docker-compose.yml. Il file è vuoto.

  2. 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.
  3. 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.

  1. 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
    
  2. Per avviare sia il sito Web front-end che l'API Web back-end, eseguire questo comando:

    docker compose up
    
  3. 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
    

    Screenshot della scheda Porte del codespace.

  4. 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.

  5. Seleziona i prodotti. Il catalogo mostra la merce di Contoso.

    Screenshot dei prodotti del punto vendita Web eSHopLite.