Ejercicio: Creación de un archivo de Docker Compose para la orquestación

Completado

La empresa de equipamiento para exteriores Contoso tiene dos servicios que les gustaría agrupar para compilarlos e implementarlos como una sola unidad. La empresa ha decidido usar Docker Compose para compilar los servicios en un solo lugar.

En este ejercicio, creará un archivo YAML de Docker Compose. Después, usará la utilidad Docker Compose para compilar las imágenes de contenedor de Docker y ejecutarlas.

Conexión al codespace

Si se ha desconectado del codespace que usó en el ejercicio anterior, vuelva a conectarse ahora:

  1. Abra un explorador y vaya al repositorio eShopLite.
  2. Seleccione Código y, después, la pestaña Codespaces.
  3. Seleccione el codespace que ha creado en el ejercicio anterior. GitHub abre el codespace.
  4. Vaya al directorio /dotnet-docker.

Creación del archivo de Docker Compose

Use el archivo docker-compose para configurar imágenes para los servicios back-end y front-end:

  1. En la carpeta dotnet-docker del codespace (la misma carpeta con README.md), abra el archivo ./dotnet-docker/docker-compose.yml. Este archivo está vacío.

  2. Agregue el código siguiente al archivo 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"
    

    Este código realiza varias acciones:

    • Crea el sitio web front-end y lo denomina front-end.
    • Después, el código establece una variable de entorno para el sitio web: ProductEndpoint=http://backend:8080. Este código es la forma que tiene el servicio de front-end de buscar el servicio de back-end Products.
    • El código abre un puerto y declara que depende del servicio de back-end.
    • El servicio back-end denominado back-end se crea a continuación.
    • El último comando especifica el puerto que se va a abrir.
  3. En comparación, el archivo docker-compose.yml que tendría que usar si tuviera dockerfiles:

    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"
    

    el código es casi idéntico. La única diferencia es la necesidad de tener las fases de compilación que apuntan a cada dockerfile.

Compilación de las imágenes y ejecución de los contenedores

Ahora, use Docker Compose para compilar e iniciar los componentes de front-end y back-end.

  1. Para compilar las imágenes de contenedor compatibles con los contenedores de .NET, seleccione la pestaña Terminal y, luego, ejecute el siguiente comando:

    dotnet publish /p:PublishProfile=DefaultContainer
    
  2. Después, para iniciar el sitio web de front-end y la API web de back-end, ejecute este comando:

    docker compose up
    
  3. Aparece algún resultado y, después, se ejecuta el sitio web y la API web. Debería mostrarse una salida similar a este ejemplo:

    [+] 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
    

    A screenshot of the codespace ports tab.

  4. Para probar el servicio front-end, seleccione la pestaña Puertos. Después, a la derecha de la dirección local del puerto Front-end, seleccione el icono del globo. El explorador muestra la página principal.

  5. Seleccione Productos. El catálogo muestra la mercancía de Contoso.

    A screenshot of the eSHopLite webshop products.