練習 - 建立協調流程的 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-compose 檔案為後端和前端服務設定映像:

  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. 相較之下,如果您有 dockerfiles,則需要使用 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 網路商店產品的螢幕擷取畫面。