자습서 - AKS(Azure Kubernetes Service) 애플리케이션 준비
7개 중 1단계인 이 자습서에서는 Kubernetes에서 사용할 수 있도록 다중 컨테이너 애플리케이션을 준비합니다. Docker Compose와 같은 기존 개발 도구를 사용하여 애플리케이션을 로컬로 빌드하고 테스트합니다. 다음 방법에 대해 설명합니다.
- GitHub에서 애플리케이션 예제 원본을 복제합니다.
- 애플리케이션 예제 원본으로 컨테이너 이미지 만들기
- 로컬 Docker 환경에서 다중 컨테이너 애플리케이션 테스트
완료되면 다음 애플리케이션이 로컬 개발 환경에서 실행됩니다.
이후 자습서에서는 컨테이너 이미지를 ACR(Azure Container Registry)에 업로드한 다음, AKS 클러스터에 배포합니다.
시작하기 전에
이 자습서에서는 컨테이너, 컨테이너 이미지 및 docker
명령과 같은 핵심 Docker 개념에 대한 기본적인 지식이 있다고 가정합니다. 컨테이너 기본 사항에 대한 입문서는 Docker 시작을 참조하세요.
이 자습서를 완료하려면 Linux 컨테이너를 실행하는 로컬 Docker 개발 환경이 필요합니다. Docker는 Mac, Windows 또는 Linux 시스템에서 Docker를 구성하는 패키지를 제공합니다.
참고 항목
Azure Cloud Shell에는 이러한 자습서의 모든 단계를 완료하는 데 필요한 Docker 구성 요소가 포함되어 있지 않습니다. 따라서 전체 Docker 개발 환경을 사용하는 것이 좋습니다.
애플리케이션 코드 가져오기
이 자습서에서 사용되는 애플리케이션 예제는 다음과 같은 Kubernetes 배포 및 서비스를 포함하는 기본 스토어 프런트 앱입니다.
- 스토어 프런트: 고객이 제품을 보고 주문을 할 수 있는 웹 애플리케이션입니다.
- 제품 서비스: 제품 정보를 표시합니다.
- 주문 서비스: 주문을 합니다.
- Rabbit MQ: 주문 큐에 대한 메시지 큐입니다.
git을 사용하여 애플리케이션 예제를 개발 환경에 복제합니다.
git clone https://github.com/Azure-Samples/aks-store-demo.git
복제된 디렉터리로 변경합니다.
cd aks-store-demo
Docker Compose 파일 검토
이 자습서에서 만든 애플리케이션 예제는 복제한 리포지토리의 docker-compose-quickstart YAML 파일을 사용합니다.
services:
rabbitmq:
image: rabbitmq:3.13.2-management-alpine
container_name: 'rabbitmq'
restart: always
environment:
- "RABBITMQ_DEFAULT_USER=username"
- "RABBITMQ_DEFAULT_PASS=password"
ports:
- 15672:15672
- 5672:5672
healthcheck:
test: ["CMD", "rabbitmqctl", "status"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- ./rabbitmq_enabled_plugins:/etc/rabbitmq/enabled_plugins
networks:
- backend_services
order-service:
build: src/order-service
container_name: 'order-service'
restart: always
ports:
- 3000:3000
healthcheck:
test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://order-service:3000/health"]
interval: 30s
timeout: 10s
retries: 5
environment:
- ORDER_QUEUE_HOSTNAME=rabbitmq
- ORDER_QUEUE_PORT=5672
- ORDER_QUEUE_USERNAME=username
- ORDER_QUEUE_PASSWORD=password
- ORDER_QUEUE_NAME=orders
- ORDER_QUEUE_RECONNECT_LIMIT=3
networks:
- backend_services
depends_on:
rabbitmq:
condition: service_healthy
product-service:
build: src/product-service
container_name: 'product-service'
restart: always
ports:
- 3002:3002
healthcheck:
test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://product-service:3002/health"]
interval: 30s
timeout: 10s
retries: 5
environment:
- AI_SERVICE_URL=http://ai-service:5001/
networks:
- backend_services
store-front:
build: src/store-front
container_name: 'store-front'
restart: always
ports:
- 8080:8080
healthcheck:
test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://store-front:80/health"]
interval: 30s
timeout: 10s
retries: 5
environment:
- VUE_APP_PRODUCT_SERVICE_URL=http://product-service:3002/
- VUE_APP_ORDER_SERVICE_URL=http://order-service:3000/
networks:
- backend_services
depends_on:
- product-service
- order-service
networks:
backend_services:
driver: bridge
컨테이너 이미지 만들기 및 애플리케이션 실행
Docker Compose를 사용하여 컨테이너 이미지 빌드 및 다중 컨테이너 애플리케이션 배포 작업을 자동화할 수 있습니다.
Docker
컨테이너 이미지를 만들고, RabbitMQ 이미지를 다운로드하고,
docker compose
명령을 사용하여 애플리케이션을 시작합니다.docker compose -f docker-compose-quickstart.yml up -d
docker images
명령을 사용하여 만든 이미지를 확인합니다.docker images
다음의 압축된 예제 출력은 만들어진 이미지를 보여 줍니다.
REPOSITORY TAG IMAGE ID aks-store-demo-product-service latest 72f5cd7e6b84 aks-store-demo-order-service latest 54ad5de546f9 aks-store-demo-store-front latest 1125f85632ae ...
docker ps
명령을 사용하여 실행 중인 컨테이너를 확인합니다.docker ps
다음의 압축된 예제 출력은 실행 중인 컨테이너 네 개를 보여 줍니다.
CONTAINER ID IMAGE f27fe74cfd0a aks-store-demo-product-service df1eaa137885 aks-store-demo-order-service b3ce9e496e96 aks-store-demo-store-front 31df28627ffa rabbitmq:3.13.2-management-alpine
로컬에서 애플리케이션 테스트
실행 중인 애플리케이션을 보려면 로컬 웹 브라우저에서 http://localhost:8080
으로 이동합니다. 다음 예제처럼 샘플 애플리케이션이 로드됩니다.
이 페이지에서 제품을 보고 카트에 추가해서 주문할 수 있습니다.
리소스 정리
애플리케이션 기능의 유효성을 검사했기 때문에 실행 중인 컨테이너를 중지하고 제거할 수 있습니다. 컨테이너 이미지를 삭제하지 마세요. 다음 자습서에서 사용합니다.
docker-compose down
명령을 사용하여 컨테이너 인스턴스와 리소스를 중지하고 제거합니다.docker compose down
다음 단계
이 자습서에서는 샘플 애플리케이션을 만들고, 애플리케이션에 대한 컨테이너 이미지를 만든 다음, 애플리케이션을 테스트했습니다. 다음 방법에 대해 알아보았습니다.
- GitHub에서 애플리케이션 예제 원본을 복제합니다.
- 애플리케이션 예제 원본으로 컨테이너 이미지 만들기
- 로컬 Docker 환경에서 다중 컨테이너 애플리케이션 테스트
다음 자습서에서는 ACR에 컨테이너 이미지를 저장하는 방법을 알아봅니다.
Azure Kubernetes Service