练习 - 为业务流程创建 Docker Compose 文件

已完成

Contoso 户外设备公司有两个服务,他们希望将这些服务组合在一起,作为一个单元进行生成和部署。 公司决定使用 Docker Compose 同时构建这些服务。

在此练习中,你创建一个 Docker Compose YAML 文件。 然后,你使用 Docker Compose 实用工具生成 Docker 容器映像并运行它们。

连接到 codespace

如果已断开与上一练习中使用的 codespace 的连接,现在请重新连接:

  1. 打开浏览器并转到 eShopLite 存储库
  2. 选择“代码”,然后选择“Codespaces”选项卡。
  3. 选择上一练习中创建的 codespace。 此时 GitHub 打开 codespace。
  4. 转到 /dotnet-docker 目录。

创建 Docker Compose 文件

使用 docker-composee 文件为后端和前端服务配置映像:

  1. 在 codespace 的 dotnet-docker 文件夹中,打开名为 ./dotnet-docker/docker-compose.yml 的文件。 此文件为空。

  2. 将以下代码添加到 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"
    

    此代码执行几项操作:

    • 它创建前端网站并将其命名为 frontend
    • 代码会为网站设置环境变量:ProductEndpoint=http://backend:8080。 该代码是前端服务查找产品后端服务的方式。
    • 该代码会打开一个端口,并声明它依赖于后端服务。
    • 接下来会创建名为“backend”的后端服务。
    • 最后一个命令指定要打开的端口。
  3. 相比之下,如果你有 dockerfile,则需要使用 docker-compose.yml 文件:

    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"
    

    代码几乎完全相同。 唯一的区别在于,你需要生成阶段指向每个 dockerfile

生成映像并运行容器

现在,使用 Docker Compose 生成并同时启动前端和后端组件。

  1. 要使用 .NET 容器支持生成容器映像,请选择“终端”选项卡,然后运行以下命令。 请注意,如果应用仍在运行,请先按 CTRL+C 将其关闭。

    dotnet publish /p:PublishProfile=DefaultContainer
    
  2. 若要同时启动前端网站和后端 Web API,请运行以下命令:

    docker compose up
    
  3. 此时会显示一些输出,然后运行网站和 Web API。 此时应会看到如下例所示的输出:

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

    Codespace 端口选项卡的屏幕截图。

  4. 若要测试前端服务,请选择“端口”选项卡。然后在“前端”端口的本地地址右侧,选择地球图标。 随即浏览器显示主页。

  5. 选择“产品”。 该目录显示 Contoso 的商品。

    eSHopLite 网上商店产品的屏幕截图。