演習 - オーケストレーション用の Docker Compose ファイルを作成する

完了

Contoso アウトドア用品会社には 2 つのサービスがあり、会社はそれを 1 つのユニットとしてグループ化してビルドおよびデプロイしようと考えています。 会社は、サービスをまとめてビルドするために 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 フォルダー (README.md と同じフォルダー) で、./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"
    

    このコードでは、次のいくつかの処理が実行されます。

    • これによって、フロントエンド Web サイトが作成され、それに frontend という名前が付きます。
    • このコードは、Web サイト用の環境変数 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 コンテナー サポートのコンテナー イメージをビルドするには、[ターミナル] タブを選択し、次のコマンドを実行します。

    dotnet publish /p:PublishProfile=DefaultContainer
    
  2. 次に、フロントエンド Web サイトとバックエンド Web API の両方を開始するには、次のコマンドを実行します。

    docker compose up
    
  3. いくつかの出力が表示された後、Web サイトと 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
    

    A screenshot of the codespace ports tab.

  4. フロントエンド サービスをテストするには、[ポート] タブを選択します。次に、[フロント エンド] ポートのローカル アドレスの右側にある地球アイコンを選択します。 ブラウザーにホーム ページが表示されます。

  5. [製品] を選択します。 カタログには Contoso の商品が示されます。

    A screenshot of the eSHopLite webshop products.