연습 - 오케스트레이션을 위한 Docker Compose 파일 만들기
Contoso 아웃도어 장비 회사에는 함께 그룹화하여 단일 단위로 빌드 및 배포하려는 두 가지 서비스가 있습니다. 회사는 Docker Compose를 사용하여 여러 서비스를 함께 빌드하기로 결정합니다.
이 연습에서는 Docker Compose YAML 파일을 만듭니다. 그런 다음, Docker Compose 유틸리티를 사용하여 Docker 컨테이너 이미지를 빌드하고 실행합니다.
codespace에 연결
이전 연습에서 사용한 코드스페이스에서 연결을 끊은 경우 지금 다시 연결합니다.
- 브라우저를 열고 eShopLite 리포지토리로 이동합니다.
- 코드를 선택한 다음, Codespaces 탭을 선택합니다.
- 이전 연습에서 만든 codespace를 선택합니다. GitHub가 codespace를 엽니다.
- /dotnet-docker 디렉터리로 이동합니다.
Docker Compose 파일 만들기
docker-compose 파일을 사용하여 백 엔드 및 프런트 엔드 서비스 모두에 대한 이미지를 구성합니다.
코드스페이스의 dotnet-docker 폴더에서 ./dotnet-docker/docker-compose.yml 파일을 엽니다. 이 파일은 비어 있습니다.
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라는 백 엔드 서비스가 만들어집니다.
- 마지막 명령은 열 포트를 지정합니다.
이에 비해 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를 사용하여 프런트 엔드와 백 엔드 모두의 구성 요소를 빌드하고 시작합니다.
.NET 컨테이너 지원을 사용하여 컨테이너 이미지를 빌드하려면 터미널 탭을 선택한 다음, 다음 명령을 실행합니다. 앱이 계속 실행 중인 경우 먼저 CTRL+C로 닫습니다.
dotnet publish /p:PublishProfile=DefaultContainer
프런트 엔드 웹 사이트와 백 엔드 웹 API를 모두 시작하려면 다음 명령을 실행합니다.
docker compose up
일부 출력이 표시된 다음, 웹 사이트와 웹 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
프런트 엔드 서비스를 테스트하려면 포트 탭을 선택합니다. 그런 다음 프런트 엔드 포트의 로컬 주소 오른쪽에서 지구본 아이콘을 선택합니다. 브라우저에 홈페이지가 표시됩니다.
제품을 선택합니다. 카탈로그에는 Contoso의 상품이 표시됩니다.