연습 - 오케스트레이션을 위한 Docker Compose 파일 만들기

완료됨

Contoso 아웃도어 장비 회사에는 함께 그룹화하여 단일 단위로 빌드 및 배포하려는 두 가지 서비스가 있습니다. 회사는 Docker Compose를 사용하여 여러 서비스를 함께 빌드하기로 결정합니다.

이 연습에서는 Docker Compose YAML 파일을 만듭니다. 그런 다음, Docker Compose 유틸리티를 사용하여 Docker 컨테이너 이미지를 빌드하고 실행합니다.

codespace에 연결

이전 연습에서 사용한 코드스페이스에서 연결을 끊은 경우 지금 다시 연결합니다.

  1. 브라우저를 열고 eShopLite 리포지토리로 이동합니다.
  2. 코드를 선택한 다음, Codespaces 탭을 선택합니다.
  3. 이전 연습에서 만든 codespace를 선택합니다. GitHub가 codespace를 엽니다.
  4. /dotnet-docker 디렉터리로 이동합니다.

Docker Compose 파일 만들기

docker-compose 파일을 사용하여 백 엔드 및 프런트 엔드 서비스 모두에 대한 이미지를 구성합니다.

  1. 코드스페이스의 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"
    

    이 코드는 여러 가지 작업을 수행합니다.

    • 프런트 엔드 웹 사이트를 만들고 이름을 frontend로 지정합니다.
    • 코드는 웹 사이트의 환경 변수 ProductEndpoint=http://backend:8080을(를) 설정합니다. 이 코드는 프런트 엔드 서비스가 Products 백 엔드 서비스를 찾는 방법입니다.
    • 코드는 포트를 열고 백 엔드 서비스에 따라 달라지도록 선언합니다.
    • 다음에는 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. 프런트 엔드 웹 사이트와 백 엔드 웹 API를 모두 시작하려면 다음 명령을 실행합니다.

    docker compose up
    
  3. 일부 출력이 표시된 다음, 웹 사이트와 웹 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.